3 回答
TA贡献1942条经验 获得超3个赞
obj1是B的实例,但是引用了类A,将无法访问method_2,因此您需要像这样进行转换
((B) obj1).method_2(obj2);
或者您可以将引用更改为B而不是A
B obj1 = new B();
基本引用不能调用子方法。
TA贡献1817条经验 获得超14个赞
您不能创建类A的对象作为其抽象类。但是,您可以创建B的对象,并在method_2()中将其传递给A。当您在method_2()中调用method_1()时,您仍在通过类B的对象进行调用。这是基于对问题的理解,我可以编写的测试程序-
public class App {
public static void main(String[] args) {
B b = new B();
B b2 = new B();
b.method_2(b2); //Or
//b.method_2((A)b2);
}
}
abstract class A {
public void method_1() {
System.out.println("In method_1 = " + this.getClass());
}
}
class B extends A {
public boolean method_2(A a) {
System.out.println("In method_2 = " + this.getClass());
a.method_1();
return false;
}
}
结果是两个方法都被类B的对象调用。您可以使用getSuperClass()方法获取超类名称。
TA贡献1784条经验 获得超7个赞
public class Main {
public static void main(String arg[] ) {
A obj1 = new A() {};
A obj2 = new B();
B obj3 = new B();
obj1.method_1("1 "+obj1.getClass());
obj2.method_1("2 "+obj2.getClass());
obj3.method_1("3 "+obj3.getClass());
obj3.method_2(obj1);
obj3.method_2(obj2);
}
}
abstract class A {
public void method_1(String className) {//Do something
System.out.println("A.method_1() called by "+className);
}
}
class B extends A {
public boolean method_2(A obj) {//Do something
super.method_1("4 "+obj.getClass());
obj.method_1("5 "+obj.getClass());
return true;
}
}
添加回答
举报