java中的继承

假如我们已经知道,classsonextendsclassfather,那么fathera=newson和sona=newson有什么明显的区别吗?希望有过这样的疑惑的大... 假如我们已经知道,class son extends class father,
那么 father a = new son 和 son a = new son有什么明显的区别吗?
希望有过这样的疑惑的大大们指点下,我好迷惑。
3Q!
展开
 我来答
大时代暑
2009-06-23 · TA获得超过2.5万个赞
知道大有可为答主
回答量:4111
采纳率:0%
帮助的人:4922万
展开全部
当然有

father a = new son 是属于父类引用指向了子类对象,java把这种把子类对象赋给父类引用变量称之为向上转型

区别:给你举个例子

比如,father类有一个eat()方法,son类继承了father类,也就拥有了eat()方法,并同时定义了自己的方法drink().如果是father a = new son ,则你只能调用属于father 的方法eat(),而不能调用son的方法drink().也就是说虽然变量a 指向了对象 son ,但由于它编译时的类型是father,所以它不能调用属于son的方法,尽管变量a运行时的类型是son.

而son a = new son中的a则可以调用属于它自己的方法drink().和它继承的方法eat(),因为a 这个引用变量编译时的类型和运行时的类型都是son.

再说的大众些,father a = new son 是以父亲的角度看儿子,由于父子之间有继承关系,你是创造了一个儿子对象并把它当父亲用,所以你只能调用属于父亲的方法,而son a = new son就是你是创造了一个儿子对象并把它当儿子,所以你可以调用属于儿子的方法和他所继承父亲的方法

以后你理解了多态以后,就好理解这个问题了
百度网友8b6d3d5
2009-06-23 · TA获得超过171个赞
知道小有建树答主
回答量:198
采纳率:0%
帮助的人:149万
展开全部
这叫父类引用指向子类对象,这个是实现多态要素之一,多态后就可以写出一段所有子类都通用的代码,当添加新的子类时,这段代码是不需要修改的。
比方说:父类father,子类son,daughter
//如果使用第2行,当改用daughter的时候,那么第3行也需要改变
1 father a = new son();
2 //son a = new son();
3 a.someMethod();
从内存的角度讲:
假设父类Father,它里面的变量需要占用1M内存.有一个它的子类Son,它里面的变量需要占用0.5M内存.
现在通过代码来看看内存的分配情况:
Father f = new Father();//系统将分配1M内存.
Son s = new Son();//系统将分配1.5M内存!因为子类中有一个隐藏的引用super会指向父类实例,所以在实例化子类之前会先实例化一个父类,也就是说会先执行父类的构造函数.由于s中包含了父类的实例,所以s可以调用父类的方法.
Father f1 = new son();//这时f1会指向那1.5M内存中的1M内存,即是说,f1只是指向了s中实例的父类实例对象,所以f1只能调用父类的方法(存储在1M内存中),而不能调用子类的方法(存储在0.5M内存中).
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
coolcoldboy
2009-06-23 · 超过24用户采纳过TA的回答
知道答主
回答量:96
采纳率:0%
帮助的人:73.3万
展开全部
有区别
father a = new son 应该叫做类型上转好像

对象a 只能使用father的方法和属性(或者 重写的father的方法和属性)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sd1132632
2009-06-23 · TA获得超过950个赞
知道小有建树答主
回答量:2047
采纳率:0%
帮助的人:1058万
展开全部
区别就是这个father里面既可以放son,也可以放daughter,而son里面就只能放son和son的son...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小南头上的花
2009-06-23 · TA获得超过186个赞
知道小有建树答主
回答量:167
采纳率:0%
帮助的人:134万
展开全部
father a = new son
这样做是不行的
父类不能用子类实例化
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ee6b955
2009-06-23 · 超过11用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:38.4万
展开全部
(设son b = new son())
1.可见类型不同.虽然两个实例都是son类型的,但a不经过显示的类型转换无法使用son中定义的字段方法.
2.static修饰的字段与方法引用不同.若father与son都有getMother的static方法,father返回grandmather,son的返回mather,则a.getMother返回grandmather,b.getMother返回mother.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式