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}
// 比如此接口定义了一个方法为吃东西。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); } }
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");
2 接口使用方,不可能知道会有多少实现了这个接口的类
3 如果你只是想知道类名,那么getClass()可以满足你。
//通过传入的对象获得类名
public String getClassName(Object obj){
return obj.getClass().getName();
}
public interface UserFactory{ public UserFacade createUserFacade(String loginName, String password, String remoteAddr);
}程序中引用是:
Object obj = 接口.createUserFacade(loginName,password,remoteAddr);
注:UserFactory接口有若干个实现类,请问上面引用语句如何确定他的实现类是那个!
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}
((...UserFacade)obj).do...();
}
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);
}
}
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");
父类的被覆盖掉,子类只能直接调用自己的重写方法。请注意,在接口中是,如果是父类的话,那么就可以使用super.xxx()调用父类方法了。如果觉得乱,只看第一句就OK了