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();
}
}
posted @   xuchaoxin1375  阅读(7)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示