一、普通類
1、類的格式
2、Java構造方法的特點
- 構造方法必須具備和所在類相同的名字
- 構造方法沒有返回值類型,void也不能有
- 構造方法是在創建一個對象使用new操作符時調用,構造方法的作用是初始化對象。
- 類可以不定義構造方法,會在類中隱含定義一個方法體爲空的無參構造方法,稱爲默認構造方法,當且僅當類中沒有明確定義任何構造方法時纔會自動調用默認構造方法
二、父子類
1、java不許多重繼承,即允許從幾個類派生 出一個子類,只能單一繼承,通過extends關鍵字定義一個子類。多重繼承可以通過接口來實現。
2、父類的構造方法不會被子類繼承。當子類實例化時,不僅要初始化子類成員變量,也要初始化父類成員變量,初始化父類成員變量需要調用父類構造方法,子類使用super關鍵字調用父類構造方法。
super語法:
super();//調用父類的無參構造方法
super(parameters);//調用父類的有參構造方法
super語句必須放在子類構造方法的第一行(句)。如果沒有使用super語句,編譯器會自動地將super()作爲構造方法的第一條語句;
應用舉例如下:
說明:圖中①②均爲調用父類構造方法,③沒有使用super語句,編譯器會調用父類的默認構造方法,但是父類Person並沒有默認構造方法,因此該處會發生編譯錯誤。
super關鍵字可以調用父類的構造方法,調用父類的方法。
3、方法的重寫和重載
(1)方法重寫(覆蓋):子類從父類中繼承方法,有時子類需要修改父類中定義的方法,即需要在子類中使用和父類一樣的簽名以及一樣的返回類型來對方法進行定義。簡單說是子類方法與父類方法完全相同,即相同的方法名、相同的參數列表和相同的返回值,只是方法體不同,成爲子類覆蓋父類方法。
- 在子類覆蓋父類的方法是要注意子類方法不能縮小父類方法的訪問權限。
(2)方法重載:使用相同的名字但是不同的簽名來定義多個方法。
注意不同點:
- 方法的重寫發生在通過繼承而相關的不同類中;方法的重載可以發生在同一個類中,也可以發生在由於繼承而相關的不同類中。
- 方法的重寫具有相同的簽名和返回值類型;方法重載具有相同的名字,但是不同的參數列表。
(3)方法重寫和重載的判斷依據
- 如果方法名、參數和返回類型都一致,那麼可以說是子類的方法覆蓋了父類的方法。
- 如果方法同名,參數個數或類型不同,這時無需看返回類型,屬於重載。
應用舉例:
圖a)爲方法的重寫,類A中的方法p(doube i)重寫了B類中定義的相同的方法;圖b)中,類A中有兩個重載方法p(double i)和p(int i)。
同時注意運行結果的不同,運行a中的Test類時,a.p(10),a.p(10.0)調用的都是定義在類A中的p(double i)方法,輸出的結果都爲10.0;運行b中的Test類時,a.p(10)調用類A中定義的p(int i)方法,顯示輸出10,而a.p(10)調用定義在類B中定義的p(double i)方法,輸出20.0。
三、抽象類
1、抽象類:抽象類與常規類很像,但是不能使用new操作符創建它的實例,抽象方法只能定義而沒有實現,它的實現由子類提供。一個包含抽象方法的類必須聲明爲抽象類。
2、抽象類注意點:
- 抽象方法不能包含在非抽象類中。如果抽象父類的子類不能實現所有的抽象方法,那麼子類必須定義爲抽象的。即在抽象類擴展的非抽象子類中,必須實現所有的方法。
- 抽象方法是非靜態的。抽象類不能用new來初始化。
- 包含抽象方法的類必須是抽象的,但是可以定義一個包含抽象方法的抽象類。
- 即使子類的父類是具體的,這個子類也可以是抽象的。
3、語法結構
修飾符 abstrct 抽象類名{
}
應用舉例:
public abstract class Employee //抽象類
{
private String name;
private String address;
private int number;
public Employee(String name, String address, int number) //構造方法
{
System.out.println("Constructing an Employee");
this.name = name;
this.address = address;
this.number = number;
}
public double computePay()
{
System.out.println("Inside Employee computePay");
return 0.0;
}
public void mailCheck()
{
System.out.println("Mailing a check to " + this.name
+ " " + this.address);
}
}
繼承抽象類
public class Salary extends Employee
{
private double salary; //Annual salary
public Salary(String name, String address, int number, double
salary)
{
super(name, address, number);
setSalary(salary);
}
public void mailCheck()
{
System.out.println("Within mailCheck of Salary class ");
System.out.println("Mailing check to " + getName()
+ " with salary " + salary);
}
public double getSalary()
{
return salary;
}
}
四、接口
1、接口:接口比類更加抽象,接口中的所有的方法都是抽象的。
2、接口與抽象類的不同點:
3、語法結構
修飾符 interface 接口名{
}
修飾符省略是默認訪問級別。
舉例:
public interface Figure{ //interface前面的修飾符是public或省略
String name ="123";//靜態成員變量 省略public static final
void onDraw(); //抽象方法 省略public
}
接口中的成員變量都是靜態成員變量,省略了public static final修飾符。
實現接口:實現接口使用implements關鍵字。