继承+多态+抽象类

来源:互联网 发布:玩客云抢购软件3.0 编辑:程序博客网 时间:2024/06/16 02:28

继承

1. “is-a”关系是继承的一个明显特征

2. java中所有的继承都是公有继承,而没有c++中的私有继承和保护继承

3. java不支持多继承,多继承功能的实现方式用接口来实现

4. 阻止继承:final修饰过的类或方法,不可继承

多态

1. java中,对象变量是多态的。如下:Manager is-a Employee

Employee m = new Manager("brain", 3000); //ok 对象变量是多态的

一个Employee变量既可以引用一个Employee类对象,也可以引用一个Employee类的任何一个子类的对象(Manager),但是这样做后就不可以再用继承子类特有的方法,只能看做是超类Employee的对象了

2. 动态绑定

弄清调用对象方法的执行过程十分重要,如下图所示


抽象类

1. 包含一个或多个抽象方法的类本身必须声明为抽象的;抽象类也可以包含具体数据和具体方法
abstract class Person //抽象类{private String name; //具体数据public Person(String n) //构造器{name = n;}public abstract String getDescription(); //抽象方法public String getName() //具体方法 {return name;}}
抽象类的抽象方法具体在子类中实现,在接口中可以看到更多的抽象方法
抽象类不能被实例化。可以定义一个抽象类的对象变量,但是只能引用非抽象子类的对象,如下:
Person p = new Student("Brain", "Economics");
抽象类助理解示例程序:
package test;import java.util.*;public class Test{public static void main(String args[]){Person[] people = new Person[2];people[0] = new Employee("Bob", 10000, 2017, 6, 28);people[1] = new Student("brain", "Economics");for(Person p: people){System.out.println(p.getName() + ", " + p.getDescription());}}}abstract class Person{private String name;public Person(String n){name = n;}public abstract String getDescription();public String getName(){return name;}}class Student extends Person{private String major;public Student(String n, String m){super(n);major = m;}public String getDescription(){return "a student majoring in" + major;}}class Employee extends Person{private double salary;private Date hireDay;public Employee(String n, double s, int year, int month, int day){super(n);GregorianCalendar cal = new GregorianCalendar(year, month-1, day);hireDay = cal.getTime();}public String getDescription(){return String.format("an employee with a salary of $%.2f", salary);}public void raiseSalary(double percent){salary *= (1 + percent/100);}}
output:
Bob, an employee with a salary of $0.00brain, a student majoring inEconomics