class Employee
{
int emp_no;
String emp_name;
double emp_sal;
public Employee(int e_no,String e_name,double e_sal)
{
emp_no=e_no;
emp_name=e_name;
emp_sal=e_sal;
}
public double calBonus()
{
return (emp_sal/10);
}
public void display()
{
System.out.println("Employee No: "+this.emp_no);
System.out.println("Employee Name: "+this.emp_name);
System.out.println("Employee Gross Salary: "+ (emp_sal+calBonus()));
}
}
class Clerk extends Employee
{
String Grade;
public Clerk(int e_no,String e_name,double e_sal,String e_Grade)
{
super(e_no,e_name,e_sal);
Grade=e_Grade;
this.set_Grade(e_Grade);
}
String set_Grade(String e_Grade)
{
**this.Grade=e_Grade;
}
String get_Grade()
{
return this.Grade;
}**
public void display()
{
super.display();
System.out.println("Grade: " + this.Grade);
}
}
class PaySlip
{
public static void main(String args[])
{
Employee c1;
c1=new Clerk(76,"Saman",12000.50,"Grade1");
c1.display();
}
}
**
Bolded系列中出了点问题。但是我无法弄明白。当我编译它时会显示错误,显示“缺少返回语句'}'。
**
答案 0 :(得分:6)
String set_Grade(String e_Grade)
{
this.Grade=e_Grade;
}
应该是
void set_Grade(String e_Grade)
{
this.Grade=e_Grade;
}
你已经声明了返回类型为String
它应该是void
,因为你没有return语句它是一个setter。
答案 1 :(得分:1)
String set_Grade(String e_Grade)
{
this.Grade=e_Grade;
}
您宣布set_Grade
返回String
,但没有return
声明。您可能希望该方法“返回”void
代替:
void set_Grade(String e_Grade)
{
this.Grade=e_Grade;
}
顺便说一句,在Java中命名getter和setter的常用方法是没有下划线:setGrade
。
答案 2 :(得分:0)
set_Grade上的方法签名指定应该返回一个String,但是你没有返回任何东西。
另外,请查看http://www.oracle.com/technetwork/java/codeconvtoc-136057.html和http://www.oracle.com/technetwork/java/codeconvtoc-136057.html,了解在java中命名事物和格式化代码的方法。
代码越易读,就越容易修复。
答案 3 :(得分:0)
String set_Grade(String e_Grade)
{
**this.Grade=e_Grade;
}
String get_Grade()
{
return this.Grade;
}**
您有一个应返回String的默认方法。
public void set_Grade(String e_Grade)
{
this.Grade=e_Grade;
}
public String get_Grade()
{
return this.Grade;
}
在实例方法或 构造函数,这是一个引用 当前对象 - 其对象 正在调用方法或构造函数。 你可以参考任何一个成员 实例中的当前对象 使用此方法或构造函数
private String grade;
public void setGrade(String grade) {
this.grade = grade
}
public String getGrade() {
return this.grade;
}
您也可以使用它来设置方法的通用参数
public <T> T doStaf(T t) {
//method body
return t;
}
public void doStaff2() {
String s = this.<String>doStaff("STRING");
}
ps格式化在代码块中不起作用
答案 4 :(得分:0)
我会解决的事情数量。
更改
String set_Grade(String e_Grade) { this.Grade = e_Grade; }
要
public void set_Grade(String e_Grade)
{
this.Grade=e_Grade; //also fix the variable name to start with lower case like grade.. followed by convention
}
在以下构造函数中应用它以防止歧义。
public Employee(int e_no,String e_name,double e_sal) {
this.emp_no = e_no;
this.emp_name = e_name;
this.emp_sal = e_sal;
}
答案 5 :(得分:0)
“set_Grade”方法没有返回“String”,因此编译器不喜欢它。
这种方法被称为“setter”或“mutator”(与“getter”或“accessor”相对)。大多数setter方法都不返回值,因此返回类型应为“void”。因此,将“String”替换为“void”将允许您的代码进行编译。
另一方面,Java编码约定规定了如何命名方法的最佳实践规则。所以你的方法应该真的命名为:
void setGrade(....)
SP