首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

迷糊了,一个简单的有关问题

2011-12-15 
迷糊了,一个简单的问题两端代码,第一段代码如下:classFather{publicFather(){}publicvoidshout(Objectword

迷糊了,一个简单的问题
两端代码,第一段代码如下:
class   Father   {

public   Father()   {

}
public   void   shout(Object   word){
System.out.println( "object   father   shout: "+word);
}

}

class   Son   extends   Father{

public   Son()   {

}
public   void   shout(String   word){
System.out.println( "string   son   shout: "+word);
}


}

public   class   Dan{
public   static   void   main(String[]   args){
Son   son=new   Son();
Father   father=son;
son.shout( "hello ");
father.shout( "hello ");
}
}
这段代码的输出结果是:
string   son   shout:hello
object   father   shout:hello

第二段代码,代码如下:
public   class   Demo{

    public   static   void   main(String[]   args){
    Professor   p=new   Professor();
    Teacher   t=p;
    System.out.println   (t.Teaching( "数学 "));
    System.out.println   (p.Teaching( "语文 "));
    }
}  

class   Teacher{
protected   String   name;
public   Teacher(){
}

public   String   Teaching(String   className){
return   "正在教小学 "+className;
}

}

class   Professor   extends   Teacher{
public   Professor(){
}

public   String   Teaching(String   className){
return   "正在教大学 "+className;
}
}
输出结果如下:
正在教大学数学
正在教大学语文

问题:
father.shout( "hello ");执行的时候是执行Father的shout方法,而第二段代码t.Teaching( "数学 ")为什么执行的不是Teacher的Teaching方法?

[解决办法]
Professor p=new Professor();
Teacher t=p;


t表示的是一个Professor类对象的引用,当然调用Professor的Teaching方法了
[解决办法]
两个方法的参数不一样。后面的参数是一样的,前面的不一样的
[解决办法]
也就是说,Teacher父类对象t 是 Professor子类对象p的上转型对象,
上转型对象不能操作子类新增的成员变量和方法,但可以操作子类对象继承或重写的方法,
如果子类重写了父类的某个方法,
上转型对象调用方法时,一定调用的是这个重写的方法
明白了吧?


[解决办法]
子类重写父类的方法的前提是:方法名一样,参数类型和个数一样.
对于楼主的问题,前面一个是因为参数类型不一样,而并没有重写,所以用父类和子类的引用来调方法时是调用的两个方法, 后面那个是参数类型和个数完全一样,所以是子类重写了父类的方法,用父类和子类的引用去调,最后都是调的子类重写后的方法.
[解决办法]
请查阅“多态”。

热点排行