为了账号安全,请及时绑定邮箱和手机立即绑定

实现一个接口对象

代码如下:

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();

有什么不同?

正在回答

4 回答

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

用:

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

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

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

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



0 回复 有任何疑惑可以回复我~
Dog dog = new Dog();
dog.talk();

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

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

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

不知道这样理解怎么样。


0 回复 有任何疑惑可以回复我~

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

1 回复 有任何疑惑可以回复我~

没什么不同。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

实现一个接口对象

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信