现在有一个接口Human
public interface Human{
public String sayHello(String s);
}一个实现类Man:
public class Man implements Human{
public String sayHello(String s){
return "Hello, " + s +" Welcome to Spring!";
}
}测试类:
public class TestSpring{
public static void main(String args[]){
Human human1 = new Man();
System.out.println(human1.sayHello("Chaexsy"));
}
}在测试类中创建对象的时候
Human human1 = new Man();
Man human1 = new Man();
这两种方式有什么不同的意义?

解决方案 »

  1.   

    先站沙发
    Human human1 = new Man(); 第一个是以接口实例化类 
    Man human1 = new Man(); 第二个是类new类
      

  2.   

    Human human1 = new Man(); 
    Man human2 = new Man(); 
    human1.sayHello('text');
    //在eclipse下按ctrl进入的是Human ,看不到实现代码,实现代码被封装了human2.sayHello('text');
    //在eclipse下按ctrl进入的是Man ,所有实现代码都实现
      

  3.   

    用接口 来 指向实例  这种声明  有利于功能的扩展
    例如以下代码://声明一个驱动接口
    public interface IDeviceWriter{
        public void saveToDevice();
    }
    //设计一个Business业务类
    public class Business{
        private IDecviceWriter writer;
        public void setDeviceWriter(IDeviceWriter writer)
        {
            this.writer = writer;
        }
        public void save(){
            writer.saveToDevice();
        }
    }
    //编写两个 功能
    public class FloppyWriter implement IDeviceWriter {
        public void saveToDevice(){
             //实际存储至Floppy的程序代码
        }
    }
    public class UsbDiskWriter implement IDeviceWriter{
        public void saveToDevice(){
             //设计存储至UsbDisk的程序代码
        }
    }
    //如果应用程序需要软盘存储,可以写如下 配置程序
    Busioness busioness = new Business();
    busioness.setDeviceWriter(new FloppyWriter());
    business.save();
    //如果需要usb磁盘存储 ,可以写如下配置程序
    Busioness busioness = new Business();
    busioness.setDeviceWriter(new UsbDiskWriter());
    business.save();可以看到,无论低层的存储实现如何变动,对于Busioness类来说都无需做任何修改.
      

  4.   

    通过接口去引用具体的实现类,直接new出来是没什么区别的。
    但是可以通过配置的方式动态的去修改接口所引用的实体类而不去修改代码
      

  5.   

    啥叫接口真不懂...
    ...继承也不懂..
    郁闷啊..
    就知道写servlet的时候要extends httpservlet..
    为什么这么做 ..不懂...
    ...马上毕业了...杂办.