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才能调用,搞不太懂,请大家指点下,谢谢了
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才能调用,搞不太懂,请大家指点下,谢谢了
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);
} }
class2 c=new class3();
//我感觉是以父类的观点看待子类,当然要调用父类的方法了
//除非是子类重写(覆盖)了父类的方法,才会调用子类重写过的方法
//你父类中并没有method2(String s),当然不会去调用了
((class3)c).method2("a");
这样应该可以了,如果c是class2的实例的话,在class2里面没有method2(String s)这个方法,
所以只能把c转化成class3的实例才能调用method2(String s)这个方法。