对于语法
类名 变量名=new 类名()
第一个类名决定创建变量的类别属性范围,new负责开辟空间,类名()负责实际初始化一个区域的属性,所以在Animal dog=new Dog();这里运用的向上转型可以认为是我创建的dog本身的范围是Animal的属性范围,但我在new开辟空间时只采用了子类的Dog范围,因此我的dog既可以范围Dog类的方法变量,也可以访问Animal里的方法与变量。类似于一个包含关系。
类似于:
class Toy {
// 一般玩具的属性和方法
}
class Car extends Toy {
// 汽车玩具的属性和方法
}
现在,当你使用 Toy
工厂制造一个玩具时,你可以用 Toy toy = new Toy();
,就像是:
Toy toy = new Toy(); // 制造了一个普通的玩具
而当你想制造一个特殊类型的玩具,比如一个汽车玩具,你可以使用 Car
工厂制造它:
Car car = new Car(); // 制造了一个汽车玩具
在这个例子中,Car
是 Toy
的一种,就像是 Car
是一种特殊的玩具。因此,通过向上转型,你可以使用 Toy
类型的引用来引用 Car
类型的对象。这就像在工厂里,你可以使用一个一般的玩具盒子(Toy
类型的引用)来装载一个汽车玩具(Car
类型的对象)。这是一种多态性的体现,让你能够处理不同类型的对象,但只用一种通用的方式