abstract关键字的使用
- abstract可以修饰类、方法
- abstract修饰类:抽象类
此类不能实例化
抽象类中一定有构造器,便于子类实例化时调用
开发中,一定要有抽象类的子类,让子类实例化
- abstract修饰方法:抽象方法
抽象方法只有声明,没有方法体
包含抽象方法的类一定是抽象类
当子类重写了父类的所有抽象方法后,子类才可以实例化。否则需要使用abstract进行修饰
public abstract class Creature{
public abstract void eat();
}
class Person extends Creature{
public void eat(){
System.out.println("人吃饭");
}
}
注意
- abstract不能用来修饰:属性、构造器
- abstract不能用来修饰私有方法、静态方法(重写的方法都是非静态的,静态的不是重写)、final类和方法
拓展
创建匿名子类对象
public class test {
public static void main(String[] args){
Person a=new Person() {
@Override
public void eat() {
System.out.println("人吃饭");
}
@Override
public void walk() {
System.out.println("人走路");
}
};//注意这里的分号
fun(a);
}
public static void fun(Person a){
a.eat();
a.walk();
}
}
abstract class Person{
public abstract void eat();
public abstract void walk();
}
//人吃饭
//人走路
模板方法设计:将可变的部分写成抽象方法,后面调用的时候进行重写。
abstract class Template{
public void fun(){
...
f();
...
}
public abstract void f();
}