"抽象类是一种不能被实例化的类,它用于定义一个共性的概念,具体的实现由子类来完成。抽象类可以包含抽象方法和具体方法,抽象方法只有声明而没有实现,需要由子类来实现。\n\n继承是面向对象的重要特性,它允许一个类继承另一个类的属性和方法,从而实现代码的复用。子类可以继承父类的成员变量和方法,并可以通过重写方法来改变父类的行为。\n\n封装是将数据和操作数据的方法封装在一起,对外部只暴露必要的接口,隐藏内部的实现细节。通过封装,可以提高代码的可维护性和安全性。\n\n构造器是类的特殊方法,用于创建对象时初始化对象的成员变量。构造器的名称与类名相同,没有返回值类型。\n\n接口是一种抽象类型,它定义了一组方法的签名,但没有具体的实现。一个类可以实现多个接口,从而具备多个接口定义的方法。接口可以用于实现多态。\n\n下面是根据题目要求定义的代码:\n\njava\n// 抽象类 Role\npublic abstract class Role {\n private String name;\n private int age;\n private String gender;\n\n public Role() {\n System.out.println(\"调用了无参构造方法\");\n }\n\n public Role(String name, int age, String gender) {\n this.name = name;\n this.age = age;\n this.gender = gender;\n System.out.println(\"调用了有参构造方法\");\n }\n\n public String getName() {\n return name;\n }\n\n public void setName(String name) {\n this.name = name;\n }\n\n public int getAge() {\n return age;\n }\n\n public void setAge(int age) {\n this.age = age;\n }\n\n public String getGender() {\n return gender;\n }\n\n public void setGender(String gender) {\n this.gender = gender;\n }\n\n public abstract void play();\n}\n\n\n// Employee 类继承 Role 类\npublic class Employee extends Role {\n private int salary;\n private static int ID;\n\n public Employee() {\n super();\n System.out.println(\"调用了 Employee 的无参构造方法\");\n }\n\n public Employee(String name, int age, String gender, int salary) {\n super(name, age, gender);\n this.salary = salary;\n System.out.println(\"调用了 Employee 的有参构造方法\");\n }\n\n public int getSalary() {\n return salary;\n }\n\n public void setSalary(int salary) {\n this.salary = salary;\n }\n\n public static int getID() {\n return ID;\n }\n\n public static void setID(int ID) {\n Employee.ID = ID;\n }\n\n @Override\n public void play() {\n System.out.println(\"Employee playing\");\n }\n\n public final void sing() {\n System.out.println(\"Employee singing\");\n }\n}\n\n\n// Manager 类继承 Employee 类\npublic class Manager extends Employee {\n private final String vehicle;\n\n public Manager() {\n super();\n this.vehicle = \"Car\";\n System.out.println(\"调用了 Manager 的无参构造方法\");\n }\n\n public Manager(String name, int age, String gender, int salary, String vehicle) {\n super(name, age, gender, salary);\n this.vehicle = vehicle;\n System.out.println(\"调用了 Manager 的有参构造方法\");\n }\n\n public String getVehicle() {\n return vehicle;\n }\n\n @Override\n public void play() {\n System.out.println(\"Manager playing\");\n }\n}\n\n\npublic class Main {\n public static void main(String[] args) {\n Role role = new Employee();\n role.play(); // Employee playing\n\n Employee employee = new Employee(\"John\", 30, \"Male\", 5000);\n employee.play(); // Employee playing\n employee.sing(); // Employee singing\n\n Manager manager = new Manager(\"Alice\", 35, \"Female\", 10000, \"Car\");\n manager.play(); // Manager playing\n manager.sing(); // Employee singing\n }\n}\n\n\n在main()方法中,我们创建了一个Role对象,由于Role是抽象类,不能直接实例化,所以我们实例化了一个Employee对象,然后调用了play()方法。接下来,我们创建了一个Employee对象,调用了play()方法和sing()方法。最后,我们创建了一个Manager对象,调用了play()方法和sing()方法。注意,由于sing()方法在Employee中被声明为final,所以在Manager中不能被重写。

Java抽象类、继承和封装:Role、Employee和Manager类的示例

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

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