簡體   English   中英

如果我在子類中有一個要求超類對象的方法,我該如何區分兩者?

[英]If I have a method in a subclass that asks for an object of the super class, how do i distinguish both?

我的意思是,如果我有A obj1 = new B(); A obj2 = new B(); 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()內如何進行編碼,以便obj1obj2調用method_1()來區分哪個obj正在調用該方法?

我希望我的問題足夠清楚。 如果我的英語聽不懂我的話,請多多包涵。

obj1是B的實例,但引用了類A,將無法訪問method_2,因此您需要像這樣進行轉換

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

或者您可以將引用更改為B而不是A

B obj1 = new B();

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

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;
    }
}

您不能創建類A的對象作為其抽象類。 但是,您可以在method_2()中創建B的對象並將其代替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()方法獲取超類名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM