Java 动态方法调用(继承中的对象和引用)
假设我有两个类……。Java 动态方法调用(继承中的对象和引用),java,class,object,inheritance,dynamic,Java,Class,Object,Inheritance,Dynamic,假设我有两个类……。AClass是基类,ClassB是派生类,如果我创建一个引用,例如:A=new B()是否意味着引用a指向B类的对象?如果是,那么我如何能够调用B中A的重写方法而不是B的其他方法?先谢谢你 class A { m1() { } } class B extends A { m1() { } m2() { } } A a=new B(); a.m1(); //it will call overridden m1() in
A
Class是基类,ClassB
是派生类,如果我创建一个引用,例如:A=new B()代码>是否意味着引用a
指向B类的对象?如果是,那么我如何能够调用B中A的重写方法而不是B的其他方法?先谢谢你
class A {
m1() {
}
}
class B extends A {
m1() {
}
m2() {
}
}
A a=new B();
a.m1(); //it will call overridden m1() in B
a.m2(); //it doesnt work if reference "a" points to object of B than why doesnt it call m2 method ?
意思是说,你有一个指向狗的动物参考。因此,只有在父类(Animal)中声明的方法才能使用父类引用调用
在您的情况下,m2()
未在Class A
中定义,它仅在Class B
中定义,因此,使用A
的引用,您不能调用m2()
意思是说,你有一个指向狗的动物参考。因此,只有在父类(Animal)中声明的方法才能使用父类引用调用
在您的情况下,m2()
未在Class A
中定义,它仅在Class B
中定义,因此,使用A
的引用,您不能调用m2()
如果是,那么我如何才能调用B中A的重写方法而不是B的其他方法
因为引用类型为A
。编译器只能强制从此类型调用方法
如果是,那么我如何才能调用B中A的重写方法而不是B的其他方法
因为引用类型为A
。编译器只能强制从此类型调用方法。我建议您阅读上的Oracle教程。当然,((B)a).m2()注意,对于属性而不是方法,这是一个完全不同的故事:-)@Leo如果你能解释一下,属性有什么不同呢?谢天谢地:)@Code学徒非常感谢你,伙计…现在读一下,我建议你读一下关于Oracle的教程。当然,还有((B)a).m2()注意,对于属性而不是方法,这是一个完全不同的故事:-)@Leo如果你能解释一下属性的话会有什么不同呢?谢天谢地:)@Code学徒非常感谢你,伙计……现在就阅读它“在儿童类(狗)中被覆盖”这是没有必要的。您可以在Animal
中调用未被Dog
覆盖的方法。下面是一个建议的编辑,可能会使您的意思更清楚(更简洁)。如果您的引用变量是类型为“Animal”且在子类(Dog)中被覆盖,则Botomline是您可以调用Animal类的方法,但不能调用Dog类的方法这是没有必要的。您可以在Animal
中调用方法,该方法不会被Dog
覆盖。下面是一个建议的编辑,可能会使您的意思更清楚(更简洁).Botomline是你可以调用动物类的方法,但如果你的引用变量是Animalokay类型的,你不能调用Dog类的方法。我想我得到了它,所以它和我想的不完全一样!我认为引用变量指向对象,所以可以调用任何方法,但是引用变量是A类型的,所以编译器不知道除了A'sokay的方法之外还有其他方法。我想我知道了,所以它与我的想法不完全一样!我认为引用变量指向对象,因此可以调用任何方法,但引用变量的类型是A,因此编译器不知道A以外的任何其他方法
Animal a=new Dog(); // Animal is parent - class, Dog is a child