抽象类入门

抽象类:被abstract修饰的类,抽象类一般都是设计为父类!

注意:当一个类继承了抽象父类时,语法要求必须重写父类中的所有抽象方法。

抽象方法:没有方法体的方法。
//抽象类
public abstract class TuXing {
    public abstract void getArea();
}


//注意:当一个类继承了抽象父类时,语法要求必须重写父类中所有抽象方法
class JuXing extends TuXing {
    public void getArea() {
        System.out.println("矩形面积长乘高");
    }
}

抽象类的注意事项:

1、抽象类不能创建对象。

2、抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类。

3、抽象类有构造方法!——Java语法中只要是class就一定有构造。

为什么抽象类有构造方法:因为抽象类一般都是设计为父类,父类一定有子类,如果没有构造方法子类如何访问父类呢。

4、抽象类的子类有两种:

1、积极的子类:重写父类所有抽象方法。

2、消极的子类:继续沿用父类抽象方法,自身也继续抽象。

Eg:

  • 案例需求 定义猫类(Cat)和狗类(Dog) 猫类成员方法:eat(猫吃鱼)drink(喝水…) 狗类成员方法:eat(狗吃肉)drink(喝水…)
  • 实现步骤
    1. 猫类和狗类中存在共性内容,应向上抽取出一个动物类(Animal)
    2. 父类Animal中,无法将 eat 方法具体实现描述清楚,所以定义为抽象方法
    3. 抽象方法需要存活在抽象类中,将Animal定义为抽象类
    4. 让 Cat 和 Dog 分别继承 Animal,重写eat方法
    5. 测试类中创建 Cat 和 Dog 对象,调用方法测试
  • 代码实现
//动物类
public abstract class Animal {
    public void drink(){
        System.out.println("喝水");
    }

    public Animal(){

    }

    public abstract void eat();
}
//猫类
public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}
//狗类
public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }
}
//测试类
public static void main(String[] args) {
        Dog d = new Dog();
        d.eat();
        d.drink();

        Cat c = new Cat();
        c.drink();
        c.eat();

        //Animal a = new Animal();
        //a.eat();
    }

抽象类的使用场景

1、保证能看懂源码

2、设计模式: 一些上乘的编码套路。(一共23种设计模式,常用的8种!)

–模板模式

总结:固定的内容写在模板中,变化的内容设计为抽象方法,由不同的子类给出不同的实现!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注