我想知道这种情况:员工继承自Person,Manager继承自Employee,哪个陈述是正确的?
Person alice = new Employee();
Employee bob = new Person();
Manager cindy = new Employee();
Manager dan = (Manager)(new Employee());
答案 0 :(得分:0)
只有第一个是正确的。
答案 1 :(得分:0)
继承的一个用途是将继承类型转换为基类型的能力(不是相反。)
所以你可以做到
$.ajax({
type: 'GET',
url: 'http://--------------',
cache: false,
data: "id:2",
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function (response) {
alert(response.data);
},
error: function (response) {
alert("Error");
}
});
关键是你应该始终能够将继承的类型转换为其基类型之一,并将其用作该类型的实例。 (理想情况下,尽量避免以其他方式执行此操作 - 检查对象以查看它继承的类型。)
它被称为Liskov Substitution Principle(SOLID中的L。)简单的解释是,您应始终能够将Manager danTheManager = new Manager();
Employee danTheEmployee = (Employee)danTheManager;
Person danThePerson = (Person)danTheManager;
Person alsoDanThePerson = (Person)danTheEmployee;
转换为Manager
或{{1并将其用作该类型的实例,因为它继承自它们。您不希望必须检查对象的类型,因为如果它是Employee
,它可以单向工作,但如果它是Person
,则它的工作方式不同。