interface是一种类型(type),你实际获得的是它的一个子类对象。

解决方案 »

  1.   

    这些都是基本概念,建议看看入门的书,要比我讲的详细的多:) ------------------------------------------------------
               我们还年轻牛奶会有的奶牛也会有的 
                 可天天在 csdn 混这些会有吗 ??
      

  2.   

    我来解释一下,你看下面的代码//这是一个接口,Vehicle是交通工具的意思,这个接口定义了交通工具的一个共有的方法
    //drive()驾驶
    public interface InfVehicle {
        public void drive();
    }  //小汽车是交通工具,实现交通工具的接口
    public class Car implements InfVehicle {
        public void drive() {
            //这里具体实现小汽车的驾驶方法
        }
    }
    //自行车也是交通工具,实现了交通工具的接口
    public class Bicycle implements InfVehicle {
        public void drive() {
            //这里具体实现自行车的驾驶方法
        }
    }//这是一个“人”类,它有一个方法是 goHome回家,回家需要一种交通工具,所以他有一个交通工具,他回家时使用这个工具
    public class Man {
        private InfVehicle vehicle;
        
        public InfVehicle getVehicle() {
            return this.vehicle;
        }    public void setVehicle(InfVehicle vehicle) {
           this.vehicle = vehicle;
        }
        //回家方法
        public void goHome() {
            this.vehicle.drive();
        }
    }现在我们来看怎么使用这些类Man aMan = new Man();   //创建一个"人"           
    InfVehicle car = new Car(); //创建一个小汽车
    InfVehicle bicycle = new Bicycle();//创建一个自行车//比如今天这个人想开车回家,我们就
    aMan.setVehicle(car);
    aMan.goHome();
    //如果他开车开腻了,想换一种方式,他这可以骑车回家
    aMan.setVehicle(bicycle);
    aMan.goHome(Bicycle);
    看明白上面的代码我来回答你的问题:1)为什么一个函数的返回值可以是接口?比如 类 Man 中的 public InfVehicle getVehicle()
       这是因为接口也是一种“类型”,当然它可以用来当方法的返回值。但一个接口是不能有实例的,也就是说它必须指向一个具体类型(比如car或bicycle),当一个方法返回一个接口时,实现上也是返回一个具体实例,只不过是以接口的形式返回的2) 为什么接口能定义变量?比如上例中的 InfVehicle car = new Car(); 
        上面说了,接口是一种类型,它就可以定义变量,但它所指向的对象必须是一个具体的类型,这里的具体类型是car.你不能这样写
        InfVehicle v = new InfVehicle(); //这就错了,因为接口不能被实例化。它所接收的要是一个具体类的实例,而这个类要实现这个接口。3)一个类实例为什么能被强制转成接口?
         将一个具体的类实例转成它所实现的接口,这种操作叫向上转型,这是可以的。 当你转成接口后,你就只能使用接口中的方法了,而不能使用这个实现所扩展的方法。这是一个要注意的地方。当然,你向上转型时要保证你所转向的类型确实是这个类的父类类型4)为什么接口自己调用了起来?
         这个问题比较好回答,一个具体的类调用自已的方法你一定认为这没什么吧,很正常,当然了,一个接口也可以调用自已的方法啊。为什么不能呢?  你要明白的是虽然表面是它是一个接口,实际上,它是指向一个具体的类的实例的,也就是说当接口调用自已方法时,和一个具体的类的实例调用自己的方法是一样的。没有什么不同。
      

  3.   

    truezerg(赵明宇),你让我对CSDN有了全新的看法,谢谢你的热情,我会记住你的。