簡體   English   中英

在Java中的單個引用中調用來自不同類的不同方法

[英]Call different methods from different classes in a single reference in java

在Java中遇到問題時,我們可以調用類似

interface samp{
   public void printMsg();
}
ClassA implements samp{
    public void printMsg()
    {
          S.o.p("Hi ClassA");
    }
}
ClassB implements samp{
    public void printMsg()
    {
          S.o.p("Hi ClassB");
    }
}
public MainClass{
    public static void main(String args())
    {

         samp s= new ClassA();
         s.printMsg();
         samp s= new ClassB();
         s.printMsg();
    }
}

我們可以做到這一點,是否有不同類型的類方法,而不是所有類都具有相似的方法,但是我想實現將來的可能嗎? 還有其他模式嗎,請幫助我找到這個。 喜歡

ClassA{
    public void fun1(){..}
    public void fun2(){..}
}
ClassB{
    public void fun3(){..}
    public void fun4(){..}
}

想要使用單個引用調用這些方法,需要動態地將對象分配給該引用,這是否可能是朋友?...在​​此先感謝

您不能使用通用接口來做到這一點。您只能使用接口引用類型調用在接口中定義的方法,即使它所指向的對象屬於另一個類也具有不同的其他方法。

您只能調用接口中定義的類函數,因為其引用只能訪問那些函數。 例如:

interface samp{
   public void printMsg();
}
ClassA implements samp{
    public void printMsg()
    {
          S.o.p("Hi ClassA");
    }
    public void newmthd(){
      S.o.p("you can't call me from samp reference.");
     }
}
ClassB implements samp{
    public void printMsg()
    {
          S.o.p("Hi ClassB");
    }
}
public MainClass{
    public static void main(String args())
    {

         samp s= new ClassA();
         s.printMsg();
         s.newmthd() //error... s don't have any knowledge of this function.              
         samp s= new ClassB();
         s.printMsg();

    }

}

在超類中定義您希望引用擁有的所有方法,但是將實現留空。 然后,創建您的子類並覆蓋必要的方法。

例:

Class MySuperClass {
  public void fun1() {}
  public void fun2() {}
  public void fun3() {}
  public void fun4() {}
}

Class ClassA extends MySuperClass {
  public void fun1() { //implementation details }
  public void fun2() { //implementation details }
}

Class ClassB extends MySuperClass {
  public void fun3() { //implementation details }
  public void fun4() { //implementation details }
}

public Class Tester {
  public static void main(String[] args) {
    MySuperClass class1 = new ClassA();
    MySuperClass class2 = new ClassB();

  }
}

暫無
暫無

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

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