程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JAVA面對對象(四)——抽象類

JAVA面對對象(四)——抽象類

編輯:關於JAVA

JAVA面對對象(四)——抽象類。本站提示廣大學習愛好者:(JAVA面對對象(四)——抽象類)文章只能為提供參考,不一定能成為您想要的結果。以下是JAVA面對對象(四)——抽象類正文


抽象類的作用類似“模板”,可以根據它的格式來修改、創建新的類;但是不能直接由抽象類創建對象只能通過抽象類派生出新的類,再由它來創建對象;抽象類的使用同樣是單繼承,即一個子類只能繼承一個抽象類

抽象類的定義及使用規則:

  • 包含一個抽象方法的類必定是抽象類
  • 抽象類和抽象方法都要使用abstract關鍵字聲明
  • 抽象方法只用聲明不用實現
  • 抽象類必須被子類繼承,子類(如果不是抽象類)必須覆寫抽象類中的全部抽象方法

抽象類的定義格式:

1 abstract class 抽象類名稱{
2      屬性;
3     訪問權限 返回值類型 方法名稱(參數){   //普通方法
4         [return 返回值];
5     }
6     訪問權限 abstract 返回值類型 方法名稱(參數);     //抽象方法
7 }

從上述格式中看出,抽象類的組成比普通類多了靜態方法,其他地方和普通類基本一致

 1 abstract class A {
 2     public static final String FLAG="China";
 3     private String name = "張三";
 4     public String getName() {
 5         return name;
 6     }
 7     public void setName(String name) {
 8         this.name = name;
 9     }
10     public abstract void print();        //定義抽象方法
11 }
12 class B extends A{  //繼承抽象類,覆寫全部抽象方法
13     @Override
14     public void print() {
15         System.out.println("FLAG="+FLAG);
16         System.out.println("姓名:"+super.getName());
17     }
18 }
19 public class Demo1 {
20     public static void main(String[] args) {
21         B b=new B();
22         b.print();
23     }
24 }

從上面的示例中可以看出,抽象類A中定義了抽象方法print(),但是抽象方法並不能被外部直接調用,類B繼承類A,並覆寫了抽象類A的print()方法;不過需要注意幾點:

  • 抽象類不能用final關鍵字聲明,因為final關鍵字聲明的類子類不能繼承,而抽象類必須被子類覆寫
  • 抽象方法不要使用private修飾,同樣因為子類必須覆寫抽象方法,如果使用則無法覆寫

抽象類使用的依然是類的繼承關系,存在構造方法和各個屬性,所以子類實例化之前必須先對父類進行實例化


 

抽象類中定義了抽象方法,但是定義的抽象方法不能被外部直接調用;在子類對象實例化前同樣也會默認調用父類中的無參構造也就是說此時子類實際隱含了一個super關鍵字調用構造方法的語句:

1 class B extends A{ 
2     public B() {
3         super();    //隱含此語句
4         System.out.println("B、子類中的構造方法");
5     }
6 }

既然可以調用抽象類中的構造方法,那麼也可以直接在子類指定調用父類中的指定參數的構造方法:

 1 abstract class Person {
 2     private String name;
 3     private int age;
 4     public Person(String name, int age) {
 5         super();
 6         this.name = name;
 7         this.age = age;
 8     }
 9     public String getName() {
10         return name;
11     }
12     public void setName(String name) {
13         this.name = name;
14     }
15     public int getAge() {
16         return age;
17     }
18     public void setAge(int age) {
19         this.age = age;
20     }
21     public abstract String getInfo();  //取得信息,抽象方法
22 }
23 class Student extends Person{
24     private String school;
25     public Student(String name, int age, String school) {
26         super(name, age);
27         this.school = school;
28     }
29     public String getSchool() {
30         return school;
31     }
32     public void setSchool(String school) {
33         this.school = school;
34     }
35     @Override
36     public String getInfo() {   //覆寫抽象類中抽象方法
37         return "姓名:"+super.getName()+
38                 "年齡:"+super.getAge()+
39                 "學校:"+this.getSchool();
40     }
41 }
42 public class Demo {
43     public static void main(String[] args) {
44         Student stu = new Student("Tom", 19, "北京大學");
45         System.out.println(stu.getInfo());
46     }
47 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved