学习java过程之-abstract

关于abstract自己的理解:

一、引出为什么会需要abstract这个关键字:

编写一个程序,有一群动物,你能说出动物喜欢吃什么吗?肯定是不行的。

因为我并没有说是具体那个动物,所以你没办法说出动物喜欢吃什么。

所以说这个动物是一个很抽象的,很广泛的。导致你不能说出吃什么。如果把吃比作是方法。而动物比作类的话。那么这个类是抽象的,对应的这个吃的方法也是抽象的。

二、abstract的介绍:

1:用abstract修饰的类,叫做抽象类

抽象类的定义方式:(public/默认修饰符) abstract 类名。

2:用abstract修饰的方法,叫做抽象方法。

抽象方法的定义方式:访问修饰符(除了private) abstract 返回数据类型 方法名(形参列表);【注意抽象方法是没有方法体的】 

3:抽象类和抽象方法的价值在于设计模式中。

4:这个abstract关键字是考官比较喜欢问的,所以对它理解是否深刻,对于自己的面试有很大的帮助。

三、abstract关键字需要注意的细节

(1)抽象类是不能创建实例化对象的,换而言之就是不能 new 抽象类。

(2)抽象类不一定有抽象方法,但是如果有抽象方法,那么它一定是抽象类。

(3)abstract这个关键字,只能用来修饰类 或者 方法。

(4)抽象类也是一个类,它出了不能创建对象之外,普通所具有的所有成员抽象类都可以具有,但是对于普通类来说,抽象类比它多一个抽象方法。

(5)抽象方法不能有方法体

(6)如果一个类继承了抽象类,如果这个抽象类有抽象方法,那么这个子类必须要重写这个抽象方法,除非子类也变成抽象的。

(7)※ 抽象方法,不能和private final 和 static 一起使用。因为使用这些关键字(final.,static,privvate)之后,方法就不能重写了。而抽象方法如果有继承情况,一定得进行重写。

四、final、static、abstract的理解

修饰内容 属性 方法 局部变量 方法块
关键字
static × ×
final ×
abstract × × ×

final和abstract关键字都可以修饰类,但两者还是有区别的:

(1)final可以实例化对象,但是没办法被继承

(2)abstract没办法实例化对象,但可以被继承

final 和 static 组合一起使用时有可以优化底层代码,共同修饰一个属性,调用这个属性时不会导致类的加载。

(1)在饿汉式,会出现调用static属性的时候,会自动加载类,导致对象的加载,即使没有使用这个对象,但它还是会加载,导致资源的浪费。如果用final 和 static来修饰这个属性,然后再调用这个属性时,是不会加载类的。

Guess you like

Origin blog.csdn.net/m0_62452821/article/details/121881282