抽象、封装、继承、多态--基本理解

本文深入讲解面向对象编程的四大核心概念:抽象、封装、继承和多态。通过具体实例,阐述了如何利用这些概念提高代码复用性和维护性,使编程更接近人类思维方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

抽象:

我们在定义一个类的时候,实际上就是把一类事物的公有的属性和行为提取出来,形成一个物理模型,这种研究问题的方法称为抽象。

 

封装:

封装就是把抽象的数据和对数据进行的操作封装在一起,数据被保存在内部,程序的其他部分只有通过被授权的操作(成员方法)才能对数据进行操作。

电视机的开关,对音量,颜色,频道的控制是公开的,谁都可以操作,但是对机箱后盖,主机板的操作却不是公开的,一般是由专业维修人员来玩。

那么java中如何实现这种类似的控制?

java提供了四种控制修饰符控制方法和变量访问的权限:

1.public:对外公开

2.protected:对子类和同一包中的类公开

3.没有修饰符号,向同一个包的类公开

4.private:只有类本身可以访问,不对外公开

包-三大作用:

@1.区分相同名字的类

@2.当类很多时,可以很好管理类

@3.控制访问范围

包-打包命令

package com.shunping;

包-命名规范

小写字母 比如 com.sina.shunping

包-常用的包

一个包下,包含很多的类,java中常用的包有:

java.lang.*;包 自动引入java.util.* 工具包

java.net.*;网络开发包 java.awt.*包 窗口工具包

 

继承:

继承可以解决代码复用问题,让我们编程更加靠近人类的思维,当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类(比如刚才的Student),在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过extend语句来声明继承 父类:

class 子类 extends 父类

这样,子类就会自动拥有父类定义的属性和方法。

继承注意事项:

  • 子类最多继承一个父类
  • java多有类都是Object类的子类
  • JDK6中有202个包3777个类、接口、异常、枚举、注释和错误
  • 在做开发的时候,强烈建议大家多查jdk文档

方法重载:

简单地说:方法重载就是类的同一种功能的多种实现方式,到底采用哪种方式,取决于调用者给出的参数。

方法重载-注意事项

1.方法名相同

2.方法的参数类型、个数、顺序至少有一项不同

3.仅仅是返回类型不一样,是不能构成重载的

4.方法修饰符可以不同

5.如果只是控制访问符不同,不能构成重载

方法覆盖:

将父类的方法进行重新写。方法的覆盖就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的那个方法,比如上个案例的Cat类中的cry方法就覆盖了Animal类的cry方法。

方法覆盖的注意事项:

(1)子类的方法的返回类型,参数,方法名称,要和父类方法的返回类型,参数,方法名称完全一样,否则编译出错。

(2)子类方法不能缩小父类方法的访问权限。(假设父类方法时public,但是你的子类方法改成了protected,这样就会出现报错)

约瑟夫问题:

多态:

所谓多态,就是指一个引用(类型)在不同情况下的多种状态,你也可以这样理解:多态是指通过指向父类的指针,来调用在不同子类中实现的方法。

多态的好处:

后面创建的类是前面创建的那个类的子类,就可以通过父类创建的对象对子类的方法进行访问,一个对象可以访问多个方法。

/***************

* 作者:T.song

* 功能:多态演示

* *****************/

public class grap extends JFrame{

 

public static void main(String[] args) {

// grap g1 = new grap();

Animal animal = new Cat();

animal.cry();

animal = new Dog();

animal.cry();

 

}

 

}

 

public class Animal {

 

int age;

String nameString;

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getNameString() {

return nameString;

}

public void setNameString(String nameString) {

this.nameString = nameString;

}

public void cry() {

System.out.println("不知道怎么叫····");

}

}

//体现了方法的覆盖

class Cat extends Animal

{

public void cry() {

System.out.println("喵喵喵···");

}

}

class Dog extends Animal

{

public void cry() {

System.out.println("汪汪汪···");

}

}

 

public class Animal {

 

int age;

String nameString;

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getNameString() {

return nameString;

}

public void setNameString(String nameString) {

this.nameString = nameString;

}

public void cry() {

System.out.println("不知道怎么叫····");

}

public void eat() {

System.out.println("不知道吃什么······");

}

}

//体现了方法的覆盖

class Cat extends Animal

{

public void cry() {

System.out.println("喵喵喵···");

}

}

class Dog extends Animal

{

public void cry() {

System.out.println("汪汪汪···");

}

}

 

class Food

{

public String name;

public void showName() {

}

}

class Fish extends Food

{

public void showName()

{

System.out.println("鱼···");

}

}

class Bone extends Food

{

public void showName()

{

System.out.println("骨头···");

}

}

 

class Master

{

//给动物喂食物,使用多态,方法就可以用一个

public void feed(Animal an,Food food) {

an.eat();

food.showName();

}

}

 

package com.swing;

import javax.swing.*;

/***************

* 作者:T.song

* 功能:多态演示

*

* *****************/

public class grap extends JFrame{

 

public static void main(String[] args) {

Master master = new Master();

master.feed(new Dog(),new Bone());

}

 

}

 

多态注意事项:

java允许父类的引用变量引用它的子类的实例(对象)

Animal animal = new Cat();

这种转换时自动完成的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Java中的四大特性是抽象封装继承多态。其中,抽象接口是实现抽象的两种方式,而封装则是将数据方法包装在一起,以保护数据不被外部直接访问修改。继承则是通过子类继承父类的属性方法,实现代码的复用扩展。多态则是同一种行为具有多种不同表现形式或形态的能力。 具体来说,抽象类是一种不能被实例化的类,其中可以包含抽象方法抽象方法。抽象方法没有具体的实现,需要在子类中被实现。而非抽象方法则有具体的实现,可以被子类继承重写。抽象类可以作为其他类的父类,子类需要实现其中的抽象方法才能被实例化。 封装则是将数据方法包装在一起,以保护数据不被外部直接访问修改。Java中可以使用private、protectedpublic三种访问修饰符来实现封装。private修饰的属性方法只能在类内部访问,protected修饰的属性方法可以在类内部子类中访问,而public修饰的属性方法可以在任何地方访问。 继承则是通过子类继承父类的属性方法,实现代码的复用扩展。Java中使用extends关键字来实现继承。子类可以继承父类的publicprotected属性方法,但不能继承private属性方法。子类可以重写父类的方法,也可以使用super关键字调用父类的方法。 多态则是同一种行为具有多种不同表现形式或形态的能力。Java中通过继承接口实现多态。具体来说,子类可以重写父类的方法,实现不同的行为表现形式。而接口则可以让不同的类实现相同的方法,实现不同的行为表现形式。 下面是一个简单的Java代码示例,演示了抽象封装继承多态的使用: ```java // 抽象类 abstract class Animal { // 封装 private String name; public Animal(String name) { this.name = name; } // 抽象方法 public abstract void makeSound(); // 非抽象方法 public void eat() { System.out.println(name + " is eating."); } } // 继承 class Dog extends Animal { public Dog(String name) { super(name); } // 重写父类方法 @Override public void makeSound() { System.out.println("Woof!"); } } // 多态 class AnimalSound { public static void makeSound(Animal animal) { animal.makeSound(); } } public class Main { public static void main(String[] args) { // 多态 Animal dog = new Dog("Buddy"); dog.makeSound(); // 输出:Woof! dog.eat(); // 输出:Buddy is eating. // 多态 AnimalSound.makeSound(dog); // 输出:Woof! } } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值