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

我的意思是,如果有的话,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是调用方法?


我希望我的问题足够清楚。如果我的英语听不懂我的话,请多多包涵。


慕桂英4014372
浏览 175回答 3
3回答

手掌心

obj1是B的实例,但是引用了类A,将无法访问method_2,因此您需要像这样进行转换((B) obj1).method_2(obj2);或者您可以将引用更改为B而不是AB obj1 = new B();基本引用不能调用子方法。

大话西游666

您不能创建类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()方法获取超类名称。

噜噜哒

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;    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java