抽象类abstract、模板方法

1、抽象类、抽象方法是什么样的?

·都是用 abstract 修饰的;抽象方法只有方法签名,不能写方法体。

2、抽象类有哪些注意事项和特点?
抽象类中可以不写抽象方法,但有抽象方法的类一定是抽象类
.类有的成员(成员变量、方法、构造器)抽象类都具备。
抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现。
一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。

3、抽象类的应用场景和好处是什么?

·两种主要的应用场景,一种是:用抽象类,我们可以把子类中相同的代码,包括方法签名都抽上来,这样能更好的支持多态,以提高代码的灵活性。
·一种是:反过来用,我们不知道系统未来具体的业务实现时,我们可以先定义抽象类,将来让子类去继承实现,以方便系统的扩展。

 

package com.xinbao.d3_abstruct;

public abstract class Animal {
    private String name;

    public abstract void cry(); //抽象类

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
package com.xinbao.d3_abstruct;

public class Cat extends Animal{
    @Override
    public void cry() {
        System.out.println(getName() + "喵喵喵~");
    }
}
package com.xinbao.d3_abstruct;

public class Dog extends Animal{
    public void cry(){
        System.out.println(getName() + "汪汪汪~");
    }
}
package com.xinbao.d3_abstruct;

public class Test {
    public static void main(String[] args) {
        Animal c = new Cat();
        c.setName("猫");
        c.cry();//猫喵喵喵~
    }
}

1、模板方法设计模式解决了什么问题?
.解决方法中存在重复代码的问题。
2、模板方法设计模式应该怎么写?
.定义一个抽象类。
.在里面定义2个方法,一个是模板方法:放相同的代码里,一个是抽象方法:具体实现交给子类完成。

3、模板方法建议使用什么关键字修饰?为什么
建议使用 final 关键字修饰模板方法。防止子类重写

package com.xinbao.d4_abstract_template_mwthod;

public abstract class C {
    //模板方法
    public final void sing(){
        System.out.println("唱一首你喜欢的歌:");

        doSing();//调用抽象方法

        System.out.println("唱完了!");
    }

    public abstract void doSing();
}
package com.xinbao.d4_abstract_template_mwthod;

public class A extends C{
    @Override
    public void doSing() {
        System.out.println("那些痛的记忆,落在春的泥土里~");
    }
}
package com.xinbao.d4_abstract_template_mwthod;

import org.w3c.dom.ls.LSOutput;

public class B extends C{
    @Override
    public void doSing() {
        System.out.println("风中你的泪滴,滴滴落在回忆里~~");
    }
}
package com.xinbao.d4_abstract_template_mwthod;

public class Test {
    public static void main(String[] args) {
        C a = new A();
        a.sing();
        C b = new B();
        b.sing();
    }
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=45668:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\code\out\production\oop-app4 com.xinbao.d4_abstract_template_mwthod.Test
唱一首你喜欢的歌:
那些痛的记忆,落在春的泥土里~
唱完了!
唱一首你喜欢的歌:
风中你的泪滴,滴滴落在回忆里~~
唱完了!

Process finished with exit code 0

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值