面向对象-多态-抽象类-接口(个人复习)

tech2024-07-21  56

文章目录

面向对象一、多态1.泛化2.多态 二、抽象类1.抽象方法2.抽象类3.抽象类的作用4.抽象类的其他细节 三、接口1.接口2.接口的特点3.接口的语法4.实现多个接口5.接口继承接口6.提示7.抽象类和接口的区别

面向对象

一、多态

1.泛化

泛化就是抽象化,把具体的事物当作抽象的东西看待(把猫看成动物)。 泛化也叫向上转型,是通往多态的路口。

把子类对象看作父类对象,这样可行吗? 可行,自愿放弃了更丰富的信息。

这样做有用吗? 有用,我们可以用同样的类型处理不同的东西

注意:只有向上转型,没有向下转型。向下转型叫做强转,这样做很不安全!

注意:泛化指的是引用的泛化,不是对象的泛化,内存中的对象还是原来的对象,只是把引用的类型给改变了。

2.多态

(1)多态的概念 多态(Polymorphism)按字面的意思就是“多种状态”。 在面向对象语言中,接口的多种不同的实现方式即为多态。 简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

(2)多态的分类 Java中的多态,可以分为静态多态和动态多态。 静态多态就是指方法的重载。 动态多态是指“动态绑定”。而我们这里所说的多态,大多数是指动态多态。

(3)多态应该具备的条件 1.继承或者接口 2.子类重写父类方法 3.父类引用指向子类对象(泛化)

(4)动态绑定 所谓动态绑定,是指在编译期不能确定引用指向什么类型,而是在运行期选择具体的类型。

public class Animal{ String name; public Animal(){ } public void eat(){ } public void sayHello(){ } } public class Cat extends Animal{ public void eat(){ } public void sayHello(){ } } public static void main(String[] args){ Animal c = new Cat; c.eat();//动态绑定---绑定的是Cat类中重写的eat方法 }

总结 多态中成员方法的访问特点:编译看左边,运行看右边

(5)静态绑定 静态绑定是指编译期就确定调用的是父类中的成员。 静态不是针对类中的普通方法,而对于成员变量,静态变量,静态方法,private修饰的方法,采用的是静态绑定。

Animal c = new Cat(); c.eat(); //动态绑定 System.out.println(c.name); //静态绑定 c.sayHello(); // 静态绑定

总结: 成员变量、静态方法、静态变量、私有变量等采用静态绑定 编译看左边,运行看左边

(6)多态带来的好处 提高了代码的维护性(继承保证) 提高了代码的可扩展性(多态保证)

二、抽象类

1.抽象方法

用abstract关键字修饰的方法,称为抽象方法 抽象方法的特点,只有方法声明,没有方法体 抽象方法的作用:被子类重写,为子类规定类方法的调用格式,具体操作内容等待子类区完成

2.抽象类

至少包含一个抽象方法的类叫抽象类。(用abstract修饰) 抽象类的特点: 抽象类不能被实例化。 抽象类唯一的作用就是被子类继承 继承抽象类的类,有责任去实现抽象类中的所有抽象方法。如果不实现,那么子类也必须声明为抽象类 抽象类中可以包含非抽象方法。

3.抽象类的作用

抽象类表达共性,提供了可被继承的范本,标准的制定者。 抽象方法也是表达共性,为多个继承类提供方法的调用格式规定。

4.抽象类的其他细节

1、抽象类不能创建对象,那么抽象类中是否有构造方法? 抽象类中一定有构造方法。主要为了初始化抽象类中的属性。通常由子类实现。

2、final和abstract是否可以同时修饰一个类? 一定不能同时修饰。因为:抽象类的作用就是被继承,而final修饰的类不能被继承

三、接口

1.接口

接口是虚而又虚的类,它只有方法的形式描述,没有任何实际内容。 可以声明实现了多个接口,接口是多重继承的替代品。

2.接口的特点

1、接口不能被实例化 2、接口用来被类实现 3、接口中可以定义属性和方法: 接口中的所有属性 默认的修饰符是 public static final,所以定义时必须赋值。 接口中的所有方法 默认的修饰符是 public abstract 4、接口没有构造方法

3.接口的语法

(1)接口的定义 格式

interface 接口名{ 属性 抽象方法 }

(2)实现接口 格式

类名 implements 接口{ 实现接口中的方法 }

当一个类实现某个接口时,类中要对接口中的所有方法进行实现(添加方法体,完成方法)

4.实现多个接口

一个类只能继承一个父类,但能同时实现多个接口。 格式

class 类名 extends 父类名 implements 接口1,接口2,……{ //类的成员 }

5.接口继承接口

格式

子接口 extends 父接口1,父接口2,...{ } public interface Inter3 extends Inter1,Inter2{ }

6.提示

1.能用接口的地方,不用类。(面向接口编程) 2.一个模块尽量少知道其它模块的信息,知道的越少,对今后的维护越有利。

7.抽象类和接口的区别

抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的。 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法。 接口中不能含有普通方法,而抽象类中可以存在普通方法。 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

最新回复(0)