我对在Java中转换对象意味着什么感到困惑。
说你有..。
Superclass variable = new Subclass object();
(Superclass variable).method();这里发生了什么事?变量类型是改变了,还是变量中的对象发生了变化?很困惑。
发布于 2011-03-15 02:32:31
请看一下这个示例:
public class A {
//statements
}
public class B extends A {
public void foo() { }
}
A a=new B();
//To execute **foo()** method.
((B)a).foo();发布于 2011-03-15 04:06:00
假设您有一个超类果树和子类Banana,并且您有一个方法addBananaToBasket()
例如,该方法将不接受葡萄,因此您需要确保将香蕉添加到篮子中。
所以:
Fruit myFruit = new Banana();
((Banana)myFruit).addBananaToBasket();⇐--这叫做铸造
发布于 2013-12-02 00:09:22
您所引用的示例在java中称为Upcasting。
它使用指向它的超类变量创建子类对象。
变量不变,它仍然是超类的变量,但它指向子类的对象。
例如,假设你有两个类机器和照相机;照相机是机器的一个子类
class Machine{
public void start(){
System.out.println("Machine Started");
}
}
class Camera extends Machine{
public void start(){
System.out.println("Camera Started");
}
public void snap(){
System.out.println("Photo taken");
}
}
Machine machine1 = new Camera();
machine1.start();如果您执行上述语句,它将创建一个带有指向it.So的机器类引用的照相机类实例,现在输出将是"Camera Started“,变量仍然是Machine的引用。如果尝试machine1.snap();,代码将不会编译
所有的相机都是机器,因为照相机是机器的子类,但是所有的机器都不是相机。因此,您可以创建一个子类对象,并将其指向一个超类参考,但您不能要求超类引用来执行子类对象的所有功能(在我们的示例中,machine1.snap()不会编译)。超类引用只能访问超类已知的函数(在我们的示例machine1.start()中)。你不能要求一台机器的参考来抓拍。:)
https://stackoverflow.com/questions/5306835
复制相似问题