2016-03-26 36 views
1
public void setName (String n){} 
public void setAfm (String a){} 

这些是我需要调用的超类方法。如何在子类中使用超类方法java

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

而那就是子类中的构造函数。我怎样才能正确地调用方法。我不想在SalariedEmployee中使用任何参数,我想用超类方法设置名称和afm。但我的方法是无效的。所以我想我必须改变那个权利?还是我错过了别的? 在此先感谢!

+0

你似乎很困惑,setters是'void',所以你不能说'name =','afm ='(我不知道'payment')。其次,你不要在调用中指定类型 - 你给出一个值'super.setName(“A Name”);''你不需要*说'super.';这足以说'setName(“A Name”);' –

回答

1

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

您应该使用构造函数来设置初始值,但使用制定者是一个可能的解决方案过于:

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方法应该是无效的,因为你不希望它返回什么不同例如getter方法。

+0

这就是我原来写的。在Employee类中,我需要编写这些方法(这是说明)。所以我想过使用它们。所以你说的是我不能用这些超类方法设置初始值? –

0

有两种情况需要调用super方法。第一种情况是该方法未被子类覆盖。

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

防弹方式:如果是这样的话,你可以简单地通过调用

setName("Dick Aceman"); 

setAtf("Acebook"); 

,如果你打电话给他们这样更描述调用这些方法给他们打电话是这样的:

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

即使方法被覆盖,最后一个仍然有效,但通常认为它太过描述,所以只有在没有其他选择的情况下才应使用这种方法调用。请注意,由于您的方法是公共的,它们被子类继承。

你尝试的问题,表示:

  • 你试图分配return值的方法变量,当方法不返回值
  • 你声明的方法调用,其类型无效
  • 您使用的a的不确定变量和n

你应该看一些教程VI deos,那么你将获得基础知识。看完这样的视频后,你应该回到这个答案。

相关问题