Java中 对象的上转型对象
2017-12-19 11:08
246 查看
我们可以说“美国人是人”,“中国人是人”,这样的说法当然正确,但是,当说“美国人是人”,“中国人是人”时,是在有意强调人的属性和功能,而忽略了美国人speakEnglish()的功能和中国人speakChinese()的功能,从思维方式上看,说“美国人是人”是一种上溯思维方式,这种思维方式就类似于Java中的上转型对象
假设:A类是B类的父类,当用子类创建对象时,并把对象的引用放到父类中的对象时,如:
这时,称对象a 时 对象 b的上转型对象
对象的上转型对象的实体是子类负责创建的,但上转型的对象会失去原对象的一些属性和功能。
1.上转型对象不能操作子类新增的成员变量,不能调用子类新增的方法。
2.上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承或重写的方法.上转型对象操作子类继承或重写的方法时,其作用等价于子类对象调用这些方法。因此如果子类重写了父类的某个实例方法,这个上转型对象调用这个实例方法的就是子类重写的方法。
注意(非常重要)
1.不要将父类创建的对象和子类的上转型对象混淆
2.可以将对象的上转型对象强转为一个子类的对象,这时,改子类的对象用具备了子类说有的属性和功能。
3.不可以将父类创建对象的引用赋值给子类声明的对象。(不能说“人是美国人”)
下面是一个小例子
结果如下:
bodyHight:187cmbodyWeight:78.67kg
吃饭,睡觉,。。。饮水
身高:177 cm 体重:68.33kg
吃饭,睡觉,。。。饮水
我是中国人
假设:A类是B类的父类,当用子类创建对象时,并把对象的引用放到父类中的对象时,如:
A a; a = new B(); //又或 A a; B b = new B(); a = b;
这时,称对象a 时 对象 b的上转型对象
对象的上转型对象的实体是子类负责创建的,但上转型的对象会失去原对象的一些属性和功能。
1.上转型对象不能操作子类新增的成员变量,不能调用子类新增的方法。
2.上转型对象可以访问子类继承或隐藏的成员变量,也可以调用子类继承或重写的方法.上转型对象操作子类继承或重写的方法时,其作用等价于子类对象调用这些方法。因此如果子类重写了父类的某个实例方法,这个上转型对象调用这个实例方法的就是子类重写的方法。
注意(非常重要)
1.不要将父类创建的对象和子类的上转型对象混淆
2.可以将对象的上转型对象强转为一个子类的对象,这时,改子类的对象用具备了子类说有的属性和功能。
3.不可以将父类创建对象的引用赋值给子类声明的对象。(不能说“人是美国人”)
下面是一个小例子
public class Main{ public static void main(String []args){ People people = null; American Johson = new American(); people = Johson;//people是Johson的上转型变量 people.height = 187; people.weight = 78.67; people.showBodyMess(); people.mustDoingThing(); Chinese zhangsan = new Chinese(); people = zhangsan; people.height = 177; people.weight = 68.33; people.showBodyMess(); people.mustDoingThing(); zhangsan = (Chinese)people; zhangsan.speakChinese(); } } class People{ int height; double weight; public void showBodyMess(){ System.out.println("**********"); } public void mustDoingThing(){ System.out.println("吃饭,睡觉,。。。饮水"); } } class American extends People{ public void showBodyMess(){ System.out.println("bodyHight:" + height + "cm" + "bodyWeight:" + weight + "kg"); } public void speakEnglish(){ System.out.println("I am American"); } } class Chinese extends People{ public void showBodyMess(){ System.out.printf("身高:%d cm\t 体重:%3.2fkg \n",height,weight); } public void speakChinese(){ System.out.println("我是中国人"); } }
结果如下:
bodyHight:187cmbodyWeight:78.67kg
吃饭,睡觉,。。。饮水
身高:177 cm 体重:68.33kg
吃饭,睡觉,。。。饮水
我是中国人
相关文章推荐
- java:对象的转型
- 【JAVA基础知识总结】-JAVA对象转型(转)
- java多态的前置知识--对象转型
- java中的上转型对象
- [Java] 对象转型-02
- Java上转型和下转型对象
- java基础学习总结——对象转型
- (java)对象引用向上转型后,无法调用子类独有的方法和属性问题
- java基础之对象的向下转型
- JAVA中上转型对象的详细解释
- Java上转型转的是引用而不是对象
- java 对象的向下转型
- java基础8_对象转型_接口
- 【JAVA基础知识总结】JAVA对象转型之上转型对象与下转型对象
- java多态与对象转型
- JAVA对象转型(二)
- 【java基础】上传型和下转型对象
- java之对象转型2
- java上转型和下转型对象的深入解析
- Java菜鸟学习笔记--面向对象篇(十八):对象转型&多态