方法重载的声明问题

tmhk123 2010-04-18 10:56:13
class SuperClass
{

int y=1;
int z =2;
int x;
void setF( )
{
y=0;
System.out.println("Super的变量x的值"+y);
}
}
class SubClass extends SuperClass
{
int x;//隐藏了父类的变量x
void setF( )
{ //重写了父类的方法 setF()
x =6;
System.out.println("Son的变量x的值"+x);
}
}
class TEST
{
public static void main(String args[])
{
SubClass Son = new SubClass ();
Son.setF();
SuperClass Father= new SubClass ();
Father.setF();
}
}


结果是:Son的变量x的值6;
Son的变量x的值6;

为什么我声明Father对象的时候,可以是前面为SuperClass 后面却是new SubClass 而且不出错。那岂不是我前面那个SuperClass的声明根本就没起到作用?
...全文
66 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
canoe982 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tmhk123 的回复:]
如果有一个方法在father类里有 而 son类里面没有
那么 father A =new son() A能不能调用father里有而son没有的方法呢?
[/Quote]
可以,调用的顺序是:
(1)若派生类有,则调用派生类的。
(2)如果派生类没有,则调用基类的。
(3)如果都没有,编译错误。
tmhk123 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zfq642773391 的回复:]
这是java的语言特性之一:多态
SuperClass Father= new SubClass ();新建了一个SubClass对象,并将指向它的引用类型向上转型为SuperClass,虽然Father引用是SuperClass的,但java中对方法的调用是通过向对象发送消息来实现的,引用是Fahter,对象是SubClass类型的,所以你调用的方法时,就会调用到子类的方法,这是java的动态……
[/Quote]

如果有一个方法在father类里有 而 son类里面没有
那么 father A =new son() A能不能调用father里有而son没有的方法呢?
tmhk123 2010-04-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sealedbook 的回复:]
你这个叫重写。不叫重载了。
[/Quote]
额对 我打错了 应该是重写
zfq642773391 2010-04-18
  • 打赏
  • 举报
回复
这是java的语言特性之一:多态
SuperClass Father= new SubClass ();新建了一个SubClass对象,并将指向它的引用类型向上转型为SuperClass,虽然Father引用是SuperClass的,但java中对方法的调用是通过向对象发送消息来实现的,引用是Fahter,对象是SubClass类型的,所以你调用的方法时,就会调用到子类的方法,这是java的动态绑定,是java的基本特性之一
SealedBook 2010-04-18
  • 打赏
  • 举报
回复
你这个叫重写。不叫重载了。

62,633

社区成员

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

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