抽象类和抽象方法
# 抽象方法和抽象类
// 一个类中有方法是抽象方法,那么这个类也要变成一个抽象类
// 一个抽象类可以有n个抽象方法
public abstract class Person {
// 在一个类中,会有一类方法,子类对这个方法非常满意,无需重写,直接使用
public void eat() {
System.out.println("吃饭");
}
// 在一个类中,会有一类方法,子类对这个方法永远不满意,会对这个方法进行重写
// 一个方法体去掉,然后被 abstract 修饰 那么这个方法就变成了抽象方法了
public abstract void say();
}
// 抽象类可以被其他类继承
class Student extends Person {
@Override
public void say() {
System.out.println("学生在说");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- 一个类中有方法是抽象方法,那么这个类也要变成一个抽象类
- 一个抽象类可以有 n 个抽象方法
- 一个方法体去掉,然后被 abstract 修饰 那么这个方法就变成了抽象方法了
- 抽象类可以被其他类继承
- 一个类继承了一个抽象类,那么这个类也可以变成抽象类,一般子类不会加
abstract
修饰,一般会让子类重写父类中的抽象方法,必须重写全部的抽象方法,如果没有重写全部的抽象方法,那么子类也可以变成一个抽象类 - 抽象类不可以创建对象
class Demo {
public static void main(String[] args) {
Student student = new Student();
student.say();
student.eat();
}
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# 抽象类的作用
在抽象类中定义抽象方法,是为了子类提供一个通用的模板,子类可以在这个模板的基础上进行开发,先重写父类的抽象方法,然后可以扩展子类自己的内容,抽象类设计避免了子类设计的随意性,通过抽象类,子类的设计变得更加严格,进行某些程度上的限制,使子类更加通用
前面的一个多态的一个Animal
类 改写
public abstract class Animal {
public abstract void shout();
}
1
2
3
4
2
3
4
# 面试题
# 1. 抽象类不能创建对象,那么抽象类中是否有构造器?
抽象类中一定有构造器 。构造器的作用 是用来给子类初始化的时候,要先
super
调用父类的构造器。
# 2. 抽象类是否可以被final
修饰
不能被
final
修饰。抽象类的初衷就是为了让子类继承的,要是被final
修饰了,就不存在了继承了,就没有子类。
编辑 (opens new window)
上次更新: 2021/11/10, 23:27:25