我很难理解实例化在面向对象编程问题中是否有效。这是我目前对伪的看法。它是否正确?
如果b扩展a,b得到一个方法
a o = new b() //BAD
b o = new a() //GOOD
public class a{ public void Aa() }
public class b extends a{ public void Bb() }
a o = new a()
a.Bb() //BAD
b o = new b()
b.Aa() //GOOD
b o = new a()
b.Aa() //GOOD
b.Bb() //GOOD
答案 0 :(得分:1)
您可以将子类视为具有"是"与父类的关系。例如,如果您有一个班级Vehicle
并创建一个扩展Car
的班级Vehicle
,您可以说"汽车是一辆汽车"但不是"车辆是汽车"。
如果要为变量赋值,可以为变量赋值,如果可以说分配的值为"是"变量类型的值。例如,
Vehicle v = new Car(); // valid because a Car "is a" Vehicle
Car c = new Vehicle(); // not valid because a Vehicle is not necessarily a Car.
现在对您的案例应用相同的推理,其中b
扩展a
,这意味着(b
"是" {{ 1}}):
a o = new b()// BAD
b o = new a()// GOOD
第一个实际上是好的,因为a
"是" b
,与a
为Car
的意义相同。第二个实际上是坏的,因为不是每个Vehicle
"都是" a
,就像不是每个b
"都是" Vehicle
。