这三中声明方式有什么区别吗? Object obj=new Object (); 和subclass obj = new subclass();和Object obj=new subclass ();//其中subclass是OBject的子类请高手帮我讲下他们的基本原理,越详细越好 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 subclass obj = new subclass();Object obj=new subclass ();下面的有上传,上面的obj可以使用subclass的所有方法,下面的obj只能使用Object的方法 Object obj=new Object (); subclass obj = new subclass();//正常的初始化Object obj=new subclass ();//向上转换 路上麻烦解释下象上转换? PS:Object obj=new Object (); 是我打错了的 Object obj=new Object (); //一般的初始化subclass obj = new subclass();//一般的初始化Object obj=new subclass ();//向上转型向上转型:它是一个编译是为父类对象,但运行却是一个子类对象,具体特征如下.1.被声明为父类对象 2.拥有父类属性 3.占用子类的内存空间 4.子类方法覆盖父类的方法时,此时对象调用的是子类的方法;否则,自动调用继承父类的方法. 5.我人认为这个对象既不是父类对象,也不是子类对象.当我们用到它的方法时, 我便把它看成子类对象;若用到它的属性时,我把它看成父类对象. 它是一个占用父类属性,而使用子类方法的对象.至于到底是什么对象,我认为还是得根据声明来,它应算是父类对象,但拥有子类方法. 这时候子也就是子类向上转型。 Object obj = new Object(); ______________________ | || obj | --> | Object实例 |^^^^^^^^ | | ^^^^^^^^^^^^^^你可以通过obj来访问Object类的一些方法或属性。subclass obj = new subclass(); ______________________ | || obj | --> | Object实例 |^^^^^^^^ | | |````````````| |subclass扩展| ^^^^^^^^^^^^^^可以通过obj来访问右边这个subclass类的实例的方法或属性,包括Object原有的和subclass扩展的。但如果subclass中有和Object中重复的属性或方法,访问的将是subclass的,而不是Object的。Object obj = new subclass(); ______________________ | || obj | --> | Object实例 |^^^^^^^^ | | |````````````| |subclass扩展| ^^^^^^^^^^^^^^这个图和上个图相同,但obj这个实例引用的类型却不同。obj此时是Object的引用类型。虽然它也指向一个subclass类的实例。但由于只能通过obj来访问,而obj的类型是Object引用。所以也只能访问Object所拥有的方法或属性。同样,如果subclass中包含Object中相同的方法或属性,通过obj调用的是subclass的方法行为或属性。这种向上转换,丢失了类型信息,当然也就丢失了subclass对Object的扩展信息。 俄罗斯方块的问题 java 画矩形 tif转pdf,Java heap space如何处理 用JAVA生成一个EXE文件 怎样将JAVA生成EXE的程序 [超急急急急急!!!]java 如 何 调 用 OCX 控件? 如何删除ArrayList里面的所有元素? 为什么Class.forName("..")找不到class? 大家快来哦,第一个正确回答这个问题的,送满分!!!!!!!!! int128-255 转ASCII码表对应的字符 怎么弄 急!!高分 求高手…… 关于版本控制 为什么我的客户端收不到信息
Object obj=new subclass ();
下面的有上传,上面的obj可以使用subclass的所有方法,下面的obj只能使用Object的方法
subclass obj = new subclass();//正常的初始化
Object obj=new subclass ();//向上转换
subclass obj = new subclass();//一般的初始化
Object obj=new subclass ();//向上转型
向上转型:
它是一个编译是为父类对象,但运行却是一个子类对象,具体特征如下.
1.被声明为父类对象
2.拥有父类属性
3.占用子类的内存空间
4.子类方法覆盖父类的方法时,此时对象调用的是子类的方法;否则,自动调用继承父类的方法.
5.我人认为这个对象既不是父类对象,也不是子类对象.当我们用到它的方法时,
我便把它看成子类对象;若用到它的属性时,我把它看成父类对象.
它是一个占用父类属性,而使用子类方法的对象.至于到底是什么对象,我认为还是得根据声明来,它应算是父类对象,但拥有子类方法.
这时候子也就是子类向上转型。
______________
________ | |
| obj | --> | Object实例 |
^^^^^^^^ | |
^^^^^^^^^^^^^^
你可以通过obj来访问Object类的一些方法或属性。
subclass obj = new subclass();
______________
________ | |
| obj | --> | Object实例 |
^^^^^^^^ | |
|````````````|
|subclass扩展|
^^^^^^^^^^^^^^
可以通过obj来访问右边这个subclass类的实例的方法或属性,
包括Object原有的和subclass扩展的。但如果subclass中有和Object
中重复的属性或方法,访问的将是subclass的,而不是Object的。
Object obj = new subclass();
______________
________ | |
| obj | --> | Object实例 |
^^^^^^^^ | |
|````````````|
|subclass扩展|
^^^^^^^^^^^^^^
这个图和上个图相同,但obj这个实例引用的类型却不同。obj此时是Object的引用类型。
虽然它也指向一个subclass类的实例。但由于只能通过obj来访问,而obj的类型是Object引用。
所以也只能访问Object所拥有的方法或属性。同样,如果subclass中包含Object中相同的方法或属性,通过obj调用的是subclass的方法行为或属性。这种向上转换,丢失了类型信息,当然也就丢失了subclass对Object的扩展信息。