1.多态 

  • 含义:父类的对象的创建有子类来完成
 1 public class A {
 2   String name = “刘秦”;
 3   public void m01() {
 4     System.out.println(“===刘秦===”);
 5   }
 6 }
 7 public class B extends A{
 8   String name = “扎古斯”;
 9   public void m01() {
10     System.out.println(“===扎古斯===”);
11   }  
12 
13   public static void main(String[] args) {
14 A a = new A(); //父类的对象创建由父类自己来完成
15 A a2 = new B(); //父类的对象创建由子类完成
16 
17 System.out.println(“a1.name = ” + a1.name); //都是输出A中属性name
18 System.out.println(“a2.name = ” + a2.name); //都是输出A中属性name
19 
20 a1.m01(); //输出A中m01方法
21 a2.m01(); //输出B中m01方法
22   }
23 }
  •  多态在应用中需要注意的环节
  1. 当出现子类和父类都定义了同名的属性名, 则父类的对象在创建过程中由子类完成那么在调用同名属性的时候,会输出父类中的属性名
  2. 当出现子类和父类都定义了同名的方法名(方法的重写)则父类的对象在创建过程中由子类完成那么在调用同名的方法名会输出子类中的方法

 

  •  方法覆盖(override),方法重载(overload
  1. 方法覆盖(重写):子类的方法名和父类完全一样, 方法中参数和父类中方法参数完全一样, 子类方法的返回类型和父类中方法的返回类型完全一样, 子类方法的访问修饰符权限一定不能比父类的访问修饰符的权限小
  2. 方法重载:子类的方法名和父类完全一样, 方法中参数不一样(参数类型和参数个数), 方法的返回类型不作要求, 方法的访问修饰符不作要求。(自身类中也可以定义方法的重载)

2.请计算员工的工资体系, 要求工资的计算方式 工资 = (基本工资 + 绩效工资) * 考评等级。使用多态的特点来设计这个程序

 

 1 /**
 2  * 通过Java中多态的设计思想来完成工资的计算
 3  * 1. 考虑试用期的员工工资
 4  * 2. 考虑不同岗位级别的员工工资
 5  * @author caleb
 6  *
 7  */
 8 public class EmployeeSample {
 9 
10     double jobLevel; //职位等级
11     double salary; //基本工资
12     double examLevel; //考评等级
13     
14     String name; //员工的名字
15     
16     public EmployeeSample(String name, double jobLevel, double salary, double examLevel) {
17         this.name = name;
18         this.jobLevel = jobLevel;
19         this.salary = salary;
20         this.examLevel = examLevel;
21     }
22     
23     /**
24      * 试用期的员工工资
25      */
26     public void sumSalary(double sale) {
27         System.out.println(name + " 员工工资 : " + (salary * sale));
28     }
29     
30     /**
31      * 正式员工的工资
32      */
33     public void sumSalary() {
34         System.out.println(name + " 员工工资 : " + (salary + jobLevel * salary) * examLevel);
35     }
36     
37     public static void main(String[] args) {
38         EmployeeSample 扎古斯 = new EmployeeSample("扎古斯", 0.3, 8000, 1);
39         扎古斯.sumSalary(); //正式员工的工资
40         
41         EmployeeSample 刘秦 = new EmployeeSample("刘秦", 0.1, 4000, 1);
42         刘秦.sumSalary(0.8); //试用期员工的工资
43     }
44     
45 }

 

posted on 2016-04-08 22:58  Oliver·Keene  阅读(140)  评论(0)    收藏  举报