java_抽象类实例:员工工作
/* 定义⼀个抽象的“Person"类,有姓名,年龄,性别等成员变量,要求 1、尽可能隐藏所有变量(能够私有就私有,能够保护就不要公有),再通过GetXXX()和SetXXX()⽅法对各变量进⾏读写。 2、具有⼀个抽象的work()⽅法,该⽅法不返回任何值,输出“某某在工作” 3、同时⾄少定义两个构造⽅法,有参和无参构造方法 4、Person类中要使用this 从Person类派⽣出⼀个"Employee"类 1、该类具有Person类的所有成员(构造⽅法除外),并扩展成员变量,同时增加⼀个成员变量“职⼯编号(ID) ”。 2、同样要有⾄少两个构造⽅法,要使用his和super,还要求覆盖work()⽅法。 3、并提供⼀个final discuss()⽅法,输出“某某在讨论” "Manager"类继承"Employee"类 2、有⼀个final成员变量"vehicle" 在main()⽅法中创建Manager和Employee对象,并测试这些对象的⽅法 每个类有getInfo()方法输出对象的姓名、年龄、性别,Employee对象多输出工号,Manager对象又多输出座驾(vehicle)信息 执行以下语句时 public class Demo { public static void main(String[] args) { Manager mgr=new Manager("韩寒",28, 7788); // mgr.discuss(); // mgr.getInfo(); Employee em=new Employee("王建新",25,5247); em.setAge(27); em.setSex("男"); em.work(); em.discuss(); em.getInfo(); mgr.setSex("男"); mgr.discuss(); mgr.getInfo(); 输出: 执行Person类有参构造方法 执行Employee类有参构造方法 执行Manager类有参构造方法 执行Person类有参构造方法 执行Employee类有参构造方法 王建新在工作 王建新在讨论 name:王建新 age:27 sex:男 id:5247 韩寒在讨论 name:韩寒 age:28 sex:男 id:7788 座驾:奔驰车 */ abstract class Person { String name; int age; String sex; abstract void work();// 重写时实现为"xxx"在工作 //abstract void getInfo();//获取信息 void getInfo() { System.out.print("name: "+name+" age: "+age+" sex: "+sex+" "); } Person() { System.out.println("执行Person类无参构造方法"); } Person(String str, int age_) { System.out.println("执行Person类有参构造方法"); this.name = str; this.age = age_; } public String getName() { return name; }; public void setName(String name) { this.name = name;// 使用this可以区分形参和成员变量同名的情况下谁是谁; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } } class Employee extends Person { /* 先继承Person的成员 */ private int ID; Employee() { System.out.println("执行Employee类的无参构造函数"); } Employee(String str, int age_, int ID_) { super(str, age_);// 类似C++中构造函数后面跟着的初始化参数列表,将用于初始化的参数传给基类的构造函数 System.out.println("执行Employee类的有参构造函数"); this.ID = ID_; } // 覆盖/重写抽象类中的work(); void work() { System.out.println(name + "在工作");// name是类的成员变量,无须再传参(String name) } // 添加了子类所独有的方法discuss() final void discuss() { System.out.println(name + "在讨论"); } void getInfo(){ super.getInfo(); System.out.println("id: "+ID); } } class Manager extends Employee { final String vehicle; //constructor of Mangager class Manager(String name,int age,int ID) { super(name,age,ID); vehicle="奔驰车"; } void getInfo(){ super.getInfo();//super表示父类的引用 System.out.println(" 座驾: "+vehicle); } } public class Demo { public static void main(String[] args) { Manager mgr = new Manager("韩寒", 28, 7788); // mgr.discuss(); // mgr.getInfo(); Employee em = new Employee("王建新", 25, 5247); em.setAge(27); em.setSex("男"); em.work(); em.discuss(); em.getInfo(); mgr.setSex("男"); mgr.discuss(); mgr.getInfo(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了