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();

    }
}


你可能感兴趣的:(笔记)