1. 程式人生 > >Java中抽象類的理解

Java中抽象類的理解

pan 創建 所有 bsp 抽象類 member 初始 dem print

----------------------------------------

今天來給大家分享一下我對抽

象類及抽象方法的理解:

----------------------------------------

抽象類:

  不能使用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中抽象類的理解