多态性分配声明

时间:2011-11-07 01:14:26

标签: java polymorphism polymorphic-associations

我对其赋值语句的多态性有疑问,例如,这是超级类

   public class Person {

            private String firstName;
            private String middleInitial;
            private String lastName;
            private int age;

            public Person(String firstName,String middleInitial , String lastName , int age){
                setFirstName(firstName);
                setMiddleInitial(middleInitial);
                setLastName(lastName);
                setAge(age);
            }

            public void setFirstName(String firstName){
                this.firstName = firstName;
            }

            public String getFirstName(){
                return firstName;
            }

            public void setMiddleInitial(String middleInitial){
                this.middleInitial = middleInitial;
            }

            public String getMiddleInitial(){
                return middleInitial;
            }

            public void setLastName(String lastName){
                this.lastName = lastName;
            }

            public String getLastName(){
                return lastName;
            }

            public void setAge(int age){
                this.age = age;
            }

            public int getAge(){
                return age;
            }

            public String toString(){
                return String.format("First Name: "+getFirstName()+"\nMiddle Initial: "+getMiddleInitial()+
                                        "\nLast Name: "+getLastName()+"\nAge: "+getAge());
            }
    }

这就是The Derived Class

 public class Employee extends Person{

        private Contact contact;

        public Employee(String firstName,String middleInitial , String lastName , int age, Contact contact){
            super(firstName,middleInitial,lastName,age);
            this.contact = contact;
        }
public String toString(){
        return String.format(super.toString()+contact.toString());
    }
}

现在我的问题是这些赋值语句之间的区别是什么?有什么区别?我知道员工是一个人,但我想知道这两者之间的区别:

 Person employee1 = new Employee();
    Employee employee2 = new Employee();

和本

 Employee employeeKyle = new Employee();
    Person employeeKyel2 = employeeKyle;

我对这些事情感到很难过。

3 个答案:

答案 0 :(得分:2)

在第一个中你有2个OBJECTS,两个都是Employee类型,你有2个不同的引用,一个是Person引用,另一个是Employee引用。

在第二种情况下,你有1个OBJECT,其中2个REFERENCES指向它,是一个Person,另一个是Employee。

对象始终是您使用 new 关键字实例化的类型(在这种情况下,对象始终是员工)。但是,您可以使用指向实际对象的不同类型的引用(引用可以是对象类型或其超类之一)。

答案 1 :(得分:1)

第一个创建Employee,引用为PersonEmployee引用为Employeeemployee1只有Person个方法,而employee2同时包含PersonEmployee方法。

第二个创建Employee,然后创建对同一Person的{​​{1}}引用。只有Employee类中定义的方法才可用于Person实例,而employeeKyel2将包含所有employeeKyle方法。

答案 2 :(得分:1)

在你的第二个例子中,你只有一个对象,有两个指针。如果修改employeeKyle,则employeeKyle2也将被修改(它们是同一个对象)。您将employeeKyle2称为Person而不是Employee的事实仅对您允许在该引用上使用的方法有用。在引擎盖下,它仍指向相同的Employee对象,因此如果您稍后将employeeKyle2转换为Employee,它将起作用而不会抛出强制转换异常。

在第一个示例中,您创建了两个不同的对象,这是唯一的区别。它们是两个Employee对象,但您只能在Person上使用employee2方法。