Java AP Comp Sci OOP

时间:2016-04-21 16:26:23

标签: java oop

我很难理解实例化在面向对象编程问题中是否有效。这是我目前对伪的看法。它是否正确?

如果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

1 个答案:

答案 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,与aCar的意义相同。第二个实际上是坏的,因为不是每个Vehicle"都是" a,就像不是每个b"都是" Vehicle