我如何在子类java中使用超类方法

时间:2016-03-26 16:54:53

标签: java inheritance

public void setName (String n){}
public void setAfm (String a){}

这些是我需要调用的超类方法。

SalariedEmployee (){
    name = super.setName(String n);
    afm = super.setAfm(String a);
    salary = payment();

那就是子类中的构造函数。我该如何正确调用这些方法。我不想在SalariedEmployee中使用任何参数,我想用超类方法设置名称和afm。但我的方法是无效的。所以我想我必须改变它吗?还是我错过了别的什么? 提前谢谢!

2 个答案:

答案 0 :(得分:1)

编辑:你也可以使用setter。只有在要从子类中重写的超类中调用方法时,“super”关键字才是必需的。

您应该使用构造函数来设置初始值,但使用setter也是一种可能的解决方案:

class Employee {
    String name;
    String afm;

    public Employee() {
    }
    public Employee(String name, String afm) {
        super();
        this.name = name;
        this.afm = afm;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAfm(String afm) {
        this.afm = afm;
    }

}

class SalariedEmployee extends Employee {
    //Using constructors 
    public SalariedEmployee(String name, String afm) {
        super(name, afm);
        salary = payment();
    }
    //using setters
    public SalariedEmployee() {
        setAfm("afm");
        setName("name");
        salary = payment();
    }
}

同样像'setName'这样的setter方法应该是无效的,因为你不希望它返回任何东西,例如像'getName'这样的getter方法。

答案 1 :(得分:0)

有两种情况需要调用super方法。第一种情况是该方法未被子类覆盖。如果是这种情况,您只需调用

即可调用这些方法
setName("Dick Aceman"); 

setAtf("Acebook");

如果你这样称呼它们会更具描述性:

this.setName("Dick Aceman");
this.setAtf("Acebook");

打电话给他们的防弹方式是:

super.setName("Dick Aceman");
super.setAtf("Acebook");

即使方法被覆盖,最后一个也可以工作,但一般来说它被认为过于描述,所以只有在没有替代方法时才应该使用这种方法调用。请注意,由于您的方法是公共的,因此它们由子类继承。

您尝试的问题是:

  • 当方法没有返回值时,您尝试将方法的return值分配给变量
  • 你在方法调用中声明了类型,这是无效的
  • 您使用了an
  • 的未定义变量

您应该观看一些教程视频,然后您将获得基础知识。看了这么一两个视频后,你应该回到这个答案。