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