Java语言学习day24--7月30日
###17创建子类对象过程的细节
	* A 创建子类对象过程的细节
	* 如果子类的构造方法第一行写了this调用了本类其他构造方法,那么super调用父类的语句还有吗?
	* 这时是没有的,因为this()或者super(),只能定义在构造方法的第一行,因为初始化动作要先执行。
	* 父类构造方法中是否有隐式的super呢?
	* 也是有的。记住:只要是构造方法默认第一行都是super();
	* 父类的父类是谁呢?super调用的到底是谁的构造方法呢?
	* Java体系在设计,定义了一个所有对象的父类Object
	* 注意:
		类中的构造方法默认第一行都有隐式的super()语句,在访问父类中的空参数构造方法。所以父类的构造方法既可以给自己的对象初始化,也可以给自己的子类对象初始化。
		如果默认的隐式super()语句在父类中没有对应的构造方法,那么必须在构造方法中通过this或者super的形式明确要调用的构造方法。
###18super的应用
	 * A: 练习:描述学生和工人这两个类,将他们的共性name和age抽取出来存放在父类中,并提供相应的get和set方法,同时需要在创建学生和工人对象就必须明确姓名和年龄
	 * 案例:
		//定义Person类,将Student和Worker共性抽取出来
		class Person {
			private String name;
			private int age;
			public Person(String name, int age) {
				// super();
				this.name = name;
				this.age = age;
			}
			public String getName() {
				return name;
			}
			public void setName(String name) {
				this.name = name;
			}
			public int getAge() {
				return age;
			}
			public void setAge(int age) {
				this.age = age;
			}
		}
		class Student extends Person {
			// Student类的构造方法
			Student(String name, int age) {
				// 使用super关键字调用父类构造方法,进行相应的初始化动作
				super(name, age);
			}
			public void study() {// Studnet中特有的方法
				System.out.println(this.getName() + "同学在学习");
			}
		}
		class Worker extends Person {
			Worker(String name, int age) {
				// 使用super关键字调用父类构造方法,进行相应的初始化动作
				super(name, age);
			}
			public void work() {// Worker 中特有的方法
				System.out.println(this.getName() + "工人在工作");
			}
		}
		public class Test {
			public static void main(String[] args) {
				Student stu = new Student("小明",23);
		stu.study();
				
		Worker w = new Worker("小李",45);
		w.work();
			}
		}
###19完整员工案例分析
	 * A: 项目介绍
		某IT公司有多名员工,按照员工负责的工作不同,进行了部门的划分(研发部员工、维护部员工)。研发部根据所需研发的内容不同,又分为JavaEE工程师、Android工程师;维护部根据所需维护的内容不同,又分为网络维护工程师、硬件维护工程师。
		公司的每名员工都有他们自己的员工编号、姓名,并要做它们所负责的工作。
		工作内容
		JavaEE工程师:员工号为xxx的 xxx员工,正在研发淘宝网站
		Android工程师:员工号为xxx的 xxx员工,正在研发淘宝手机客户端软件
		网络维护工程师:员工号为xxx的 xxx员工,正在检查网络是否畅通
		硬件维护工程师:员工号为xxx的 xxx员工,正在修复打印机
		请根据描述,完成员工体系中所有类的定义,并指定类之间的继承关系。进行XX工程师类的对象创建,完成工作方法的调用。
	* B: 案例分析
		根据上述部门的描述,得出如下的员工体系图
	 
		根据员工信息的描述,确定每个员工都有员工编号、姓名、要进行工作。则,把这些共同的属性与功能抽取到父类中(员工类),关于工作的内容由具体的工程师来进行指定。
		工作内容
		JavaEE工程师:员工号为xxx的 xxx员工,正在研发淘宝网站
		Android工程师:员工号为xxx的 xxx员工,正在研发淘宝手机客户端软件
		网络维护工程师:员工号为xxx的 xxx员工,正在检查网络是否畅通
		硬件维护工程师:员工号为xxx的 xxx员工,正在修复打印机
		创建JavaEE工程师对象,完成工作方法的调用
###20案例代码实现
	 * A:定义员工类(抽象类)
		public abstract class Employee {
			private String id;// 员工编号
			private String name; // 员工姓名
			
			//空参数构造方法
			public Employee() {
				super();
			}
			//有参数构造方法
			public Employee(String id, String name) {
				super();
				this.id = id;
				this.name = name;
			}
			public String getId() {
				return id;
			}
			public void setId(String id) {
				this.id = id;
			}
			public String getName() {
				return name;
			}
			public void setName(String name) {
				this.name = name;
			}
			//工作方法(抽象方法)
			public abstract void work(); 
		}
		
		* B :	定义研发部员工类Developer 继承 员工类Employee
		public abstract class Developer extends Employee {
			//空参数构造方法
			public Developer() {
				super();
			}
			//有参数构造方法
			public Developer(String id, String name) {
				super(id, name);
			}
		}
		
		* C:	定义维护部员工类Maintainer 继承 员工类Employee
		public abstract class Maintainer extends Employee {
			//空参数构造方法
			public Maintainer() {
				super();
			}
			//有参数构造方法
			public Maintainer(String id, String name) {
				super(id, name);
			}
		}
		
		* D:	定义JavaEE工程师 继承 研发部员工类,重写工作方法
		public class JavaEE extends Developer {
			//空参数构造方法
			public JavaEE() {
				super();
			}
			//有参数构造方法
			public JavaEE(String id, String name) {
				super(id, name);
			}
		
			@Override
			public void work() {
				System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在研发淘宝网站");
			}
		}
		
		* E:	定义Android工程师 继承 研发部员工类,重写工作方法
		public class Android extends Developer {
			//空参数构造方法
			public Android() {
				super();
			}
			//有参数构造方法
			public Android(String id, String name) {
				super(id, name);
			}
		
			@Override
			public void work() {
				System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在研发淘宝手机客户端软件");
			}
		}
		
		* F:	定义Network网络维护工程师 继承 维护部员工类,重写工作方法
		public class Network extends Maintainer {
			//空参数构造方法
			public Network() {
				super();
			}
			//有参数构造方法
			public Network(String id, String name) {
				super(id, name);
			}
		
			@Override
			public void work() {
				System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在检查网络是否畅通");
			}
		}
		
		* G:	定义Hardware硬件维护工程师 继承 维护部员工类,重写工作方法
		public class Hardware extends Maintainer {
			//空参数构造方法
			public Hardware() {
				super();
			}
			//有参数构造方法
			public Hardware(String id, String name) {
				super(id, name);
			}
		
			@Override
			public void work() {
				System.out.println("员工号为 " + getId() + " 的 " + getName() + " 员工,正在修复打印机");
			}
		}
		
		* H:	在测试类中,创建JavaEE工程师对象,完成工作方法的调用
		public class Test {
			public static void main(String[] args) {
				//创建JavaEE工程师员工对象,该员工的编号000015,员工的姓名 小明
				JavaEE ee = new JavaEE("000015", "小明");
				//调用该员工的工作方法
				ee.work();
			}
		}
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号