繼承+多型+抽象類

Pop_Rain發表於2017-06-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.00
brain, a student majoring inEconomics

相關文章