JAVA中的上转型对象的几个问题
请问上转型对象究竟是子类的对象还是父类的对象呢,。然后书上有这样一句话:不要将父类创建的对象和子类对象是上转型对象混淆。那么这两者有什么区别...
请问上转型对象究竟是子类的对象还是父类的对象呢,。
然后书上有这样一句话:不要将父类创建的对象和子类对象是上转型对象混淆。那么这两者有什么区别 展开
然后书上有这样一句话:不要将父类创建的对象和子类对象是上转型对象混淆。那么这两者有什么区别 展开
2个回答
展开全部
对象的向上转型会失去对象本身的一些特有属性。
拿最经典的手机类和moto-E2类做列子:
class 手机类{
private String 外壳;
。。。。
public void 打电话(){“父类打电话!”}
pulic String 收短信(){。。。。}
}
手机类都有打电话和收发短信的功能,而且都有外壳(这是必须的)。这就是父类
派生类 也就是子类Moto-E2手机
class MOTO-E2 extends 手机类{
private XXX 扩展卡;
public void 照相;
public void 蓝牙;
public void 打电话(){“E2打电话!”}
}
这些功能都是在手机类(父类)的基础上扩展的,也是子类E2类的特色。
当你创建一个E2类时,如下:
手机类 手机 = new MOTO-E2();
这个就是向上转型,这时编译器只知道你创建了一个手机类,而不知道你创建了一个MOTO-E2类,因为他是编译器嘛,只知道编译时的事,这时你调用
手机.照相,编译不通过,编译器太傻了,因为他不知道你创建的是E2类啊。
当你调用
手机.打电话时,你猜怎么样,他会调用E2的打电话方法,打印:“E2打电话”。因为运行起来,jre发现了,原来这个对象是E2类啊,所以你调用对象的方法,他就真的会去调用该方法,这个也是重写的意义!
所以创建一个父类对象和转型一个子类对象其实操作的不是一个对象,当然不能混为一谈了!
拿最经典的手机类和moto-E2类做列子:
class 手机类{
private String 外壳;
。。。。
public void 打电话(){“父类打电话!”}
pulic String 收短信(){。。。。}
}
手机类都有打电话和收发短信的功能,而且都有外壳(这是必须的)。这就是父类
派生类 也就是子类Moto-E2手机
class MOTO-E2 extends 手机类{
private XXX 扩展卡;
public void 照相;
public void 蓝牙;
public void 打电话(){“E2打电话!”}
}
这些功能都是在手机类(父类)的基础上扩展的,也是子类E2类的特色。
当你创建一个E2类时,如下:
手机类 手机 = new MOTO-E2();
这个就是向上转型,这时编译器只知道你创建了一个手机类,而不知道你创建了一个MOTO-E2类,因为他是编译器嘛,只知道编译时的事,这时你调用
手机.照相,编译不通过,编译器太傻了,因为他不知道你创建的是E2类啊。
当你调用
手机.打电话时,你猜怎么样,他会调用E2的打电话方法,打印:“E2打电话”。因为运行起来,jre发现了,原来这个对象是E2类啊,所以你调用对象的方法,他就真的会去调用该方法,这个也是重写的意义!
所以创建一个父类对象和转型一个子类对象其实操作的不是一个对象,当然不能混为一谈了!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询