我正在编写演示继承使用的程序,我使用super()关键字创建了一个变量。我现在试图将该变量的值放入一个调用它的新方法中,以便我可以在main方法中调用该方法以在其他类中使用它的值。
以下是相关代码:
食品类(超级类)
public class Food {
//field that stores the name of the food
public String name;
//constructor that takes the name of the food as an argument
public Food(String name){
this.name = name;
}
public String getName() {
return name;
}
}
肉类(具有超级关键字的子类)
public class Meat extends Food
{
public Meat() {
super("Meat");
}
public String getName() {
return //get super() value??;
}
}
主要课程
public class Main {
public static void main(String[] args)
{
Wolf wolfExample = new Wolf();
Meat meatExample = new Meat();
System.out.println("************Wolf\"************");
System.out.println("Wolves eat " + meatExample.getName());
}
}
感谢任何帮助,谢谢。
答案 0 :(得分:4)
你可以做到
public String getName() {
return super.getName();
}
虽然您甚至不需要首先覆盖该方法,因为您将super
类中的字段 name 声明为public
,这意味着它可以可以从任何地方访问。
答案 1 :(得分:1)
简单地写一下:
public String getName() {
return name;
}
这是因为在搜索名为name
的变量时,Java按此顺序继续:
但是,您并不需要首先覆盖子类中的getName()
。如果你没有定义它,那么它将继承超类的实现,它完全对应于你想要的行为。因此,你做了额外的工作,没有收获。
答案 2 :(得分:1)
请勿覆盖public String getName()
课程中的Meat
。
继承允许在Food
的所有子类中继承Food
的公共和受保护方法,因此在Meat
中。
因此Meat
Food
定义了这种行为:
public String getName() {
return name;
}
返回父类中存储的name
字段。
覆盖子类中的方法以编写与父方法完全相同的代码是没用的,不应该这样做,因为它具有误导性。读取代码的人会想:为什么在子类中覆盖该方法,如果它与父类相同?
修改强>
此外,如果要从子类访问超类中声明的字段,则应该:
如果字段是私有的,则在超类中提供公共getter。在这里:
public String getName() {
return name;
}
如果字段具有受保护的修饰符,则直接使用子类中的字段。
作为一般规则,您应该避免使用修饰符public来声明实例字段,因为默认情况下应该保护对象的属性,并且您应该提供仅在需要时修改字段的方法。
因此,宣布您的Meat类似乎更合适:
public class Food {
//field that stores the name of the food
private String name;
//constructor that takes the name of the food as an argument
public Food(String name){
this.name = name;
}
public String getName() {
return name;
}
}
在你的Meat
类中,想象你想在getName()
返回的字符串中添加一个附加信息,你可以覆盖它,为什么不使用超类中的字段:
public class Meat extends Food {
public Meat() {
super("Meat");
}
@Override
public String getName() {
return super.getName + "(but don't abuse it)";
}
}
这里覆盖该方法很有帮助,因为子类中方法的行为与超类中的哪个行为不同。
答案 3 :(得分:0)
其他答案告诉你如何做你想做的事。
但你不应该这样做(在现实生活中的项目中)!
面向对象编程中最重要的原则是封装(又名信息隐藏)。这意味着一个类的内部结构不应该是外部可见或可访问的 因此,所有成员变量都应该是私有的。
此外,您应该避免使用setter / getter方法,因为它们只是重定向访问。 (除了这个类是没有任何逻辑的DTO)。
答案 4 :(得分:-1)
由于food类的方法getName声明为public do
public String getName() {
return super.getName();
}