繁体   English   中英

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

[英]What is the purpose of mixed constructors?

做这样的事情的目的是什么:

Employee a = new OverTimeEmployee();

要么

OverTimeEmployee a = new Employee();

其中OverTimeEmployee是雇员的子类?

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

这称为对象继承。

它与多态一起是面向对象编程的主要内容之一。

因此在代码中:

class Employee {
   ...
}

class OverTimeEmployee extends Employee {
   ...
}

因此,您可以这样做的原因:

Employee a = new OverTimeEmployee();

因为OverTimeEmployeeEmployee

我不相信您可以执行第二个示例中的操作,因为并非所有Employee都是OverTimeEmployee并且您会收到错误消息

Employee a = new OverTimeEmployee();

被称为“多态性”。

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

多态是一种动作或方法根据其所作用的对象执行不同操作的能力。

当OverTimeEmployee是Employee的子类时即可完成,即OverTimeEmployee extends Employee 因此,基本上,只有在图片中也有继承时,才可以使用它。 多态与方法重载一起使用。

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

假设您在OverTimeEmployee都有一个名为printDescription()的方法,并且说RegularEmployee (Employee的另一个子类)。 在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的子类,因此不会合规。 希望这可以帮助。

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

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

它可用于多态性,其中对对象的运行时引用将确定调用哪种方法。 因此,如果Employee和OverTimeEmployee都具有收入方法,并且Employee程序在执行期间包含对OverTimeEmployee的引用,则将调用OverTimeEmployee的收入方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM