3 回答
TA贡献1890条经验 获得超9个赞
(1) Person person = new Employee("Joe Smith", "100 Main Ave", 3000.0); (2) Employee employee = new Employee("Joe Smith", "100 Main Ave", 3000.0);
两者都是正确的。(1)创建一个Employee,然后将其放入一个person对象。您会丢失员工字段/方法,但可以通过以下方式进行强制转换:Employee employeeFromPerson=(Employee)person
。您只能引用person方法而不进行强制转换。
(2)基本创建一个雇员并将其放入一个雇员对象中。您可以使用此对象引用Person和Employee方法/字段。
TA贡献1777条经验 获得超3个赞
两者都是正确的,并且都引用了雇员对象,但是都在不同的场景中使用。
首先用于动态多态性,其次用于简单对象分配。
例如,让我们假设在这种情况下,两个类Employee和Student扩展了Person类,并且都覆盖了相同的方法。区别在于在运行时调用哪种方法。
class Person {
public String getTag(){
return "This is Person"
}
}
class Employee extends Person {
public String getTag(){
return "This is Employee"
}
}
class Student extends Person {
public String getTag(){
return "This is Student"
}
}
Person person1 = new Person();
Person person2 = new Employee();
Person person3 = new Student();
Employee employee = new Employee();
Student student = new Student();
person1.getTag(); //it will return "This is Person"
person2.getTag(); //it will return "This is Employee"
person3.getTag(); //it will return "This is Student"
employee.getTag(); //it will return "This is Employee"
student.getTag(); //it will return "This is Student"
注意person2和person3引用了子类对象,它将调用子类方法的定义而不是其自身方法的定义
TA贡献1834条经验 获得超8个赞
真的没关系。您可以使用任何一个。如果您拥有的类A
和子类,A
B
并且只想使用A
的功能,请使用A a = new B();
。
但是,如果使用的数组Person
,则情况有所不同。如果你有Person
超级类Manager
和Employee
作为子类,那么你可以把任何类型的人进入Person[]
。但是,如果创建数组Manager[]
,则不能Employee
在其中放一个。
添加回答
举报