抽象类是一种不能被实例化的类,它用于定义一个共性的概念,具体的实现由子类来完成。抽象类可以包含抽象方法和具体方法,抽象方法只有声明而没有实现,需要由子类来实现。

继承是面向对象的重要特性,它允许一个类继承另一个类的属性和方法,从而实现代码的复用。子类可以继承父类的成员变量和方法,并可以通过重写方法来改变父类的行为。

封装是将数据和操作数据的方法封装在一起,对外部只暴露必要的接口,隐藏内部的实现细节。通过封装,可以提高代码的可维护性和安全性。

构造器是类的特殊方法,用于创建对象时初始化对象的成员变量。构造器的名称与类名相同,没有返回值类型。

接口是一种抽象类型,它定义了一组方法的签名,但没有具体的实现。一个类可以实现多个接口,从而具备多个接口定义的方法。接口可以用于实现多态。

下面是根据题目要求定义的代码:

// 抽象类 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中不能被重写

定义一个抽象的Role类 有姓名 年龄 性别等成员变量 1 要求尽可能隐藏所有变量能够私有就私有能够保护就不要公有 再通过GetXXX和SetXXX方法对各变量进行读写。具有一个抽象的play方法 该方法不返回任何值 同时至少定义两个构造方法。Role类中要体现出this的几种用法。2 从Role类派生出一个Employee类 该类具有Role类的所有成员 构造方法除外 并扩展 salary成员变

原文地址: http://www.cveoy.top/t/topic/ibVw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录