/* * 抽象類 * 抽象: * 面向對象的三大核心思想; * 封裝: 封裝,ppp是封裝的一部分 * 繼承; * 多態: 父類的引用指向子類的對象 * 引用: 是指一個引用型變量 * 有哪些變量? * 成員變量; * 構造方法的局部變量; * 普通方法的局部變量; * 立馬聲明立馬使用的變量; * 靜態變量; * 什么是抽象類? * 就是用abstract關鍵字修飾的類就叫抽象類; * 什么是抽象方法? * 沒有方法體的方法叫抽象方法,連{}都沒有;抽象方法必須在修飾符列表中加上abstract這個關鍵字修飾; * 繼承于抽象類的類: * 必須全部實現抽象類中的方法(就是加上方法體大括號),如果沒有全部實現,就必須加上abstract修飾,即他也是個抽象類; * 抽象類和抽象方法的關系: * 含有抽象方法的類一定是抽象類; * 抽象類卻不一定有抽象方法; * 抽象類沒有抽象方法的目的: * 為了讓這個抽象類不能被實例化; * 抽象方法的性質: * 1 抽象方法不能被實例化(還有一種方法也不能讓類實例化,那就是構造方法私有化,PRivate) * 2 雖然抽象方法不能被實例化,但是仍然有構造方法,這個是讓子類創建對象用的(構造方法不能被繼承,用super()) * 3 抽象類中不一定有抽象方法,但是抽象方法必須寫在抽象類中 * 4 抽象類的繼承類,必須把所有的抽象方法實現(全部需要加上方法體),否則子類還是個抽象類,需要用abstract修飾,也就是子類也不能直接被實例化 * * 注意:抽象類是不能使用final修飾的,因為抽象類的目的就是為了繼承,而final修飾的類不能被繼承 * 抽象方法可以用final修飾嗎? * abstract和final不能同時出現,抽象方法不能用final修飾,因為抽象方法的目的是被覆寫,而final修飾的方法不能被覆寫; * * 還有就是,子類必須實現抽象類的所有的"抽象"方法才行,而不是用abstract修飾的方法呢? * 關于這個,代碼中可以看出來; * */public class javaSE{ public static void main(String[] args){ A a = new C();//這里是多態,用于父類引用指向子類對象 a.move(); a.eat(); //再寫一個 //A o = new A();//這里是會報錯的,我上面寫過,抽象類是無法被實例化的,A是抽象類吧,當然不能被實例化; }}abstract class A{//抽象類吧 public void eat(){//這個不是抽象方法吧,需要一定被覆寫(實現)嗎? System.out.println( "這是一個抽象類" ); } public abstract void move();//注意:抽象方法是沒有方法體的; A(){ System.out.println( "A的構造方法" ); }}abstract class B extends A{//B沒有覆蓋(或者說實現)A里面的move()方法,所以他依舊是一個抽象類,需要加上abstract; B(){ System.out.println( "B的構造方法" ); }}class C extends B{//C實現了A里面的所有方法吧,所以不用abstract修飾; C(){ super(); } public void move(){//A中的move()方法被覆寫了 System.out.println( "C不是抽象類" ); }}
新聞熱點
疑難解答