abstract方法格式
时间: 2023-10-09 08:13:02 浏览: 128
在Java中,abstract方法是一种没有实现体的方法声明,它只包含方法的返回类型、名称和参数列表。以下是abstract方法的格式:
[访问修饰符] abstract 返回类型 方法名(参数列表);
其中:
- 访问修饰符:可以是public、protected或默认访问修饰符(即不写修饰符),表示方法的可见性范围。
- abstract关键字:用于表示该方法是抽象方法,没有具体的实现。
- 返回类型:方法执行完后返回的数据类型,可以是任何有效的数据类型,也可以是一个自定义类。
- 方法名:标识方法的名称,应该遵循命名规范。
- 参数列表:方法接收的参数,可以有零个或多个参数,每个参数由其数据类型和名称组成。
需要注意的是,抽象方法只能存在于抽象类或接口中,并且不能在同一个类中同时使用abstract和private、static、final或native等关键字修饰。同时,在抽象类中声明的抽象方法必须在子类中被实现或者子类也声明为抽象类。
相关问题
设计一个abstract类,类名为Employee。该类有成员变量name,有构造方法,有一个抽象方法,格式如下: public abstract double earning(); (2)定义Employee的子类YearWorker和MonthWorker。YearWorker对象按年领薪水,MonthWorker对象按月领薪水。子类重写earning方法,给出各自领取报酬的具体值(自编,YearWorker类中返回年薪,Monthworker类中返回月薪) (3)有一个Company类,该类使用
Employee类的对象作为成员变量,有一个方法用于计算公司支付给所有员工的总工资。该方法的格式如下:
public double totalSalary(Employee[] employees) {
double total = 0.0;
for (Employee employee : employees) {
total += employee.earning();
}
return total;
}
下面是实现以上需求的代码:
abstract class Employee {
protected String name;
public Employee(String name) {
this.name = name;
}
public abstract double earning();
}
class YearWorker extends Employee {
public YearWorker(String name) {
super(name);
}
@Override
public double earning() {
return 120000.0; // 假设年薪为12万
}
}
class MonthWorker extends Employee {
public MonthWorker(String name) {
super(name);
}
@Override
public double earning() {
return 10000.0; // 假设月薪为1万
}
}
class Company {
public double totalSalary(Employee[] employees) {
double total = 0.0;
for (Employee employee : employees) {
total += employee.earning();
}
return total;
}
}
// 测试代码
public static void main(String[] args) {
Employee[] employees = new Employee[4];
employees[0] = new YearWorker("张三");
employees[1] = new YearWorker("李四");
employees[2] = new MonthWorker("王五");
employees[3] = new MonthWorker("赵六");
Company company = new Company();
System.out.println("公司总工资:" + company.totalSalary(employees));
}
观察下面的代码片段,描述正确的是( ) public interface Inter{ int number;① public void method();② } ①处,该变量是定义在成员变量的位置,因此具有默认初始化值0 ①处接口中的成员变量,前面默认有public static final 修饰,即使不写,也默认添加 ②处的方法定义格式是错误的,少了一个abstract ②处的方法可以直接添加{}方法体,并在这个方法体中对变量number赋值
正确的描述是:①处,该变量是定义在成员变量的位置,因此具有默认初始化值0。 ②处的方法定义格式是错误的,少了一个abstract。
接口中的成员变量默认添加了public static final修饰,但是接口中的成员变量必须显式初始化,否则会报错。而在代码片段中,成员变量number没有进行初始化,所以会编译错误。
接口中的方法必须使用abstract关键字进行声明,所以②处的方法定义格式是错误的,缺少了abstract关键字。
接口中的方法不能直接添加方法体,只能进行方法的声明,具体的方法实现需要在实现该接口的类中进行。所以不能在②处的方法中直接添加{}方法体,并在这个方法体中对变量number赋值。
阅读全文