抽象类 | B站Java学习笔记

本文探讨了抽象类的概念、定义方式,阐述了抽象类的特性,如不能实例化、用于子类继承和抽象方法的使用。重点讲解了抽象方法的特点和如何在子类中实现父类的抽象方法。此外,文章还涉及了面向抽象编程的实践应用,以及编译和运行时抽象方法的行为分析。

抽象类:类和类之间有共同特征,将这些具有共同特征的类再进一步抽象形成了抽象类,由于类本身是不存在的,所以抽象类无法创建对象

抽象类和抽象类实际上可能还会有共同特征,还可以进一步再抽象

抽象类属于什么类型?引用数据类型

抽象类怎么定义?

[修饰符列表] 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站老师所有。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值