每日一学(9)——完整的员工类

案例介绍:

某IT公司有多名员工,按照员工负责的工作不同,进行了部门的划分(研发部员工、维护部员工)。研发部根据所需研发的内容不同,又分为JavaEE工程师、Android工程师;维护部根据所需维护的内容不同,又分为网络维护工程师、硬件维护工程师。

公司的每名员工都有他们自己的员工编号、姓名,并要做它们所负责的工作。

 工作内容:

1、JavaEE工程师:员工号为xxx的 xxx员工,正在研发淘宝网站

2、 Android工程师:员工号为xxx的 xxx员工,正在研发淘宝手机客户端软件

3、网络维护工程师:员工号为xxx的 xxx员工,正在检查网络是否畅通

4、硬件维护工程师:员工号为xxx的 xxx员工,正在修复打印机

实现的功能点:

1、都是父类和子类的继承关系、四个子类都有共同的属性(name和ID)和方法(work)

2、name和ID需要进行封装private

3、父类的方法employee中的work需要抽象,因为每个员工实现的功能是不同的

4、类:一个父类employee、两个子类developer和maintainer,每个子类下面分别又有两个子类,developer的子类是Android和JavaEE,maintainer的子类是Hardware和Network。

5、对所有类的共性进行提取,共性name和ID,两个属性定义在Employee类中,其他的类通过构造方法,调用这两个属性

代码实现:

package day12;
/*
 * 定义员工类
 * 内容都是所有子类的共性抽取
 *   属性:姓名  工号
 *   方法:工作
 */

public abstract class Employee { 
 private String name;
  private String ID;

  public abstract void work();

  public Employee(String name,String ID){ //构造方法
  this.name=name;
  this.ID=ID;
  }
  public void getName(String name){
  this.name=name;
  }
  public void getID(String ID){
  this.ID=ID;
}
  public String getName(){
  return name;
  }
  public String getID(){
  return ID;
  }
}

package day12;
/*
 * 定义研发员工类
 */

public abstract class Develper extends Employee { 

public Develper(String name,String ID){//构造方法
   super(name,ID);
   }
   public abstract void work();
}

package day12;
/*
 * 定义维护员工类,属于员工中的一种
 * 继承员工类
 * 抽象类maintainer,可以给员工定义自己的属性
 */

public abstract class Maintainer extends Employee{

public Maintainer(String name,String ID){//构造方法
  super(name,ID);
  }
  public abstract void work();
}

package day12;
/*
 * 研发部员工的一种,继承研发部
 */
public  class JavaEE extends Develper{
public JavaEE(String name,String ID){ //构造方法
super(name,ID);
}
     public  void work(){
  System.out.println("员工号为"+super.getID()+"的"+super.getName()+"员工"+"正在研发淘宝网站");
  }

}

package day12;
/*
 * 研发部员工的一种,继承研发部
 */

public  class Android extends Develper{
public Android(String name,String ID){//构造方法
  super(name,ID);
  }
  public  void work(){
  System.out.println("员工号为"+super.getID()+"的"+super.getName()+"员工"+"正在研发淘宝手机客户端软件");
  }
}

此处省略另外两个类

package day12;
/*
 * 测试类
 */

public class Test {
  public static void main(String[] args) {
//创建JavaEE工程师的对象
  JavaEE p1=new JavaEE("张三","001");
  p1.work();
//创建Android工程师工程师的对象
  Android p2=new Android("李四","002");
  p2.work();
}

}

小总结:

构造方法的格式:修饰符 类名 (参数列表) {}

构造方法的特点:方法名与类名相同、没有返回值,也没有返回值类型,连void也没有

super: 指的是父类的存储空间(理解为父类的引用)

调用父类的成员变量:super.成员变量;

调用父类的构造方法:super(参数);

调用方法的成员方法:super.成员方法();

继承中的构造方法注意事项:

1,如果我们手动给出了构造方法,编译器不会在给我们提供默认的空参数构造方法

     如果我们没写任何的构造方法,编译器提供给我们一个空参数构造方法

2, 在构造方法中,默认的第一条语句为 super();

    它是用来访问父类中的空参数构造方法,进行父类成员的初始化操作

3,当父类中没有空参数构造方法的时候,怎么办?

    a:通过 super(参数) 访问父类有参数的构造方法

    b:通过 this(参数) 访问本类中其他构造方法

    注意:[本类中的其他构造方法已经能够正常访问父类构造方法]

4,super(参数) 与 this(参数) 不能同时在构造方法中存在










猜你喜欢

转载自blog.csdn.net/weixin_42517286/article/details/80973952