抽象类

抽象类意义

Q:为什么引入抽象类?
A:父类方法的不确定性

class Animal {
    private String name;
    private int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //eat方法动物都有,但不知道什么动物,在这里还要写,真是麻烦
    public void eat(){
        System.out.println("这是一个动物,但不知道吃什么");
    }
}
  • 问题:在这里,动物类有一个eat()方法,但不知道下面的子类要怎么写,写在父类又没啥用,没有任何意义,子类还要重写。
  • 解决方法:将该方法写为抽象方法,即没有实现的方法(没有方法体)
    抽象代码格式:
//由于有抽象方法,类需要声明为抽象类
abstract class Animal {
    private String name;
    private int age;

    public Animal(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
	//声明为抽象方法
    public abstract void eat();

}

抽象类被继承,由子类来实现抽象方法

抽象类意义:

  • 抽象类的价值更多作用时在于设计,是设计者设计好后,让子类继承并实现抽象类

注意点:

  • 抽象类不能实例化
  • 抽象类不一定含有抽象方法
  • 抽象类还可以实现方法
  • 抽象类本质还是类,可以有任意成员
  • 抽象方法不能有主体
  • 如果一个类继承了一个抽象类,那么必须实现全部抽象方法,或者继续声明为抽象类
  • 抽象方法不能用private、final、static修饰,因为这些关键字与重写概念相违背

抽象类实践:模板设计模式

假如有许多个类,每个类需要执行一定的计算任务,每个类中都有一些相同的部分,这样编写代码会造成很大的冗余

改进一:

将每个类的相同代码抽取出来放入一个模块中,并且对于每个类将计算任务和这个模块组合使用,降低了耦合度

进一步改进:

设计一个抽象类,抽象方法为每个类特定的计算任务,将相同的代码也写入抽象类中
由子类继承,然后只去实现抽象方法就可以了

posted @ 2023-02-18 19:47  pureayu  阅读(81)  评论(0)    收藏  举报