abstract关键字用于修饰类:
public abstract class Action {
//abstract,抽象方法,只有方法名字,没有方法的实现(没有方法体)!
public abstract void doSomething();//抽象方法 doSomething();
}
抽象类的特点:
-
1.不能new这个抽象类,只能靠子类去实现它
-
2.抽象类中可以写普通的方法
-
3.抽象方法必须在抽象类中
抽象的抽象:约束
思考:
1.抽象类既然不能new 对象,那抽象类存在构造器吗?
2.抽象类存在的意义
(1)抽象类中有构造方法么? 由于抽象类里会存在一些属性,那么抽象类中一定存在构造方法,其存在目的是为了属性的初始化。并且子类对象实例化的时候,依然满足先执行父类构造,再执行子类构造的顺序。
范例如下:
package com.wz.abstractdemo;
abstract class A{//定义一个抽象类
public A(){
System.out.println("*****A类构造方法*****");
}
public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰
}
//单继承
class B extends A{//B类是抽象类的子类,是一个普通类
public B(){
System.out.println("*****B类构造方法*****");
}
@Override
public void print() {//强制要求覆写
System.out.println("Hello World !");
}
}
public class TestDemo {
public static void main(String[] args) {
A a = new B();//向上转型
}
}
执行结果:
*****A类构造方法*****
*****B类构造方法*****
(2)存在的意义:
减少重复代码,提高开发效率