有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

继承与Java继承的混淆

我目前正在学习一本AP CS考试学习指南,我在理解过程中遇到了困难。假设我有一个名为Employee的类,还有一个继承Employee的名为Manager的类。以下声明之间有区别吗

Employee empl1 = new Manager();
Manager empl2 = new Manager();

我基本上搞不清楚物体名称前的这个词在做什么,以及它与新名称后的这个词有什么不同。感谢您的帮助


共 (3) 个答案

  1. # 1 楼答案

    当您使用类型为Super class的对象引用基类时,该对象只能访问基类的重写方法,或者简而言之,只能访问两个类共同拥有的方法。。。 用一个超类引用一个基类对象就是我们在java中所说的虚拟方法调用

  2. # 2 楼答案

    名称前面的部分是对正在创建的对象的引用的类型。在右边,在new之后,您正在调用一个特定类的构造函数(在您的示例中是类Manager

    你可以写

    Employee empl1 = new Manager();
    Employee empl2 = new Consultant();
    Employee empl3 = new Officer();
    Employee empl4 = new Secretary();
    

    因为你在那里创建的所有对象都是员工。然而,你不会写作

    Manager manager = new Secretary();
    

    因为秘书不是经理

    引用的类型(即名称前的术语)决定了可以使用该引用调用哪些方法。例如,你可以写

    Manager manager = new Manager();
    manager.doSomethingThatOnlyManagersCanDo();
    

    但是你可以而不是写作

    Employee employee = new Manager();
    emplyoee.doSomethingThatOnlyManagersCanDo();
    

    因为你只知道对象是员工,而不是经理。(他是经理,但你不知道,因为推荐人只告诉你他是员工)

  3. # 3 楼答案

    左边的表单是“接口”,继承允许您使用Manager作为Employee,因为Manager{a1}{}。区别在于,对经理员工调用的方法首先来自Manager,然后从Employee继承行为。另一个区别是,如果调用getClass().getName()。考虑每个java对象从java.lang.Object继承,这就是为什么您可以调用任何对象上的^ {< CD8}}或^ {CD9}}。