[英]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();
因为OverTimeEmployee
是Employee
。
我不相信您可以执行第二个示例中的操作,因为并非所有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的子类,因此不会合规。 希望这可以帮助。
如果OverTimeEmployee
是Employee
的子类,那么您将无法执行OverTimeEmployee a = new Employee();
。 那不会编译。
Employee a = new OverTimeEmployee();
成为面向对象编程和继承的核心。
它可用于多态性,其中对对象的运行时引用将确定调用哪种方法。 因此,如果Employee和OverTimeEmployee都具有收入方法,并且Employee程序在执行期间包含对OverTimeEmployee的引用,则将调用OverTimeEmployee的收入方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.