抽象类:类和类之间有共同特征,将这些具有共同特征的类再进一步抽象形成了抽象类,由于类本身是不存在的,所以抽象类无法创建对象
抽象类和抽象类实际上可能还会有共同特征,还可以进一步再抽象
抽象类属于什么类型?引用数据类型
抽象类怎么定义?
[修饰符列表] abstract class 类名{
类体;
}
抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被子类继承的
final和abstract是对立的,不能联合使用
抽象类的子类可以是抽象类
抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的
抽象类关联一个概念:
抽象方法:表示没有实现的方法,没有方法体的方法, 例如:
public abstract void doSome();
抽象方法特点:
1. 没有方法体,以分号结尾。
2. 前面修饰符列表中有abstract关键字
抽象类不一定有抽象方法,但是抽象方法必须在抽象类里
abstract class Animal {
public abstract void move();
}
class Bird extends Animal {
public abstract void move();
重要结论***
一个非抽象的类继承抽象类,必须将抽象类中的抽象方法实现了
(抽象方法实现:从父类中继承过来的抽象方法进行覆盖/重写)
能不能使用多态?父类型引用指向子类型对象
public class AbstractTest02 {
public static void main(String[] args) {
Animal a = new Bird();
}
}
这就是面向抽象编程Animal a = new Bird(); 这是向上转型。(自动类型转换)
以后调用的是a.xxxx
a的类型是Animal,Animal是抽象的
面向抽象编程,不要面向具体编程,降低程序的耦合度,提高程序的扩展力
这种编程思想符合OCP原则
a.move();
分析一下:
编译的时候这个move()方法是谁的?
运行的时候这个move()方法又是谁的?
面试题(判断题):java语言中凡是没有方法体的方法都是抽象方法
不对,错误的。
Object类中就有很多方法都没有方法体,都是以";"结尾的。但他们都不是抽象方法,例如: 这个方法底层调用了C++写的动态链接库程序
前面修饰符列表中没有:abstract,有一个native,表示调用JVM本地程序
public native int hashCode();
仅供学习使用,内容版权归B站老师所有。
本文探讨了抽象类的概念、定义方式,阐述了抽象类的特性,如不能实例化、用于子类继承和抽象方法的使用。重点讲解了抽象方法的特点和如何在子类中实现父类的抽象方法。此外,文章还涉及了面向抽象编程的实践应用,以及编译和运行时抽象方法的行为分析。
822

被折叠的 条评论
为什么被折叠?



