class A{
void getMember(){
........
}
}
class B extends A{
void getMember(){
......
}
}
class C{void static main(){
A instanceOfA = new B();
//在这里我怎么用对象 instanceOfA 调用A类里面的getMember() 方法呢 ? 谢谢!!
}
void getMember(){
........
}
}
class B extends A{
void getMember(){
......
}
}
class C{void static main(){
A instanceOfA = new B();
//在这里我怎么用对象 instanceOfA 调用A类里面的getMember() 方法呢 ? 谢谢!!
}
创建对象用的是子类去创的就调不了父类的被覆盖的方法了,这是因为JAVA里方法的空间是动态分配的
如果是想调用父子类同名的属性,可以强转成父类调用。
还有如果是B b = new B() 去调用A的getMember()那样可以用super()啊
在父类和子类的相同的方法上面都加上static关键字,
然后:
A instanceOfA = new B();
instanceOfA ....();这里调用的是父类的方法 B instanceOfB = new B(); instanceOfB ....()这里调用的是子类的方法OK,明白了吧,仔细消化一下
class A{
static void getMember(){
System.out.println("A类中的方法");
}
}
class B extends A{
static void getMember(){
System.out.println("B类中的方法");
}
}
public class C{ public static void main(String arg[]){
A instanceOfA = new B();
instanceOfA.getMember(); B instanceOfB = new B(); instanceOfB.getMember();
}
}结果A类中的方法
B类中的方法
学习思考中……
兄弟我也发现了这个问题,在eclipse中无法体现出多态的性质
应该可以啊。
我个人的看法:A instanceOfA = new B()之后,instanceOfA 所使用的函数表是A的函数表,那么当调用....()的时候,去A发现方法是static,也就是invokespecial,那么就直接调用了A中的....()方法.
B instanceOfB = new B()所使用的函数表是B中的函数表,所以会调用B中的....()方法.
如果实在需要在子类中另外调父类的方法,只能另外写一个方法,在那个方法内调用了
如 父类有 test 方法,子类重写了它,我们可以在子类中作另一个方法 testA ,在里面调用 super.test();
不是实例的了.跟楼主所提的问题相去甚远.
直接用A.getMember()或B.getMember()就得啦。