gpt4 book ai didi

java - 为什么抽象类允许在其中定义具体方法

转载 作者:行者123 更新时间:2023-11-29 03:06:03 25 4
gpt4 key购买 nike

我有一个抽象类A,它允许一些抽象方法和具体方法。我的问题是为什么抽象类允许声明具体方法,因为我们使用抽象类作为父类(super class)并在扩展中使用结构类。任何人都可以帮我解决这个问题吗?

abstract class A{

public void aMethod(){
System.out.println("Inside method");
}
}

最佳答案

除了共享接口(interface)之外,还有一个抽象类可以让您共享实现。一个只有抽象方法的抽象类很像一个接口(interface),除了它可以让你共享数据成员。这不如让您分享一些实现那么强大。

例如,考虑 Template Method模式,它依赖于抽象类共享实现的能力。模板方法以所有子类通用的方式执行操作,让子类提供细节。

这是一个非常简单的类层次结构,说明了这一点:

abstract class AbstractCreature {
protected abstract String myName();
public void sayHi() {
System.out.println("Hello, " + myName());
}
public void sayBye() {
System.out.println("Good bye, " + myName());
}
}
class Dolphin extends AbstractCreature {
@Override
protected String myName() {
return "dolphin";
}
}
class Bunny extends AbstractCreature {
@Override
protected String myName() {
return "bunny";
}
}
class Unicorn extends AbstractCreature {
@Override
protected String myName() {
return "unicorn";
}
}

此设置让海豚、兔子和 unicorn 共享从抽象类继承的功能(即打招呼和再见的能力)。反过来,该功能依赖于子类中提供的抽象方法的重写。

if an abstract class allows concrete method, then what is the difference from a normal class?

这是一个公平的问题。不同之处在于,将类标记为抽象会告诉使用它的程序员该类必须被继承才能有用;另一方面,常规类应该开箱即用,无需继承。

关于java - 为什么抽象类允许在其中定义具体方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32151610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com