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