標籤:基礎學習 多態 java
關於多態
1.在java程式語言中,物件變數是多態的。
2.不能講一個超類的引用賦給子類變數。
3.private方法,static方法,final方法或者構造器,那麼編譯器將可以準確的知道應該調用哪個方法,我們將這種調用方式稱為靜態繫結。
4.動態綁定有一個非常重要的特性:無需對現存的代碼進行修改,就可以對城鄉驚喜擴充。
5.在覆蓋一個方法的時候,子類方法不能低於超類方法的可見度。
6.不允許擴充的類被稱為final類。
7.如果將一個類聲明為final,只用其中的方法自動的成為final,而不包括域。
8.將一個值存入變數時,編譯器將檢查是否允許該操作。將一個子類的引用賦給一個超類變數,編譯器是允許的。但將一個超類的引用賦給一個子類變數,必須進行類型轉換,這樣才能夠通過運行時檢查。
9.只能在繼承層次內進行類型轉換,在將超類轉換成為子類前,應該使用instanceof進行檢查。
10.不會產生異常,只是返回false。之所以這樣處理是因為null沒有引用任何對象,當然也不會引用C類型的對象。
11.如果自下而上在類的繼承階層中上移,位於上層的類更具有通用性,甚至可能更加抽象。
12.為了提高程式的清晰度,包含一個或多個抽象方法的類本身必須被聲明為抽的。
13.除了抽象方法之外,抽象類別還可以包含具體資料和具體方法。
14.抽象類別方法充當著佔位的角色,他們的具體實現在子類中。
15.擴充抽象類別可以有兩種方法:一種是在子類中定義部分抽象方法或抽象方法也不定義,這樣就必須將子類也標記為抽象類別;另一種是定義全部的抽象方法,使其不抽象。
16.類即使不含抽象方法,也可以將類聲明為抽象類別。抽象類別不能執行個體化。但可以定義一個抽象類別的物件變數。
17.private僅對本類可見,public對所有類可見,protected對本包和所有子類可見,預設修飾符對本包可見。
執行個體程式:
測試類別
public class test001 {public static void main(String[] arge){Person[] people = new Person[2];people[0] = new Employee("worker",1000,1987,1,1);people[1] = new Student("boy","電腦");for(Person p : people){System.out.println(p.getName() + "," + p.getDescription());}}}
人類
public abstract class Person {public abstract String getDescription();private String name;public Person(String n){name = n;}public String getName(){return name;}}
僱員類
import java.util.*;public class Employee extends Person {private double salary;private Date hireDay;public Employee(String n,double s,int year,int month,int day){super(n);salary = s;GregorianCalendar gr = new GregorianCalendar(year,month - 1,day);hireDay = gr.getTime();}public double getSalary(){return salary;}public Date getHireDay(){return hireDay;}public String getDescription(){return String.format("一名工資為 %.2f的工人",salary);}public void raise(double p){double raise = salary * p / 100;salary += raise;}}
學生類
public class Student extends Person {private String major;public Student(String n,String m){super(n);major = m;}public String getDescription(){return "一名" + major +"專業的學生";}}
我的java學習筆記(8)關於多態