Java 为什么我无法访问父类型的子对象方法
对象a2的类型为A,但引用了C类的对象。因此,a2应该能够访问m3()。但是,为什么它没有发生?如果m3()方法是在类A中定义的,那么代码可以正常运行Java 为什么我无法访问父类型的子对象方法,java,inheritance,methods,Java,Inheritance,Methods,对象a2的类型为A,但引用了C类的对象。因此,a2应该能够访问m3()。但是,为什么它没有发生?如果m3()方法是在类A中定义的,那么代码可以正常运行 class A { int var = 7; void m1() { System.out.println("A's m1 ,"); } void m2() { System.out.println("A's m2 ,"); } } class B extends A { vo
class A {
int var = 7;
void m1() {
System.out.println("A's m1 ,");
}
void m2() {
System.out.println("A's m2 ,");
}
}
class B extends A {
void m1() {
System.out.println("B's m1 ,");
}
}
class C extends B {
void m3() {
System.out.println("c's m3 ," + (var + 6));
}
}
class Mixed {
public static void main(String[] args) {
A a = new A();
B b = new B();
C c = new C();
A a2 = new C();
a2.m1();
a2.m2();
a2.m3();
}
}
当你写这行的时候
A a2=new C();
a2将只能访问类A中定义的方法
即使a2引用类C的实例,它也不能调用仅在C中定义的方法
但是,如果您有以下情况:
class A {
void m3() {
System.out.println("in A");
}
}
class C extends A {
void m3() {
System.out.println("in C");
}
}
...
A a2 = new C();
a2.m3();
将输出
在C中
在这种情况下,m3()方法将被重写,调用的方法将由a2引用的实例类型(即C)确定
我想在这里看一下Java教程:当您写这行时
A a2=new C();
a2将只能访问类A中定义的方法
即使a2引用类C的实例,它也不能调用仅在C中定义的方法
但是,如果您有以下情况:
class A {
void m3() {
System.out.println("in A");
}
}
class C extends A {
void m3() {
System.out.println("in C");
}
}
...
A a2 = new C();
a2.m3();
将输出
在C中
在这种情况下,m3()方法将被重写,调用的方法将由a2引用的实例类型(即C)确定
我想在这里看一下Java教程:当您写这行时
A a2=new C();
a2将只能访问类A中定义的方法
即使a2引用类C的实例,它也不能调用仅在C中定义的方法
但是,如果您有以下情况:
class A {
void m3() {
System.out.println("in A");
}
}
class C extends A {
void m3() {
System.out.println("in C");
}
}
...
A a2 = new C();
a2.m3();
将输出
在C中
在这种情况下,m3()方法将被重写,调用的方法将由a2引用的实例类型(即C)确定
我想在这里看一下Java教程:当您写这行时
A a2=new C();
a2将只能访问类A中定义的方法
即使a2引用类C的实例,它也不能调用仅在C中定义的方法
但是,如果您有以下情况:
class A {
void m3() {
System.out.println("in A");
}
}
class C extends A {
void m3() {
System.out.println("in C");
}
}
...
A a2 = new C();
a2.m3();
将输出
在C中
在这种情况下,m3()方法将被重写,调用的方法将由a2引用的实例类型(即C)确定
我想看看这里的Java教程:如果使用父类/超类的引用并尝试调用子类上的方法,那么该方法应该在父类/超类中定义。i、 例如,可以对对象(rhs)调用什么方法取决于lhs(引用类型) 如果使用父类/超类的引用并尝试调用子类上的方法,则应在父类/超类中定义该方法。i、 例如,可以对对象(rhs)调用什么方法取决于lhs(引用类型) 如果使用父类/超类的引用并尝试调用子类上的方法,则应在父类/超类中定义该方法。i、 例如,可以对对象(rhs)调用什么方法取决于lhs(引用类型) 如果使用父类/超类的引用并尝试调用子类上的方法,则应在父类/超类中定义该方法。i、 例如,可以对对象(rhs)调用什么方法取决于lhs(引用类型)
这意味着您只能访问类A
的成员和类C
的实现(如果有)
现在m3不是a
的成员。明白了吗
这意味着您只能访问类A
的成员和类C
的实现(如果有)
现在m3不是a
的成员。明白了吗
这意味着您只能访问类A
的成员和类C
的实现(如果有)
现在m3不是a
的成员。明白了吗
这意味着您只能访问类A
的成员和类C
的实现(如果有)
现在m3不是
a
的成员。清除?编译器检查调用方法的对象的引用。。。
在您的例子中,a2=…
是编译器可以看到的,它发现A
类中没有定义m3()
方法。因此,代码不会编译
请注意,
在运行时调用方法时,JVM引用该引用引用引用的对象。在你的例子中,类A的引用是指类C的对象
阅读更多信息:编译器检查调用方法的对象的引用。。。 在您的例子中,
a2=…
是编译器可以看到的,它发现A
类中没有定义m3()
方法。因此,代码不会编译
请注意,
在运行时调用方法时,JVM引用该引用引用引用的对象。在你的例子中,类A的引用是指类C的对象
阅读更多信息:编译器检查调用方法的对象的引用。。。 在您的例子中,
a2=…
是编译器可以看到的,它发现A
类中没有定义m3()
方法。因此,代码不会编译
请注意,
在运行时调用方法时,JVM引用该引用引用引用的对象。在你的例子中,类A的引用是指类C的对象
阅读更多信息:编译器检查调用方法的对象的引用。。。 在您的例子中,
a2=…
是编译器可以看到的,它发现A
类中没有定义m3()
方法。因此,代码不会编译
请注意,
在运行时调用方法时,JVM引用该引用引用引用的对象。在你的例子中,类A的引用是指类C的对象
阅读更多信息:您将子类
C
视为A
的一个实例,因为A
没有C
所具有的功能m3
A a2 = new C();
因此,在这里,您只能访问