关于java类型转换

bruce_xu2012 2012-08-07 05:24:46

class TestObjectCast
{
public static void main(String[] args)
{
A a=new B();
boolean test=(a instanceof A);
System.out.println(test);
System.out.println(a.a);
System.out.println(a.add());
}
}
class A
{
int a=6;
int add()
{
this.a+=1;
return this.a;
}

}
class B extends A
{
int a=27;
int b=2;
int add()
{
this.a+=2;
return this.a;
}

}


结果为:
true
6
29


问一下A a=new B();a应该是属于类A 的一个对象为什么调用a.a显示的是类A中的a 而调用a.add()则是类B中的函数

我是初学者 求各位大神指教
...全文
83 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2012-08-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
这个问题还是不懂 既然都是对A对象的操作 为什么a.add()中调用的是B中的add()函数而不是A中的
[/Quote]
属性没有多态,方法才有多态
A a = new B(); //a是A类型的变量,指向new B()对象
a.a //因为属性没有多态,a是A类型的,所以会查找A的a
a.add(); //因为方法有多态,a是指向new B()对象的,所以会调用B的add
nmyangym 2012-08-07
  • 打赏
  • 举报
回复
这是java几个主要难于理解的技术之一:多态!
慢慢就会明白了。
bruce_xu2012 2012-08-07
  • 打赏
  • 举报
回复
这个问题还是不懂 既然都是对A对象的操作 为什么a.add()中调用的是B中的add()函数而不是A中的
五哥 2012-08-07
  • 打赏
  • 举报
回复
new B()向上转型为 A啦,所以所有操作均为对A的对象的操作

A a=new B();
boolean test=(a instanceof A); //你定义的a引用的类型为A,所以 instanceof A 当然是 true
System.out.println(test);
System.out.println(a.a); //a.a B中的a应该会把A中的a覆盖 ,但是a.a 还是 6
System.out.println(a.add());

23,404

社区成员

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

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