Java-多态,抽象类

一.多态
(1)多态的概述
某一个事物在不同时刻表现出来的不同状态
(2)多态的前提
a要有继承关系
b要有方法重写
c要有父类引用指向子类对象。
(3)多态中的成员访问特点
a成员变量
编译看左边,运行看左边
b构造方法
创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化
c成员方法
编译看左边,运行看右边
d静态方法
编译看左边,运行看左边
案例
在这里插入图片描述0在这里插入图片描述
在这里插入图片描述
从图片中可以看到,使用多态时,会先访问父类的构造方法,再访问子类的构造方法,然后才执行主方法中的命令
(4)多态的好处
a:提高了代码的维护性(继承保证)
b:提高了代码的扩展性(由多态保证)
(5)多态的弊端(引出向下转型,多态其实是向上转型)
a不能调用子类特有的成员(解决方法:把父类的引用强制转化为子类的引用,即向下转型。)
案例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
二.抽象类
(1)抽象类概述
在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类
(2)抽象类特点
a:抽象类和抽象方法必须用abstract关键字修饰
抽象类格式: abstract class 类名 {}
抽象方法格式: public abstract void eat();
b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
c:抽象类中可以有构造方法,抽象类不能进行实例化,那么要构造方法有什么作用呢?
用于子类访问父类数据时的初始化
d:抽象类不能直接实例化那么,抽象类如何实例化呢?
按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
e:抽象类的子类
要么是抽象类
要么重写抽象类中的所有抽象方法
(3)抽象类的成员特点
A:抽象类的成员特点
a:成员变量:既可以是变量,也可以是常量。
b:构造方法:有。
用于子类访问父类数据的初始化。
c:成员方法:既可以是抽象的,也可以是非抽象的。
B:案例演示
抽象类的成员特点
C:抽象类的成员方法特性:
a:抽象方法 强制要求子类做的事情。
b:非抽象方法 子类继承的事情,提高代码复用性。
案例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
子类重写了父类抽象方法,抽象方法必须重写。
(4)abstract不能和哪些关键字共存?
private 冲突
final 冲突
static 不能共存 无意义

猜你喜欢

转载自blog.csdn.net/PreyHard/article/details/83189265
今日推荐