Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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 为什么当我向下转换时无法访问子类属性?_Java_Netbeans_Casting - Fatal编程技术网

Java 为什么当我向下转换时无法访问子类属性?

Java 为什么当我向下转换时无法访问子类属性?,java,netbeans,casting,Java,Netbeans,Casting,我知道向下转换可以将一个超级类转换为一个更具体的子类型,但是当我这样做时,我无法访问MotoX类的属性。myPhone被定义为手机。如果要使用Motox方法,应将其定义为Motox: class Casting { main() { //instantiate the subclass MotoX CellPhone myPhone = new MotoX("motorola", "white", true, 5); MotoX p

我知道向下转换可以将一个超级类转换为一个更具体的子类型,但是当我这样做时,我无法访问MotoX类的属性。

myPhone
被定义为
手机。如果要使用
Motox
方法,应将其定义为
Motox

class Casting
{
    main()
    {
        //instantiate the subclass MotoX
        CellPhone myPhone = new MotoX("motorola", "white", true, 5);
        MotoX phone = (MotoX) myPhone;
        //I tried to call MotoX methods using myPhone 
        //however netbeans only showed the properties within the CellPhone class
    }
}
或在使用时显式强制转换它:

Motox myPhone = new MotoX("motorola", "white", true, 5);

您使用了错误的变量。您试图从
myPhone
访问MotoXmethods。但是,
phone
是类型为
MotoX
的变量。只需使用
phone
而不是
myPhone
,您就可以访问
MotoX

的属性。OP做了一个明确的向下转换。@Turing85-on
phone
。这无助于他在
myPhone
上调用方法。谢谢!那么,像我这样向上投射有什么意义呢?(手机myPhone=new MotoX();)@Bryan你得到了抽象。您可以稍后使用任何其他
手机
实现替换
myPhone
的实例,并保持其余代码不变。我开始理解,因此,如果我这样做,例如,(MotoX phone=(MotoX)myPhone;)那么“phone”变量将被分配给myPhone变量?这样做有什么意义?@Bryan我想你对继承有一个普遍的误解。如果您有一个类型为
mobile
的变量(无论分配给它什么),则只能访问类
mobile
中定义的方法。另一方面,向下转换允许您访问子类已知的方法,而不是超类已知的方法。
CellPhone myPhone = new MotoX("motorola", "white", true, 5);
((Motox) myPhone).someMotoxMethod();