zoukankan      html  css  js  c++  java
  • java 继承之间方法的时候(计算出经理与员工之间公司差别)

    自己检讨下:刚开始看这个的时候,我觉得挺简单的,但是让我自己写的时候我确实不会写,最大的缺点就是好高骛远,偷懒,基础不会就想着上天。

      希望别的朋友别要有这样的想法,再简单的例子,如果你不亲自敲下,在揣摩下,你敢说日后让你写这样的代码,你能写出来吗,我不是天才,但我坚信勤奋可以造就天才。

    首先:分析下员工与经理之间的相同点,就是员工与经理都有姓名,工资和日期(其实我感觉这个日期不必要有)这个三个属性,经理比员工多的就是经理又项目奖金

       然后可以把相同的信息抽出来,实例一个Employee类 ,这个类中有L:姓名,工资和日期 这三个属性

    普通员工类:

    public class Employee {
      private String name;
      private double salary;
      private Date hireDay;

      public Employee(String name, double salary, int year, int month, int day) {
        this.name = name;
        this.salary = salary;
        GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
        hireDay = calendar.getTime();
      }

      public String getName() {
        return name;
      }

      public double getSalary() {
        return salary;
      }

      public Date getHireDay() {
        return hireDay;
      }

    }

    经理类:

    在这里经理的类里边就比员工的多了一个奖金字段,其他的都一样,所以必须有一个对应Employee的构造器,并且在计算工资的时候,把奖金加上去

    这个类里边没有private double salary;这个属性,是因为Manager类使用到了extends这个关键字,继承了父类的属性和方法(除了private修改之外的所有)

    public class Manager extends Employee {
      public Manager(String name, double salary, int year, int month, int day) {
        super(name, salary, year, month, day);
        bonus = 0;
      }

      public double getSalary() {

        // 这里使用super.getSalart()===〉如果去掉super的话,那么会一直调用本身,直到堆栈溢出
        double baseSalary = super.getSalary();
        return baseSalary + bonus;
      }

      // 奖金
      private double bonus;

      public void setBonus(double bonus) {
        this.bonus = bonus;
      }
    }

    测试类:

    public class ManagerTest {
      public static void main(String[] args) {
        Manager boss = new Manager("LZ", 80000, 1990, 3, 15);
        boss.setBonus(5000);
        Employee[] staff = new Employee[3];
        staff[0] = boss;
        staff[1] = new Employee("lz", 50000, 2014, 2, 23);
        staff[2] = new Employee("lb", 40000, 2014, 1, 19);
        for (Employee e : staff) {
          System.out.println("name=" + e.getName() + ",salary="
            + e.getSalary());
        }
      }
    }

    结果:

    name=LZ,salary=85000.0
    name=lz,salary=50000.0
    name=lb,salary=40000.0

    注:这里边也涉及到了构造器的使用,大家先记着就是子类里边必须有对应父类构造器方法的参数存在,参数个数,以及参数类型

      还有就是super的出现的时候,一般指的是调用父类的方法。

  • 相关阅读:
    Eclipse常用快捷键
    Kali Linux安装Google中文输入法(只需5步)
    Kali Linux 更新源 操作完整版教程
    Oracle存储过程的异常处理
    Eclipse调试DEBUG时快速查看某个变量的值的快捷键、快速跳转到某行的快捷键
    oracle listagg和wm_concat函数
    ORACLE分页查询SQL语法——最高效的分页
    Mock拦截请求URL返回模板数据
    前端安全之XSS攻击及防御
    Sublime Text3注册码,亲测可用
  • 原文地址:https://www.cnblogs.com/love-you-girl/p/3865634.html
Copyright © 2011-2022 走看看