Java—抽象类 - 实践

目录

1、认识抽象类

2、使用抽象类的好处

​编辑3、模版方法设计模式


1、认识抽象类

在Java中有一个关键字叫:abstract,它就是抽象的意思,可以用它修饰类,成员方法

  • abstract修饰类,这个类就是抽象类
  • abstract修饰方法,这个方法就是抽象方法。

抽象类和抽方法的格式

修饰符 bastract  class 类名{

        //抽象方法:必须abstract修饰,只有方法签名,不能有方法体

修饰符 abstract 放回值类型 方法名称(形参列表); 

}

抽象类的注意事项

  • 抽象类中不一定要有抽象方法,有抽象方法的类必须是抽象类。
  • 类有的成员:成员变量、方法、构造器、抽象类都可以有。

抽象类最主要的特点:

  • 抽象类不能创建对象,仅仅作为一种特殊的父类,让子类继承并实现。
  • 一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。

2、使用抽象类的好处

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

 Animal 类抽象类

public abstract class Animal {
    //动物的叫声,因为每个动物的叫声都不同,所以抽象方法。
    //好处一:简化方法体。
    public abstract void cry();
}

Cat类:继承了Animal抽象类重写了cry方法

public class Cat extends Animal{
    @Override
    public  void cry(){
        System.out.println("(>^ω^<)喵喵喵喵~~~");
    }
}

God类:继承了Animal抽象类重写了cry方法

public class God extends Animal{
    @Override
    public void cry(){
        System.out.println("狗汪汪汪~~~");
    }
}

Test类:测试类

public class Test {
    public static void main(String[] args) {
        //使用抽象类的好处
        Animal animal = new Cat();
        animal.cry();
    }
}
/*
输出:
(>^ω^<)喵喵喵喵~~~
 */

3、模版方法设计模式

  • 提供一个方法作为完成某个类功能的模版,模版方法封装了每个实现步骤,但允许子类提供特定步骤的实现。
  • 模版方法设计模式可以:提高代码的复用,并简化子类设计

模版方法设计模式的写法步骤:

1、定义一个抽象类。

2、在里面定义2个方法

一个模版方法:把共同的实现步骤方里面去。

        一个是抽象方法:不确定的步骤,交给具体的子类来拿完成。

        下面举个例子分别用普通方法和模版方法设计模式类实现:老师和学生同写一篇作文,作文有一个模版,模版的第一段和第三段相同,写作文的时候只需要写第二段即可。

普通版本

Student 类

public class Student {
    public void write(){
        System.out.println("第一段相同");
        System.out.println("学生的第二段");
        System.out.println("第三段相同");
    }
}

Teacher 类

public class Teacher {
    public void write(){
        System.out.println("第一段相同");
        System.out.println("老师的第二段");
        System.out.println("第三段相同");
    }
}

Test 类

public class Test {
    public static void main(String[] args) {
        Student s = new Student();
        s.write();
    }
}
/*
输出:
第一段相同
学生的第二段
第三段相同
 */

模版方法设计模式类实现

People 类:抽象类

public abstract class People {
    public void write(){
        System.out.println("第一段相同");
        wrideMain();//调用抽象方法,在子类中重写了
        System.out.println("第三段相同");
    }
    public abstract void wrideMain();
}

Student 类:继承了People类

public class Student extends People{
    @Override
    public void wrideMain() {
        System.out.println("学生的第二段");
    }
}

Teachar类:继承了People类

public class Teacher extends People{
    @Override
    public void wrideMain(){
        System.out.println("老师的第二段");
    }
}

Test类:测试类

public class Test {
    public static void main(String[] args) {
        People s = new Student();
        s.write();
    }
}
/*
输出:
第一段相同
学生的第二段
第三段相同
 */

多学一招

建议使用final关键字修饰模版方法,为什么?

  • 模版方法是给子类直接使用的,不能被子类重写。
  • 一但子类重写了模版方法,模版方法就失效了。
posted @ 2025-11-22 15:49  yangykaifa  阅读(1)  评论(0)    收藏  举报