在应用程序中使用抽象类时,我遇到了两种可能的方法来访问抽象类中的数据。因为它是一个抽象类的背景,一个人会优先于另一个吗?
public abstract class Example {
private String name;
public Example(String name) {
this.name = name;
}
//other methods that can be overridden in child classes
}
public class ExampleTwo extends Example {
public ExampleTwo() {
super("ExampleTwo");
}
}
或者在给定相同输出的情况下简单地使用值覆盖返回方法会更好。例如:
public abstract class Example {
public abstract String getName();
//other methods that can be overridden in child classes
}
public class ExampleTwo extends Example {
@Override
public String getName() {
return "ExampleTwo";
}
}
答案 0 :(得分:1)
您描述了两种不同的场景。在第一个m.find()
中是一个变量,它在构造函数中设置并使用其getter读取。第二个定义了name
方法,它可以返回任何内容,例如随机字符串。
答案 1 :(得分:1)
嗯,首先,这两种方法完全不同。您的第一个示例永远不会将name
变量公开给其子项,因为它是private
。您的第二个示例要求每个孩子都将getName
作为其API的一部分来实现。
最终取决于你想要完成的事情。
在第一种情况下,我会假设您正在为您的课程建立某种传统状态,并且您的孩子需要向父母提供一些元数据,以便父母的方法可以正确响应。想想一个Animal等级;你在父母中定义makeSound
,但是每个孩子都会告诉它如何发言。
在第二种情况下,我倾向于使用抽象类的接口,因为在这种方法中你没有从继承获得任何胜利。