一个接口他有多个实现类。现在引用这个接口,如何确定当前引用的这个接口的实现类是那个???

解决方案 »

  1.   

    接口类 对象 = new 实现类();想用哪个用哪个啊
      

  2.   

    1 既然你使用接口,就是不关系具体的实现类,这才是接口的优势啊!
    2 接口使用方,不可能知道会有多少实现了这个接口的类
    3 如果你只是想知道类名,那么getClass()可以满足你。
      

  3.   


    //通过传入的对象获得类名
    public String getClassName(Object obj){
          return obj.getClass().getName();
    }
      

  4.   

    我是楼主,现在一段代码如下:接口:
    public interface UserFactory{     public UserFacade createUserFacade(String loginName, String password, String remoteAddr);
    }程序中引用是:
         Object obj = 接口.createUserFacade(loginName,password,remoteAddr);
    注:UserFactory接口有若干个实现类,请问上面引用语句如何确定他的实现类是那个!
      

  5.   

    interface Test{
        public void print();//定义方法
    }class A implements Test{
        public void print(){
            System.out.println("Sub Class A");
        }
    }class B implements Test{
        public void print(){
            System.out.println("Sub Class B");
        }
    }public class TestClass{
        public static void main(){    Test test = new A();
        test.print();//Sub Class A    Test test = new B();
        test.print();//Sub Class B}
      

  6.   

    Object obj 本身就是实现类的对象啊。不明白你想知道实现类做什么,要强制类型转换吗?使用  if(obj instanceof ...UserFacade){
             ((...UserFacade)obj).do...();
          }
      

  7.   

    // 定义一个接口
    interface Person {
        
        // 比如此接口定义了一个方法为吃东西。str表示要吃的东西。
        void eat(String str);
    }// 第一个实现类
    class FirstPerson implements Person {    private String name;    FirstPerson(String name) {
            this.name = name;
        }    // 实现了接口中定义的方法,必须用关键字public因为接口中定义的方法默认是public的。
        public void eat(String str) {
            System.out.println(name + "正在吃" + str);
        }
    }// 第二个实现类
    class SecondPerson implements Person {    private String name;    SecondPerson(String name) {
            this.name = name;
        }    // 实现了接口中定义的方法,必须用关键字public因为接口中定义的方法默认是public的。
        public void eat(String str) {
            System.out.println(name + "正在吃" + str);
        }
    }// 第三个实现类
    class ThirdPerson implements Person {    private String name;    ThirdPerson(String name) {
            this.name = name;
        }    // 实现了接口中定义的方法,必须用关键字public因为接口中定义的方法默认是public的。
        public void eat(String str) {
            System.out.println(name + "正在吃" + str);
        }
    }// 要通过接口实现类实现接口定义的方法的类
    public class Test {    public final static int FIRST = 0;
        public final static int SECOND = 1;
        public final static int THIRD = 2;    // 返回指定类型的接口
        public static Person printPerson(int kind) {
            Person p = null;
            switch (kind) {
                case FIRST: p = new FirstPerson("人1");break;
                case SECOND: p = new SecondPerson("人2");break;
                case THIRD: p = new ThirdPerson("人3");break;
            }
        }    public static void main(String[] args) {
            // 可以通过工厂类决定要用的实现类。比如Test类是工厂。
             Test.printPerson(Test.FIRST);
        }
    }
      

  8.   

    public static Person printPerson(int kind) {
            Person p = null;
            switch (kind) {
                case FIRST: p = new FirstPerson("人1");break;
                case SECOND: p = new SecondPerson("人2");break;
                case THIRD: p = new ThirdPerson("人3");break;
            }
            // 返回p
            return p;
        }
    Test.printPerson(Test.FIRST).eat("FirstObject");
      

  9.   

    根据多态之方法重写的机制:接口指向什么子类对象,调用接口的方法,那么调用的就是这个子类对象的对应重写方法。
    父类的被覆盖掉,子类只能直接调用自己的重写方法。请注意,在接口中是,如果是父类的话,那么就可以使用super.xxx()调用父类方法了。如果觉得乱,只看第一句就OK了