Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 动态方法调用(继承中的对象和引用)_Java_Class_Object_Inheritance_Dynamic - Fatal编程技术网

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是基类,Class
B
是派生类,如果我创建一个引用,例如:
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