簡體   English   中英

我可以通過基類類型的引用訪問子類方法嗎?

[英]Can I access a subclass method through a base class-typed reference?

下面是我正在嘗試處理的代碼,但無法解決問題:“我真的可以用Java進行以下操作嗎。如果是,請幫助我了解“如何”,如果不能,請幫助我。 ..看看下面的代碼...

class Base{

      public void func(){

            System.out.println("In Base Class func method !!");         
      };
}

class Derived extends Base{

      public void func(){   // Method Overriding

            System.out.println("In Derived Class func method"); 
      }

      public void func2(){  // How to access this by Base class reference

            System.out.println("In Derived Class func2 method");
      }  
}

class InheritDemo{

      public static void main(String [] args){

            Base B= new Derived();
            B.func2();   // <--- Can I access this ??? This is the issue...
      }
}

提前致謝!!!! 等待一些有用的答案:) ...

簡短而甜美? 不,你不能。如何必須Base了解函數/方法存在於擴展的類?

編輯:

通過顯式/類型轉換,可以實現此目的,因為編譯器認為您知道將對象BaseDerived時正在做什么:

if (B instanceof Derived) {//make sure it is an instance of the child class before casting
((Derived) B).func2();
}

因為B不知道func2,所以它甚至不會編譯

由於對象B的類型為Base,並且Base類型的公共接口中沒有func2(),因此您的代碼將無法編譯。

您可以將B定義為Derived或將B對象轉換為Derived:

   Derived B = new Derived(); B.func2();
   //or
   Base B = new Derived(); ((Derived)B).func2();

你可以做

((Derived) B).func2(); 

你做不到

B.func2(); 

因為func2不是基類的方法。

像這樣:

((Derived) B).func2();

暫無
暫無

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

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