关于Java里多态的问题,子类里调用被重载的父类的方法

wujiaojun 2008-10-16 11:56:29
public class class2 {
int x=10;
public void method2(int i){
System.out.println("class2.m2 int i") ;
}

}


public class class3 extends class2 {
int x=100;
public void method2(int i){
System.out.println("class3.m2 int i") ;
}
public void method2(String s){
System.out .println("class3.m2 String s") ;

}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
class2 c=new class3();
System.out.println(c.x);
c.method2("a");
c.method2(1);
}

}
在这里为什么c.method2("a");这句编译时就出错了,这里子类不是重载了父类的method2吗,为什么这里不能调用子类的这个方法,而一定要在父类里再写个参数是String的method2才能调用,搞不太懂,请大家指点下,谢谢了
...全文
376 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ITWZP 2009-01-08
  • 打赏
  • 举报
回复
class2 c = new class3;
((class3)c).method2("a");
这样应该可以了,如果c是class2的实例的话,在class2里面没有method2(String s)这个方法,
所以只能把c转化成class3的实例才能调用method2(String s)这个方法。
logi22 2008-10-17
  • 打赏
  • 举报
回复
你的写法是父类调用子类方法
一头头 2008-10-17
  • 打赏
  • 举报
回复
class2 c=new class3(); ---->>> class3 c = new class3(); 就可以了
fox000002 2008-10-17
  • 打赏
  • 举报
回复
用 class2 c 调用方法,只能调用 class2 里定义的,没啥问题啊
zhujiahill 2008-10-17
  • 打赏
  • 举报
回复
class3 c=new class3();这样的话,父类中不是private的方法,子类不重写也能调用。
zhujiahill 2008-10-17
  • 打赏
  • 举报
回复
楼主好像对重载(参数不同)和重写没有搞清楚。只有子类重写了父类的方法才能被调用,而你的子类中的第二个方法只是重载了第一个方法,跟父类没有关系,你虽然new了子类,前面的定义的类型是父类,所以父类调不到这个方法。
getter 2008-10-17
  • 打赏
  • 举报
回复
樓上都說了,你的c是class2類的,但c所關聯的實例是class3類的,那麼該實例在c的引用下轉型為class2的實例
gs840120 2008-10-17
  • 打赏
  • 举报
回复
该说的楼上几位都说的差不多了
class2 c=new class3();
//我感觉是以父类的观点看待子类,当然要调用父类的方法了
//除非是子类重写(覆盖)了父类的方法,才会调用子类重写过的方法
//你父类中并没有method2(String s),当然不会去调用了
  • 打赏
  • 举报
回复

public class class2 {
int x=10;
public void method2(int i){
System.out.println("class2.m2 int i") ;
}

}


public class class3 extends class2 {
int x=100;
public void method2(int i){
System.out.println("class3.m2 int i") ;
}
public void method2(String s){
System.out .println("class3.m2 String s") ;

}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//class2 c=new class3();
class3 c = new class3();//楼主一定要记住:子类可以访问父类中可访问控制的方法和属性,
//反过来,则父类只能访问自己定义的方法和属性
System.out.println(c.x);
c.method2("a");
c.method2(1);
}

}
yangfuchao418 2008-10-17
  • 打赏
  • 举报
回复
根据你new的情况可以知道它的本质是:用父类的引用指向子类的对象,而这种方式只能调用父类的方法,第一楼的大哥解释是错误的!!!还有就是子类只是重写了父类中的方法而不是重载。解决方法二楼说的也是。

62,616

社区成员

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

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