代码如下:
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();
有什么不同?
没有什么不同吧,目的都是调用talk()方法。
用:
Dog dog = new Dog(); dog.talk();
就是定义该类的引用(dog)去调用talk()方法。
Talk dog = new Dog(); dog.talk();
而这种是因为一个接口的引用(dog)指向实现接口的类(Dog()),所以可以用接口的引用去调用talk();
Dog dog = new Dog(); dog.talk();
是 dog 这个对象直接调用他的 talk(); 方法
Talk dog = new Dog(); dog.talk();
这个 dog 是将 Dog 类产生的对象引用向上转型为 Talk 类型的引用,然后调用 Dog 类重写了的 talk() 方法
不知道这样理解怎么样。
第一个是自己的引用指向自己的对象,第二个是父类引用指向子类对象,因为对象都是Dog所以调用的talk方法都是子类的talk方法,只不过第二个是多态的方式而已,自己的见解,有错误欢迎指出
没什么不同。