0

在 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(){..}
}

想使用单个引用调用这些方法,需要动态地将对象分配给该引用是否可能是朋友?...提前致谢

4

3 回答 3

1

您不能使用通用接口来做到这一点。您只能使用接口引用类型调用接口中定义的方法,即使它指向的属于另一个类的对象具有不同的其他方法。

于 2013-01-10T18:43:34.557 回答
0

您只能调用接口中定义的那些类函数,因为它的引用只能访问那些函数。前任:

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();

    }

}

于 2013-01-10T18:50:27.960 回答
0

在超类中定义您希望引用具有的所有方法,但将实现留空。然后,创建您的子类并覆盖必要的方法。

例子:

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();

  }
}
于 2013-01-10T18:55:45.463 回答