问答详情
源自:10-5 Java 中的接口

实现一个接口对象

代码如下:

public interface Talk {
    void talk();
}

public class Dog implements Talk {

    @Override
    public void talk() {
        // TODO Auto-generated method stub
        System.out.println("hello,我的叫声是汪汪");
    }

}

public class Cat implements Talk {

    @Override
    public void talk() {
        // TODO Auto-generated method stub
        System.out.println("hello,我的叫声是喵喵");
        
    }

}

public class TestTalk {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Talk dog = new Dog();
        Talk cat = new Cat();
        Talk sheep = new Sheep();
        
        dog.talk();
        cat.talk();
        sheep.talk();
        

    }

}

在创建一个对象时,用:Dog dog = new Dog();

                                   dog.talk();

也可以调用,这和:Talk dog = new Dog();

                                 dog.talk();

有什么不同?

提问者:木木木11 2016-05-14 12:11

个回答

  • 橙子lovesun
    2016-05-21 16:55:41

    没有什么不同吧,目的都是调用talk()方法。

    用:

    Dog dog = new Dog();
    dog.talk();

    就是定义该类的引用(dog)去调用talk()方法。

    Talk dog = new Dog();
    dog.talk();

    而这种是因为一个接口的引用(dog)指向实现接口的类(Dog()),所以可以用接口的引用去调用talk();



  • 残桐落叶
    2016-05-18 21:33:42

    Dog dog = new Dog();
    dog.talk();

    是 dog 这个对象直接调用他的 talk(); 方法

    Talk dog = new Dog();
    dog.talk();

    这个 dog 是将 Dog 类产生的对象引用向上转型为 Talk 类型的引用,然后调用 Dog 类重写了的 talk() 方法

    不知道这样理解怎么样。


  • weibo_井是一种优雅的态度_03330562
    2016-05-14 13:06:21

    第一个是自己的引用指向自己的对象,第二个是父类引用指向子类对象,因为对象都是Dog所以调用的talk方法都是子类的talk方法,只不过第二个是多态的方式而已,自己的见解,有错误欢迎指出

  • 小船是我呵呵
    2016-05-14 12:59:38

    没什么不同。