我读了这个问题并认为如果有人可以写的话很容易解决(不是没有它可以解决):
@Override
public String toString() {
return super.super.toString();
}
Run Code Online (Sandbox Code Playgroud)
我不确定它在许多情况下是否有用,但我想知道为什么它不是,如果这样的东西存在于其他语言中.
你们有什么感想?
编辑: 澄清:是的,我知道,这在Java中是不可能的,我不会真的错过它.这不是我期望的工作,并且惊讶于编译错误.我刚才有了这个想法并想讨论它.
出于好奇,这是一个问题.
我知道当我们通过引用它的超类来调用子类对象的重写方法时,JVM重视对象的类型而不是引用的类型.
这是我的简单代码:
class Animal
{
void eat()
{
System.out.println("Animal is eating...");
}
}
class Horse extends Animal
{
@Override
void eat()
{
System.out.println("Horse is eating...");
}
}
public class PolymorphismTest
{
public static void main(String...args)
{
Animal a=new Animal();
a.eat();
Animal h= new Horse();
h.eat();
}
}
Run Code Online (Sandbox Code Playgroud)
正如所料,我得到了输出:
run:
Animal is eating...
Horse is eating...
BUILD SUCCESSFUL (total time: 0 seconds)
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,有没有什么方法可以使用引用h来调用超类eat()方法而不是子类1?我知道这是一个有点违反多态定律的问题,但你永远不知道何时需要这样做.
我试图将引用h强制转换为Animal但没有运气.有任何想法吗?
我有一个父类和扩展类,都包含一个toString()方法.
我如何toString()从Test应用程序调用父类的方法?
现在调用扩展类的toString方法objectname.toString(),但父类呢?
在此先感谢您的帮助.
我有两个类动物和狗.因为你可以从动物身上延伸出来.我可以毫无问题地编写这些类,但我注意到我可以像这样创建一个新的dog对象:
Dog firstDog = new Dog("rocky");
Run Code Online (Sandbox Code Playgroud)
没关系,但是当我尝试创建这样的新实例时:
Animal secondDog = new Dog("alex");
Run Code Online (Sandbox Code Playgroud)
没有任何错误,但我无法访问我在Dog类中编写的任何字段或方法,即使它们是公共的,所以如果我想在一个类型与其超类的类型相同的变量中保存一个对象,我可以到达字段和仅实现超类的方法(对于此示例名称,颜色,setColor()和toString()),并且没有任何方法可以访问在子类中实现的字段和方法.我是否正确理解当我尝试调用secondDog的toString()函数时它调用我在Dog类中编写的方法,我知道我在Dog类中重写了这个函数但是我无法达到我在Dog类中实现的其他方法.java如何处理这些?
动物类:
public class Animal {
private String name;
private String color;
public Animal(String name){
this.name=name;
}
public void setColor(String color){
this.color=color;
}
public String toString(){
return"Hi, my name is " + this.name + ". I'm " + this.color;
}
}
Run Code Online (Sandbox Code Playgroud)
狗类:
public class Dog extends Animal {
private int age;
public Dog(String name){
super(name);
setColor("gray");
this.age = 7;
}
public String speakDog(){
return"wof!";
}
public String toString(){ …Run Code Online (Sandbox Code Playgroud)