父类和子类的疑惑~

baggio785 2006-01-16 12:44:50
类B是类A的子类,那么下面这么语句中

A myclass = new B()

myclass到底是那个类的对象呢?
...全文
538 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
爱编程的小猫 2006-01-20
  • 打赏
  • 举报
回复
A a = new B();
表示B是A类型的,假如A还有个子类C,那么A c=new C();也是A类型的.

但是假如B里头有个自己的方法getB(),C类里头有个自己的方法getC();
那么a.getB(),c.getC()都是正确的.

这么做还有个主要的用途是在反射机制中用到的.
success_dream 2006-01-19
  • 打赏
  • 举报
回复
看java 的上溯造型吧,这是java的精髓
baggio785 2006-01-19
  • 打赏
  • 举报
回复
经典的帖子
挑大梁 2006-01-18
  • 打赏
  • 举报
回复
A是B的父类,A是B实例的一个引用,再用A的时候,注意A是谁的实例
sea820326 2006-01-18
  • 打赏
  • 举报
回复
可发调用B类的方法 A类的变量
RainYang 2006-01-17
  • 打赏
  • 举报
回复
寒TinyJimmy(Jimmy) 一个,不过说的很多.
男人 a = new 男人();
-- 这里 a 代表男人, 是有小jj的男人

真的很强啊,哈哈
Mr_Yang 2006-01-17
  • 打赏
  • 举报
回复
up
beijixing022 2006-01-17
  • 打赏
  • 举报
回复
寒TinyJimmy(Jimmy) 一个,不过说的很多.
男人 a = new 男人();
-- 这里 a 代表男人, 是有小jj的男人

人 a = new 男人();
-- 这里 a 代表人, 有没有小jj, 下面的使用着不知道, 也不需要知道.
再补充一句,如果以后试图访问a的小jj,就会有编译错误,因为编译器不知道a是一个男人(虽然他是一个男人),编译器只把a当成一个人来看.
不能使用这样的语句哦,a.xjj.pee,语法错误,哈哈
===========================================================
形象,生动,两位强人,小弟佩服!
supergoalcn 2006-01-17
  • 打赏
  • 举报
回复
A myclass = new B();
有两种可能
1)A是B的父类
2)B实现了接口A
leekooqi 2006-01-17
  • 打赏
  • 举报
回复
这就是java的一大特性,多态。。。。

是B 的对象。
leekooqi 2006-01-17
  • 打赏
  • 举报
回复
这就是java的一大特性,多态。。。。

是B 的对象。
appleangle 2006-01-17
  • 打赏
  • 举报
回复
楼上两位形容果然是强中之强。小弟佩服了
zzk05711 2006-01-17
  • 打赏
  • 举报
回复
不错,不错,理解变清晰了。
jeffaple 2006-01-17
  • 打赏
  • 举报
回复
呵呵,比喻的不错,很生动嘛
shenpipi 2006-01-17
  • 打赏
  • 举报
回复
寒TinyJimmy(Jimmy) 一个,不过说的很多.
男人 a = new 男人();
-- 这里 a 代表男人, 是有小jj的男人

人 a = new 男人();
-- 这里 a 代表人, 有没有小jj, 下面的使用着不知道, 也不需要知道.
再补充一句,如果以后试图访问a的小jj,就会有编译错误,因为编译器不知道a是一个男人(虽然他是一个男人),编译器只把a当成一个人来看.
不能使用这样的语句哦,a.xjj.pee,语法错误,哈哈
TinyJimmy 2006-01-17
  • 打赏
  • 举报
回复
男人 a = new 男人();
-- 这里 a 代表男人, 是有小jj的男人

人 a = new 男人();
-- 这里 a 代表人, 有没有小jj, 下面的使用着不知道, 也不需要知道.
wmzsl 2006-01-17
  • 打赏
  • 举报
回复
A myclass = new B()

B myclass = new B()
有什么区别呢?

*********************************************注意了
A myclass = new B() !! myclass在编译的时候是A类,在运行的时候是B类这样的好处就是为了多态

B myclass = new B() !! myclass在运行的时候和编译的时候都是B类,所以对多态没有支持!

你要问为什么,那就是为了多态!java编程思想对这种有很好的介绍你可以参考一下
dukcho 2006-01-17
  • 打赏
  • 举报
回复
是B对象,但是调用中只能当A类型使用。

这样做的好处是将接口的定义和程序的实现分开,即:

InterfaceA a = new ImplementA();

这样如果你要更换InterfaceA的实现,就可以换成:

InterfaceA a = new ImplementB();

但是程序的其他部分不用更换。
superslash 2006-01-16
  • 打赏
  • 举报
回复
B的对象
xjylsr 2006-01-16
  • 打赏
  • 举报
回复
是A的对象,但是是B负责创建的,只能使用子类里的继承和重写的变量和方法,新增的都不能使用
加载更多回复(13)

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧