定义一个抽象的Role类 有姓名 年龄 性别等成员变量 1 要求尽可能隐藏所有变量能够私有就私有能够保护就不要公有 再通过GetXXX和SetXXX方法对各变量进行读写。具有一个抽象的play方法 该方法不返回任何值 同时至少定义两个构造方法。Role类中要体现出this的几种用法。2 从Role类派生出一个Employee类 该类具有Role类的所有成员 构造方法除外 并扩展 salary成员变
抽象类是一种不能被实例化的类,它用于定义一个共性的概念,具体的实现由子类来完成。抽象类可以包含抽象方法和具体方法,抽象方法只有声明而没有实现,需要由子类来实现。
继承是面向对象的重要特性,它允许一个类继承另一个类的属性和方法,从而实现代码的复用。子类可以继承父类的成员变量和方法,并可以通过重写方法来改变父类的行为。
封装是将数据和操作数据的方法封装在一起,对外部只暴露必要的接口,隐藏内部的实现细节。通过封装,可以提高代码的可维护性和安全性。
构造器是类的特殊方法,用于创建对象时初始化对象的成员变量。构造器的名称与类名相同,没有返回值类型。
接口是一种抽象类型,它定义了一组方法的签名,但没有具体的实现。一个类可以实现多个接口,从而具备多个接口定义的方法。接口可以用于实现多态。
下面是根据题目要求定义的代码:
// 抽象类 Role
public abstract class Role {
private String name;
private int age;
private String gender;
public Role() {
System.out.println("调用了无参构造方法");
}
public Role(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
System.out.println("调用了有参构造方法");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public abstract void play();
}
// Employee 类继承 Role 类
public class Employee extends Role {
private int salary;
private static int ID;
public Employee() {
super();
System.out.println("调用了 Employee 的无参构造方法");
}
public Employee(String name, int age, String gender, int salary) {
super(name, age, gender);
this.salary = salary;
System.out.println("调用了 Employee 的有参构造方法");
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public static int getID() {
return ID;
}
public static void setID(int ID) {
Employee.ID = ID;
}
@Override
public void play() {
System.out.println("Employee playing");
}
public final void sing() {
System.out.println("Employee singing");
}
}
// Manager 类继承 Employee 类
public class Manager extends Employee {
private final String vehicle;
public Manager() {
super();
this.vehicle = "Car";
System.out.println("调用了 Manager 的无参构造方法");
}
public Manager(String name, int age, String gender, int salary, String vehicle) {
super(name, age, gender, salary);
this.vehicle = vehicle;
System.out.println("调用了 Manager 的有参构造方法");
}
public String getVehicle() {
return vehicle;
}
@Override
public void play() {
System.out.println("Manager playing");
}
}
public class Main {
public static void main(String[] args) {
Role role = new Employee();
role.play(); // Employee playing
Employee employee = new Employee("John", 30, "Male", 5000);
employee.play(); // Employee playing
employee.sing(); // Employee singing
Manager manager = new Manager("Alice", 35, "Female", 10000, "Car");
manager.play(); // Manager playing
manager.sing(); // Employee singing
}
}
在main()方法中,我们创建了一个Role对象,由于Role是抽象类,不能直接实例化,所以我们实例化了一个Employee对象,然后调用了play()方法。接下来,我们创建了一个Employee对象,调用了play()方法和sing()方法。最后,我们创建了一个Manager对象,调用了play()方法和sing()方法。注意,由于sing()方法在Employee中被声明为final,所以在Manager中不能被重写
原文地址: http://www.cveoy.top/t/topic/ibVw 著作权归作者所有。请勿转载和采集!