Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在基类中使用关键字this/super给出子类名称_Java_Inheritance - Fatal编程技术网

Java 在基类中使用关键字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

只是不明白在这些情况下,关键字thissuper是如何工作的。下面是两个继承示例。 主要方法是常用的

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()
重构工具可能会发现这样重命名类更容易。