gpt4 book ai didi

java - 这是一个有效的抽象类吗?

转载 作者:行者123 更新时间:2023-11-30 02:48:37 24 4
gpt4 key购买 nike

这是一个有效的抽象类吗?

我知道抽象类无法实例化,所以我对实例变量language和构造函数Programmer表示怀疑。它还实现了一个未声明为 defaultwriteCode 方法。如果我没记错的话,唯一可以在抽象类中实现的方法是那些具有默认实现的方法。

public abstract class Programmer {
private String language;
public Programmer (String language) {
this.language = language;
}
public void writeCode() {
System.out.println("Written in " + language);
}
}
  • 如果它是一个有效的抽象类,有人可以解释为什么它包含构造函数吗?

  • 此外,更广泛地说,抽象类可以有实例变量吗?如果是这样,为什么?这似乎与抽象类不能被实例化的想法相矛盾吗?

  • 最后,如果有人解决 writeCode 方法,我会很高兴。为什么在没有 default 修饰符的情况下实现它?

谢谢!

最佳答案

是的,这是一个有效的抽象类。

抽象类可以有构造函数、实例变量和具体方法。

与常规类的主要区别在于它们声明抽象方法,将实现委托(delegate)给非抽象子类(这里不是这种情况,您没有抽象方法)。

另一个区别是它们不能直接初始化,即使它们确实提供了可访问的构造函数。

抽象类的构造函数通常用于在内部初始化值,并从子类或匿名调用。

查看文档 here

示例

鉴于...

public abstract class Programmer {
private String language;

public Programmer(String language) {
this.language = language;
}

public void writeCode() {
System.out.println("Written in " + language);
}
}

...和...

public class JavaProgrammer extends Programmer {
public JavaProgrammer() {
super("Java");
}
}

具体子类

new JavaProgrammer().writeCode(); // prints "Java"

匿名类(注意空类主体{})

new Programmer("JavaScript"){}.writeCode(); // prints "JavaScript"

关于java - 这是一个有效的抽象类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39372208/

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