多态:
概念: 一个事物的多种形态
多态前提和体现
有继承关系或者实现关系
有方法重写
有父类引用指向子类对象
成员访问特点
方法的运行看右边,其他都看左边
多态的好处
提高了程序的维护性(由继承保证)
提高了程序的扩展性(由多态保证)
多态的弊端:
父类不能访问子类的特有方法
如果非要访问,向下转型(强转)
向上转型
从子到父
父类引用指向子类对象
向下转型
从父到子
父类引用转为子类对象
抽象类:
抽象类:包含抽象方法的类,就是抽象类。 需要使用关键字 abstract修饰
抽象方法:只有方法声明,没有方法体, 需要使用关键字 abstract修饰
抽象类特点
1:抽象类和抽象方法必须用abstract关键字修饰
格式
abstract class 类名 {}
public abstract void eat();
2:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
3:抽象类不能实例化
那么,抽象类如何实例化呢?
按照多态的方式,由具体的子类实例化。
其实这也是多态的一种,抽象类多态。
4:抽象类的子类
要么是抽象类
要么重写抽象类中的所有抽象方法
注意:想创建对象,必须要将所有的抽象方法实现,才能创建对象
抽象类的成员特点:
成员变量
可以是变量
也可以是常量
构造方法
有构造方法,但是不能实例化
那么,构造方法的作用是什么呢?
用于子类访问父类数据的初始化
成员方法
可以有抽象方法 限定子类必须完成某些动作
也可以有非抽象方法 提高代码服用性
abstract不能和哪些关键字共存
private 冲突
final 冲突
static 无意义
接口特点
接口用关键字interface表示
类实现接口用implements表示
接口不能实例化
那么,接口如何实例化呢?
按照多态的方式,由具体的子类实例化。
其实这也是多态的一种,接口多态。
接口的子类
要么是抽象类
要么重写接口中的所有抽象方法
接口成员特点
成员变量
只能是常量
默认修饰符 public static final
构造方法
没有,因为接口主要是扩展功能的,而没有具体存在
成员方法
只能是抽象方法
默认修饰符 public abstract
类与类关系:
继承关系,只能单继承,但是可以多层继承
类与接口关系:
实现关系,可以单实现,也可以多实现
还可以在继承一个类的同时实现多个接口
接口与接口关系:
继承关系,可以单继承,也可以多继承
抽象类和接口的区别?
成员区别
抽象类
变量,常量
抽象方法
非抽象方法
接口
常量
抽象方法
关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承
|
|