一直认为这个是表基础的话题,今天在项目中遇到了,让我纠结了,有哪位大虾可以帮忙解答下,小弟不胜感激!

解决方案 »

  1.   

    那只能说明你用的时候有问题你说的那种情况应该不会发生啊。如果你要使用接口里的方法
    1. 直接new一个实例,这样肯定知道用的哪个实例
    2. 定义接口类型的变量,用某个实例去初始化这样也是肯定知道用的哪个实例一般我们用第二种方式有一个好处,如果以后要改动,那么只需要修改其引用的实例,改动较少!举个例子:A接口,A1,A2,A3实现A接口,有一个eat方法,A1:吃饭,A2:吃鱼,A3:吃肉需要得到"吃肉",那么 A a = new A3();
    需要得到"吃饭",那么 A a = new A1();
      

  2.   

    谢谢大家的关注和支持,我现在是在读以前的代码,然后在这基础上做优化,只看manager接口,就没有去关注这个对象是怎么生成的,只是用eclipse快捷键往进跟,想看看他是怎么去实现的,然后点进去还是几个实现,就纠结了,我要进哪个去看呢,后来通过楼上各位的解答,我明白了!
      

  3.   

    我觉得,一般来说,不用判断,执行完接口的方法,看结果就知道是哪个实现类了。因为不同的实现类肯定会有不同的“用途”,不然就不会实现不同的实现类了。如果非要知道是哪一个实现类,那就得用楼上的说法了。用instanceof判断。
    interface A{
       void a() ;
    }
    class A1 implements A{
       void a(){
          System.out.println("我是A1");
       }
    }
    class A2 implements A{
       void a(){
          System.out.println("我是A2");
       }
    }class Test{
       public static void main(String[] args){
          A a = new A1() ;
          a.a() ; //  是我想要的结果就行了
           //总不会这样写吧
           if(a instanceof A1){
               System.out.println("我是A1");
          }else if(a instanceof A2){
               System.out.println("我是A2");
          } 
    }
      

  4.   

    一般都会再设计一个类或方法,这个方法形参接收此接口的实现类。interface Move
    {
    public void FastMove();
    }
    class TrafficTools
    {
    public void FindMove(Move m)
    {
    m.FastMove();
    }
    }class Car  implements Move
    {
    public void FastMove()
    {
    System.out.println("汽车移动");
    }
    }
    class Plane implements Move
    {
    public void FastMove()
    {
    System.out.println("飞机移动");
    }
    }
    class Boat  implements Move
    {
    public void FastMove()
    {
    System.out.println("轮船移动");
    }
    }public class TrafficToolsTest
    {
    public static void main(String[] args)
    {
    Move m1=new Car();
    Move m2=new Plane();
    Move m3=new Boat();
    TrafficTools tt=new TrafficTools();
    tt.FindMove(m1);
    tt.FindMove(m2);
    tt.FindMove(m3);
    }
    }
      

  5.   

       这就是多态的运用吗 .
         用父类引用指向子类对象 .  你new 什么对象不管  直接调用那个重写的方法就可以了