abstract 抽象类
1.抽象类和方法定义
类:abstract class 类名{}
方法:abstract 返回值类型 方法名()
类
public abstract class A{
}
方法
abstract void go();//只有方法名,无方法体
2.抽象类子类
-
子类非抽象:
子类无法继承抽象父类的方法,必须要重写抽象父类的方法
-
子类抽象:
不需要重写,不能new
3.抽象类 notes
- 抽象类不能new,只能靠子类去实现
- 抽象类可以存在非抽象的方法,但非抽象类不能存在抽象方法(抽象方法必须在抽象类中)
- 有构造方法,但是不能new,构造方法给子类用!
- 抽象类可以用多态来创建子类对象
一般来说,会把父类定义为抽象的类,测试的时候,可以通过多态,来实现子类功能
4.面试题
(1)一个类如果没有抽象方法,能否定义为抽象类,有何意义?
//抽象父类
abstract class T {
public T(){
System.out.println("T构造器");
}
}
//子类
class A extends T {
public A(){
System.out.println("A构造器");
}
public static void main(String[] args) {
new A();
}
}
输出 :
T构造器
A构造器
(2)abstract 不能和那些关键字共存?
private 冲突 -- 对子类隐藏,而 abstract 必须让子类重写
final 冲突 -- 不能被重写,矛盾
static 无意义-- 类名调用,没有方法体,无意义
4.抽象类的作用
- 用来表示一种抽象的概念
- 面向对象方法中,抽象类用来进行类型的隐藏
某些行为可以抽象为一个类,这些行为可以有多种实现方式(子类重写抽象父类的方法)
- 从某个抽象体派生,能够扩展此模块的行为功能