Java:抽象abstract、模板方法

abstract

没有方法体

public void eat();

abstract方法不能是private 因为abstract方法就是要重写的, 你用了private子类没权限了还怎么重写?

注意事项

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

好处

更好满足多态
父类知道子类都要做某个行为。每个子类都必须实现这个方法。
当用父类创建对象时

		Animal animal = new Dog();
        animal.setName("82");
        animal.eat();

代码

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

模板方法

父类定义子类一定要重写的方法为abstract抽象方法。

父类Dog.java

模板方式是让所有子类都要一致的,加上final,防止其他子类重写(防止修改)
在这里插入图片描述

/**
 * @Author: ggdpzhk
 * @CreateTime: 2024-08-13
 */
public abstract class Dog {
    private String name;

    public String getName() {
        return name;
    }

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

    public Dog(String name) {
        this.name = name;
    }

    public Dog() {
    }
    public final void writeAll() {
        System.out.println("《我的狗》");
        System.out.println("我的狗叫"+name);
        System.out.println(write());
        System.out.println("我很爱我的狗");
    }

    public abstract String write();
}

子类

两个学生写关于狗的作文

StudentA.java

/**
 * @Author: ggdpzhk
 * @CreateTime: 2024-08-13
 */
public class StudentA extends Dog {

    @Override
    public String write() {
        return "我的狗很能吃";
    }
}

StudentB.java

/**
 * @Author: ggdpzhk
 * @CreateTime: 2024-08-13
 */
public class StudentB extends Dog{
    @Override
    public String write() {
        return "我的狗很白很能跑撞人很有劲";
    }
}

Test.java

/**
 * @Author: ggdpzhk
 * @CreateTime: 2024-08-13
 */
public class Test {
    public static void main(String[] args) {
        StudentA studentA = new StudentA();
        studentA.setName("地雷");
        studentA.writeAll();


        StudentB studentB = new StudentB();
        studentB.setName("旺财");
        studentB.writeAll();
    }
}

运行结果

在这里插入图片描述

模板方法总结

模板方法解决了方法中代码重复的问题

怎么写

  • 定义一个抽象类(父类)
  • 在里面定义两个方法:一个是模板方法(建议用final关键字修饰):放相同的代码;一个是抽象方法,具体的实现交给子类完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值