java创建对象的语法,求解释

Animal dog1 = new Dog();
Dog dog2 = new Dog();

dog1 和 dog2 有什么区别吗?
最前面写的 Animal 和 Dog的作用是什么?

桃花长相依
浏览 1120回答 3
3回答

慕雪6442864

多态,这个涉及到 java 引用变量的 编译时类型(申明变量时的类型) 和 运行时类型(变量所引用的实际对象的类型) Animal dog1 = new Dog(); 关于编译时类型:dog1 被申明为 Animal,在编译时也就是书写代码的时候,dog1 只能够调用 Animal 中申明(不一定要实现)的方法。关于运行时类型:dog1 实际引用的对象类型为 Dog。如果 Dog 类中实现了或者重载了 Animal 中的方法,那么在运行时,dog1 实际调用的方法是 Dog 类中的方法。 dog2 两种类型一致,不需要纠结~,写的时候和运行的时候是一致的。

MMTTMM

设计模式中有一个原则,就是针对接口编程或者叫针对超类型编程。程序针对超类编程,执行时会根据实际类型执行到真正的行为,不要绑死在具体的类型上。 public class Main { public static void main(String[] args) throws UnsupportedEncodingException { Dog dog = new Dog();//针对实现编程 Animal animal = new Dog();//针对接口/超类编程 Animal animal2 = getAnimal(1);//我不管对象是狗,还是猫,我只要知道它有doSomething()的行为,利用Animal进行多态调用。 animal2.doSomething(); } public static Animal getAnimal(int type){ if(1 == type){ return new Dog(); }else if(2 == type){ return new Cat(); }else{ throw new IllegalArgumentException("非法类型"); } } } class Animal{ public void doSomething(){ } } class Cat extends Animal{ @Override public void doSomething() { System.out.println("cat do!"); } } class Dog extends Animal{ @Override public void doSomething() { System.out.println("dog do!"); } }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java