Java抽象类

发布时间:2023年12月20日

什么是抽象类?

  • 再Java中有一个关键字叫:abstract,它就是抽象的意思,可以用它修饰类、成员变量。
  • abstract修饰类,这个类就是抽象类;修饰方法,这个方法就是抽象方法。

?

?抽象类的注意事项、特点

  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。
  • 类该有的成员(成员变量、方法、构造器)抽象类都可以有。
  • 抽象类最主要的特点:抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现。
  • 一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。

使用抽象类的好处

  • 父类知道每个子类都有做某个行为,但每个子类要做的情况不一样,父类就定义成抽象方法,交给子类去重写实现,我们设计这样的抽象类,就是为了更好的支持多态

Animal类?

public abstract class  Animal {
    private String name;

    public abstract void cry();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Dog类

public class Dog extends Animal{
    @Override
    public void cry() {
        System.out.println("汪汪汪的叫");
    }
}

?Cat类

public class Cat extends Animal{
    @Override
    public void cry() {
        System.out.println("喵喵喵的叫");
    }
}

?Test类

public class Test {
    public static void main(String[] args) {
        Animal a = new Cat();
        a.cry(); //更好的支持多态
    }
}

?

抽象类的常见应用场景:模板方法设计模块

模板方法设计模块解决了什么问题

  • 解决方法存在重复代码的问题。

?

模板方法设计模式的写法

  1. 定义一个抽象类
  2. 再里面定义两个方法
  • 一个是模板方法:把相同代码放里面去
  • 一个是抽象方法:具体实现交给子类完成

People类

public abstract class People {
    /*
    *  设计一个模板设计模式
    *  定义一个模板方法
    * */
    public void write(){
        System.out.println("abc");
        System.out.println("张三、李四、王五");
        System.out.println(writeMain());
        // 模板方法并不清楚正文部分要怎么写,但它知道子类肯定要写
        System.out.println("666");
    }

    // 设计一个抽象类方法写正文,具体实现交给子类来完成
    public abstract String writeMain();
}

Teacher类

public class Teacher extends People{
    @Override
    public String writeMain() {
        return "123456789";
    }
}

Student类

public class Student extends People{
    @Override
    public String writeMain() {
        return "987654321";
    }
}

Test类

public class Test {
    public static void main(String[] args) {
        Teacher t = new Teacher();
        t.write();

        Student s = new Student();
        s.write();
    }
}

建议使用final关键字修饰模板方法

  • 模板方法是给对象直接使用的,不能被子类重写
  • 一旦子类重写了模板得到,模板方法就失效了
文章来源:https://blog.csdn.net/SU_mu147/article/details/135086492
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。