標籤:style blog color java 使用 strong ar div
一、繼承
1.繼承的概念
繼承可以解決代碼複用,讓我們的編程更加靠近人類思維。當多個類存在相同的屬性(變數)和方法時,可以從這些類中抽象出父類,在父類中定義這些相同的屬性和方法,所有的子類不需要重新定義這些屬性和方法,只需要通過extends語句來聲明繼承父類。文法如下:
class 子類 extends 父類
這樣,子類就會自動擁有父類定義的某些屬性和方法。另外,並不是父類的所有屬性、方法都可以被子類繼承。父類的public修飾符的屬性和方法,protected修飾符的屬性和方法,預設修飾符屬性和方法能夠被子類繼承,private修飾符的屬性和方法不能被子類繼承。
2.案例:
//功能:說明繼承的重要性package com.davperson;//包名public class Demo117 { public static void main(String[] args) { Pupil p1=new Pupil(); p1.printName(); }}//將學生的共有屬性提取,做一個父類class Stu{ //定義成員屬性 protected int age; public String name; public float fee; private String job;//私人將不被繼承 //編程中,如果你不希望子類繼承某個屬性或方法 //則將其聲明為private即可 public void printName(){ System.out.println("名字"+this.name); }}//小學生類class Pupil extends Stu{ //交學費 public void pay(float fee){ this.fee=fee; }}//幼兒class Pre extends Pupil{ //交學費 public void pay(float fee){ this.fee=fee*1.5f; }}//中學生類class MiddleStu extends Stu{ //交學費 public void pay(float fee){ this.fee=fee*0.8f; }}//大學生類class ColStu extends Stu{ //交學費 public void pay(float fee){ this.fee=fee*0.1f; }}
3.繼承--注意事項
1、子類最多隻能繼承一個父類(指直接繼承)
2、java所有類都是Object類的子類 (所有的子類都可以逐級繼承,例:爺->父->子->孫)
3、JDK6中有202個包3777個類、介面、異常、枚舉、注釋和錯誤
4、在做開發的時候,強烈建議大家多查jdk協助文檔
5、在使用類時,實在不知道怎麼辦,多使用搜尋引擎
至此,關於類的定義又可以跟進一步得到完善:
package 包名;class 類名 extends 父類{ 成員變數; 構造方法; 成員方法;}
二、方法重載和方法覆蓋
在講解多態前,必須講解方法重載(overload)和方法覆蓋(override)。
1.方法重載(overload)
簡單的說:方法重載就是在類的同一種功能的多種實現方式,到底採用哪種方式,取決於調用者給出的參數。
案例:
/* 方法重載(overload)getMax 寫一個類(Abc),編寫方法可以接收兩個整數,返回兩個數中較大的數[Demo119.java]*/public class Demo119{ public static void main(String []args){ Abc2 abc1=new Abc2(); System.out.println(abc1.getMax(12,14)); System.out.println(abc1.getMax(24f,20f)); }}class Abc{ //返回較大的整數 public int getMax(int i,int j){ if(i>j){ return i; }else{ return j; } } //返回較大的float類型數 public float getMax(float a,float b){ if(a>b){ return a; }else{ return b; } }
關於方法重載的更多說明:
1、方法名相同
2、方法的參數類型,個數,順序至少有一項不同
3、方法傳回型別可以不同(只是傳回型別不一樣,不能構成重載)
4、方法的修飾符可以不同(只是控制存取修飾詞不同,不能構成重載)
2.方法覆蓋(override)
方法覆蓋就是子類有一個方法,和父類的某個方法的名稱、傳回型別、參數一樣,那麼我們就說子類的這個方法覆蓋了父類的那個方法。如下例Cat類中的cry方法就覆蓋了Animal類的cry方法。
//子類方法覆蓋父類方法[Demo120.java]public class Demo120{ public static void main(String []args){ //建立一隻貓 Cat cat1=new Cat(); cat1.cry(); Dog dog1=new Dog(); dog1.cry(); }}//動物類class Animal{ int age; String name; //都會叫 public void cry(){ System.out.println("我是動物,不知道怎麼叫"); }}//貓貓類class Cat extends Animal{ //覆蓋父類方法 public void cry(){ System.out.println("貓貓叫!"); }}//狗狗類class Dog extends Animal{ //覆蓋父類方法 public void cry(){ System.out.println("汪汪叫!"); }}
關於方法覆蓋的更多說明:
方法覆蓋有兩點一定要注意:
1、子類的方法的傳回型別,參數,方法名稱,要和父類的傳回型別,參數,方法名稱完全一樣,否則編譯出錯。
2、子類方法不能縮小父類方法的存取權限。