编辑代码

class Ployparameter {
	public static void main(String[] args) {
        Ygong ygong = new Ygong("jack",3000);
        Jingli jingli = new Jingli("mary",5000,30000);
        Ployparameter pp = new Ployparameter();
        pp.showEmpannual(ygong);
        pp.showEmpannual(jingli);
        pp.tesWork(ygong);
        }
        //Employee,这是编译类型
        // e 指向 ygong,所以运行类型是Ygong,
        // e 也指向 Ejinyi,所以运行类型是Jingli
        public void showEmpannual(Employee e){
            System.out.println(e.getAnnual());
        }
        //向下转型操作,注意:方法写好要被调用在现实效果
        public void tesWork(Employee e){
            //判断运行类型是否Ygong
            if(e instanceof Ygong){
                //注意:向上转型是访问不到子类得特殊方法,要向下转型才能访问
                //把e转成Ygong赋给Ygong yuangong(Ygong ygong = new (Ygong)Employee e())
                //如果不转型Employee里面没有work或者manage方法
                ((Ygong)e).work();
            }else if(e instanceof Jingli){
                ((Jingli)e).manage();
            }else{
                System.out.println("你输入有误请检查");
            }
        }
	}

class Employee{
    private String name;
    private double salary;
    public Employee(String name,double salary){
        this.name = name;
        this.salary = salary;
    }
    public String getName(){
        return name;
    }
    public void setNam(String name){
        this.name = name;
    }
    public double getSalary(){
        return salary;
    }
    public void setSalary(double salary){
        this.salary = salary;
    }
    public double getAnnual(){
        return 12 * salary;
    }
}

class Ygong extends Employee{
    public Ygong(String name,double salary){
        super(name,salary);
    }
    public void work(){
        //因为name是私有的,你能直接获取,只能用get方法获取
        System.out.println("员工" + getName() + "正在工作");
    }
    public double getAnnual(){
        //如果没有其他属性添加,重名直接访问父类即可
        return super.getAnnual();
    }
}

class Jingli extends Employee{
    private double bonus;
    public Jingli(String name,double salary,double bonus){
        //形参如果父类有直接访问父类,没有要自己定义
        super(name,salary);
        this.bonus = bonus;
    }
    public double getBonus(){
        return bonus;
    }
    public void setBonus(double bonus){
        this.bonus = bonus;
    }
    public void manage(){
        System.out.println("经理" + getName() + "正在开会");
    }
    public double getAnnual(){
        return super.getAnnual() + bonus;
    }
}