混合构造函数的目的是什么?

时间:2011-05-10 19:03:05

标签: java

做以下事情的目的是什么:

Employee a = new OverTimeEmployee();

OverTimeEmployee a = new Employee();

OverTimeEmployee是员工的子类吗?

它的正确名称是什么?我猜混合构造函数不对

4 个答案:

答案 0 :(得分:4)

它被称为对象继承。

这是面向对象编程的主要内容之一,还有Polymorphism

所以在代码中:

class Employee {
   ...
}

class OverTimeEmployee extends Employee {
   ...
}

所以你可以这样做:

Employee a = new OverTimeEmployee();

是因为OverTimeEmployeeEmployee的类型。

我不相信你能做你在第二个例子中所做的事情,因为并非所有Employee都是OverTimeEmployee,你会得到错误

答案 1 :(得分:2)

Employee a = new OverTimeEmployee();

被称为“多态”。

多态性:“一个名称,多个形式”。

多态性是一种动作或方法根据它所作用的对象做不同事情的能力。

当OverTimeEmployee是Employee的子类,即OverTimeEmployee extends Employee时,可以这样做。所以基本上,只有在图片中还有继承时才能使用它。多态性与方法重载一起使用。

原因:在多态性的情况下,实际的对象类型而不是引用类型用于确定要调用的方法的版本。方法在编译时绑定(与覆盖时的运行时相反)。

假设您在printDescription()OverTimeEmployee(还有一个Employee的子类)中都有一个名为RegularEmployee的方法。 在OverTimeEmployee类的方法中,表示您正在打印int overtimerate,而RegularEmployee表示您正在打印String perks

class OverTimeEmployee {
  int overtimerate;
  .
  .
  .

  void printDescription() {
     System.out.println("I am overtime employee with pay rate " + overtimerate);
  }
}

class RegularEmployee {
      String perks;
      .
      .
      .

      void printDescription() {
         System.out.println("I am regular employee with perks " + perks);
   }
}

然后你这样做:

OverTimeEmployee ot = new Employee(20); // initializing orvertimerate as 20

RegularEmployee rt = new Employee("Free parking"); // initializing perks as "Free parking"

ot.printDescription()将打印

I am overtime employee with pay rate 20

rt.printDescription()将打印

I am regular employee with perks Free parking

另请注意,OverTimeEmployee a = new Employee();将无法编译,因为OverTimeEmployee是Employee的子类。 希望这会有所帮助。

答案 2 :(得分:1)

如果OverTimeEmployeeEmployee的子类,则您无法执行OverTimeEmployee a = new Employee();。那将无法编译。

Employee a = new OverTimeEmployee();涉及面向对象编程和继承的核心。

答案 3 :(得分:1)

它可以用于多态,其中对象的运行时引用将决定调用哪个方法。因此,如果Employee和OverTimeEmployee都有一个依赖于收益的方法,并且在执行程序期间,Employee包含对OverTimeEmployee的引用,那么将调用OverTimeEmployee的收益方法。