当前位置: 首页 > 知识库问答 >
问题:

Java继承:调用超类中的子类方法

田琛
2023-03-14

超类

public class User {
    private String name;
    private int age;

    public User() {
        //Constructor
    }

    //Overloaded constructor
    public User(String name, int age) {
        this.name = name; 
        this.age = age;
    }

    public String getName() {
        return this.name;
    }
    public static void main(String []args) {
        User user1 = new Admin("Bill", 18, 2); 

        System.out.println("Hello "+user1.getName()); 
        user1.getLevel();
    }

}

子类

public class Admin extends User {

    private int permissionLevel;

    public Admin() {
    //Constructor 
    }

    //Overloading constructor
    public Admin(String name, int age, int permissionLevel) {
        super(name, age); 
        this.permissionLevel = permissionLevel;
    }

    public void getLevel() {
        System.out.println("Hello "+permissionLevel);

    }

}

共有1个答案

贺佑运
2023-03-14

简短的回答:没有。

中等回答:是的,但是你必须在超类中声明方法。然后在子类中重写它。子类中的方法体将在超类调用时被调用。在您的示例中,您可以将一个空的getLevel方法放在User上。

您还可以考虑将User声明为抽象类,并将getLevel方法声明为User类上的抽象。这意味着您不在User类的getLevel中放置任何方法体,但每个子类都必须包含一个。同时,用户可以引用getLevel并使用其子类的实现。我想这就是你在这里的行为。

 类似资料:
  • 问题内容: 假设我有以下两个课程 如果我启动一个beta类型的新对象,如何执行在alpha类而不是beta中找到的逻辑?我可以使用<-我想知道是否可行。 Eclipse IDE中的自动键入功能使我可以选择从class 或class中进行选择。 问题答案: 你可以做: 注意,这是对父级的引用,但是super()是它的构造函数。

  • 嘿,我正在尝试调用子类方法(ChildClass扩展了超类()) 它没有看到ChildClass方法,我只能调用SuperClass()中的方法,我知道这可能是一个愚蠢的问题,但无论如何干杯

  • 我试图写一个类(SalaryEmployee)和子类(ComissionEmployee),但我没有得到正确的工资,我不能做SE1.SetSalesMount(20000)。我哪里出了问题? 这是主要的:

  • 请建议应用继承时如何使用。 我有一个抽象类和具体的。应该是不可变的。将放在两者上会导致两个错误: null 我很乐意删除并使用构建器方法,但我正在重构一个公共库(试图优化模型类),我不希望在我的客户端上出现编译错误。 我还发现了解释第二个错误的这个问题。但其意图的逻辑并不清楚https://github.com/rzwitserloot/lombok/issues/945

  • 问题内容: 我正在学习Java入门课程,我们才刚刚开始学习继承。我正在完成一项任务,要求我们创建一个具有名称和年龄的“宠物”超类。和三个子类,每个子类都有自己的独特特征(我选择了“狗”,“猫”和“鸟”)。构建完所有这些之后,我们将创建一个Main类来测试所有内容,这就是我遇到问题的地方。我试图在中调用这些独特特征的方法,但似乎只能找到超类中的方法。 这是主类: 这是我的超人 这是子类之一(它们看起

  • 问题内容: 所有自定义类/对象的超类是否隐式继承?我以为Java不支持多重继承。我问的原因是,如果我已经从我的自定义类中的另一个类继承了,并且Java再次在它之上强制隐式继承,这不是多重继承吗? 另外,java.lang.class类还是所有自定义类/对象的超类吗?如果没有,如何在Java反射中获取传递的任何类的类类型,或如何在任何对象上调用isInstance? 问题答案: 一切都是对象,说您可