为了账号安全,请及时绑定邮箱和手机立即绑定

如果我在子类中有一个要求超类对象的方法,我该如何区分两者?

如果我在子类中有一个要求超类对象的方法,我该如何区分两者?

慕桂英4014372 2021-04-16 18:19:57
我的意思是,如果有的话,A obj1 = new B(); A obj2 = new B();我想知道如何为两个对象调用相同的方法,并且还想知道如何知道哪个对象正在调用该方法以及何时调用:例如,假设我的类层次结构看起来像这样:abstract class A {    public void method_1() {        //Do something    }}class B extends A {    public boolean method_2(A obj) {         //Do something    }}如果我哪里做的obj1.method_2(obj2);如何,里面method_2(),当我的代码是这样既obj1和obj2电话method_1(),区分哪些obj是调用方法?我希望我的问题足够清楚。如果我的英语听不懂我的话,请多多包涵。
查看完整描述

3 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

obj1是B的实例,但是引用了类A,将无法访问method_2,因此您需要像这样进行转换

((B) obj1).method_2(obj2);

或者您可以将引用更改为B而不是A

B obj1 = new B();

基本引用不能调用子方法。


查看完整回答
反对 回复 2021-04-28
?
大话西游666

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()方法获取超类名称。


查看完整回答
反对 回复 2021-04-28
?
噜噜哒

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;

    }

}


查看完整回答
反对 回复 2021-04-28
  • 3 回答
  • 0 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信