Java 在基类中使用关键字this/super给出子类名称
只是不明白在这些情况下,关键字this和super是如何工作的。下面是两个继承示例。 主要方法是常用的Java 在基类中使用关键字this/super给出子类名称,java,inheritance,Java,Inheritance,只是不明白在这些情况下,关键字this和super是如何工作的。下面是两个继承示例。 主要方法是常用的 public static void main(String[] args) { SeaCreature dolphin = new Dolphin(); dolphin.swim(); // Dolphin is swimming - in both cases } class SeaCreature { public void swim() { S
public static void main(String[] args) {
SeaCreature dolphin = new Dolphin();
dolphin.swim(); // Dolphin is swimming - in both cases
}
class SeaCreature {
public void swim() {
System.out.println(this.getClass().getSimpleName() + " is swimming");
}
}
海洋生物是常见的
public static void main(String[] args) {
SeaCreature dolphin = new Dolphin();
dolphin.swim(); // Dolphin is swimming - in both cases
}
class SeaCreature {
public void swim() {
System.out.println(this.getClass().getSimpleName() + " is swimming");
}
}
第一例为海豚类。在这种情况下,我希望这个In swim()方法给出的是海洋生物对象而不是海豚
class Dolphin extends SeaCreature {
}
class Dolphin extends SeaCreature {
@Override
public void swim() {
System.out.println(super.getClass().getSimpleName() + " is swimming");
}
}
第二例为海豚类。在本例中,我希望swim()方法中的super给出的是海洋生物对象,而不是海豚
class Dolphin extends SeaCreature {
}
class Dolphin extends SeaCreature {
@Override
public void swim() {
System.out.println(super.getClass().getSimpleName() + " is swimming");
}
}
然而,在这两种情况下,结果都是“海豚在游泳”。这是如何工作的?混淆可能来自
getClass()
方法,该方法返回对象的运行时类,这意味着您将返回实例化的类,而不是父类,即使方法调用发生在父类中
我建议对字符串“Dolphin”
或“Seabiot”
进行硬编码,并使用它们,这可能会帮助您更好地可视化调用
混淆可能来自
getClass()
方法,该方法返回对象的运行时类,这意味着您将返回实例化的类,而不是父类,即使方法调用发生在父类中
我建议对字符串“Dolphin”
或“Seabiot”
进行硬编码,并使用它们,这可能会帮助您更好地可视化调用
对象仍然是
海豚
。而且对象仍然是海豚
。或者海豚.class.getSimpleName()
和海洋生物.class.getSimpleName()
和seabeact.class.getSimpleName()
重构工具可能会发现这样重命名类更容易。