Java中抽象類的理解
----------------------------------------
今天來給大家分享一下我對抽
象類及抽象方法的理解:
----------------------------------------
抽象類:
不能使用new方法進行實
例化的類,即沒有具體實
例對象的類,只可以通過
抽象類派生出新的子類,
再由其子類來創建對象;
抽象方法:
抽象方法就是以 abstract
修飾的方法,這種方法只
聲明返回的數據類型,方
法名稱和所需要的參數,
沒有方法體,也就是說抽
象方法只需要聲明,當一
個方法為抽象方法時,意
味著這個方法必須被子類
的方法所重寫,否則其子
類的該方法仍然是抽象的;
----------------------------------------
抽象類的特點:
A:抽象類和抽象方法必須用abstract關鍵字修飾;
B:抽象類中不一定有抽象方法,但是有抽象方法的類必須定義為抽象類;
C:抽象類不能直接實例化;(可以通過子類(重寫方法後的子類)的多態方式實例化);
1.它不是具體的;
2.抽象類有構造方法,用於子類訪問父類數據的初始化;
D:抽象類的子類;
1.如果不想重寫抽象方法,該子類必須是抽象類;
2.成為具體類則必須重寫所有的抽象方法;
----------------------------------------
下面給出一個抽象類的實例:
----------------------------------------
1 public class AbstractDemo { 2 public static void main(String[] args) { 3 //Tree t = new Tree();//抽象的子類不能實例化;Error! 4 Grass g = new Grass();//非抽象類的子類實例化 5 g.grow();6 System.out.println("-------------"); 7 Plant p = new Grass();//多態的方式 8 p.grow(); 9 } 10 } 11 abstract class Plant{ 12 public abstract void grow(); 13 } 14 15 /* 16 * 1.子類是抽象類; 17 */ 18 abstract class Tree extends Plant{ 19 Tree(){ 20 System.out.println("tree"); 21 } 22 } 23 24 /* 25 * 2.子類不是抽象類,則必須重寫所有抽象方法; 26 */ 27 class Grass extends Plant{ 28 Grass(){ 29 System.out.println("grass"); 30 } 31 public void grow(){ 32 System.out.println("grass growing"); 33 } 34 }
----------------------------------------
抽象類的成員的特點:
A:成員變量
1.既可以是變量,也可以是常量;
B:構造方法
1.用於子類訪問父類數據的初始化;
C:成員方法
1.既可以是抽象的,也可以是非抽象的;
抽象類成員方法特性:
A:抽象方法
1.強制要求子類做的事情;
B:非抽象方法
1.子類繼承的事情,提高代碼復用性;
----------------------------------------
下面給出一個抽象類的成員的
實例:
----------------------------------------
1 public class AbstractMember { 2 public static void main(String[] args){ 3 4 Phone p = new Vivo(); //這裏是多態;(用來實例化抽象類) 5 p.height = 1460; //1600 -> 1460 6 System.out.println(p.height); 7 System.out.println(p.width); 8 System.out.println("-----------"); 9 p.call(); //vivo call 10 p.method(); //vivo method 11 12 13 14 } 15 } 16 17 abstract class Phone{ 18 public int height = 1600; 19 public final int width = 960; 20 public Phone(){} 21 public Phone(String name,int count){} 22 /*成員方法*/ 23 public abstract void call();//抽象成員方法; 24 public void method(){ //非抽象成員方法; 25 System.out.println("phone method"); 26 } 27 28 } 29 //非抽象子類,重寫抽象父類的抽象方法: 30 class Vivo extends Phone{ 31 32 public void call(){ 33 System.out.println("vivo call"); 34 } 35 public void method(){ 36 System.out.println("vivo method"); 37 } 38 39 }
----------------------------------------
以上就是本人對抽象類的理
解,感謝大家的閱讀;
Java中抽象類的理解