【问题标题】:Call different methods from different classes in a single reference in java在java中的单个引用中从不同类调用不同的方法
【发布时间】:2013-01-10 18:38:17
【问题描述】:

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

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

【问题讨论】:

  • 你能不能解释的更详细一点,I want to implement the futurewant to call these methods using a single refrence是什么意思?

标签: java design-patterns object interface reference


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    }

    【讨论】:

      【解决方案3】:

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

      例子:

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

      【讨论】:

      • 但是他怎么能预测未来。:Pie他说“我想实现未来”。
      • 有点不清楚 OP 想要什么,但我解释为需要能够在不破坏现有代码的情况下添加/修改功能以满足未来需求。所以在这个例子中,可能 ClassA 最初并没有覆盖 fun3,而是调用了空实现。将来随着项目的发展,它可以很容易地填充。
      • 那你是对的,他忘了在他的问题中定义未来的意思。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      相关资源
      最近更新 更多