相关疑难解决方法(0)

java可以在其他对象中调用父重写方法但不能调用子类型吗?

这是工作的java代码

class Cup {
    public String sayColor() {
        return "i have a color .";
    }
}

class TCup extends Cup{
    public String sayColor(){
        System.out.println(super.getClass().getName());
        return super.sayColor()+"color is tee green.";
    }
}

class MyTCup extends TCup {
    public String sayColor(){
        System.out.println(super.getClass().getName());
        return super.sayColor()+"but brushed to red now!";
    }
}
class Test {
    public static void main(String[] args) {
        Cup c = new MyTCup();
        System.out.print(c.sayColor());
    }
}
Run Code Online (Sandbox Code Playgroud)

并运行Test类打印

MyTCup
MyTCup
i have a color .color is tee green.but brushed to red now! …
Run Code Online (Sandbox Code Playgroud)

java overriding

36
推荐指数
1
解决办法
8万
查看次数

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但没有运气.有任何想法吗?

java polymorphism overriding

10
推荐指数
1
解决办法
4045
查看次数

标签 统计

java ×2

overriding ×2

polymorphism ×1