我有2个类,分别称为超类和子类,我试图将子类对象转换为超类,但是当我想使用超类的子类对象时,它似乎不起作用。请帮忙解释一下。谢谢。这些是代码:-
public class superclass
{
public void displaySuper()
}
System.out.println("Display Superclass");
}
}
public class subclass extends superclass
{
public void displaySub()
{
System.out.println("Display Subclass");
}
}
public class Testing
{
public static void main(String args[])
{
subclass sub = new subclass();
superclass sup = (superclass) sub;
当我尝试从子类中使用displaySub()时出现错误
sup.displaySub(); //the displaySub method cant found
}
}
超类不能知道子类方法。
以这种方式思考:
您有超类Pet
您有Pet
的两个子类,即:Cat
,Dog
speak
Pet
超类知道这些,因为所有Pet
都可以说话(即使它不知道此操作的确切原理)Dog
可以做猫不能做的事情,即eatHomework
Dog
强制转换为Pet
,则应用程序的观察者将不会意识到Pet
实际上是Dog
(即使我们知道这是实现者)eatHomework
的Pet
没有意义您可以通过告诉程序您知道sup
的类型为subclass
来解决您的问题>
public class Testing { public static void main(String args[]) { subclass sub = new subclass(); superclass sup = (superclass) sub; subclass theSub = (subclass) sup; theSub.displaySub(); } }
您可以通过执行以下操作来完全解决该问题:
public class superclass { public void display() } System.out.println("Display Superclass"); } } public class subclass extends superclass { public void display() { System.out.println("Display Subclass"); } } public class Testing { public static void main(String args[]) { subclass sub = new subclass(); superclass sup = (superclass) sub; sup.display(); } }
查看本教程的更多信息:overrides
尽管超级对象和子对象都指向内存中的同一对象,但是您的超级对象对sub.subMethod()的存在一无所知。因此,您遇到了以上错误。下图说明了发生的情况:
这将不起作用,因为您正在执行narrowing reference conversion。从JLS: