JAVA面對對象(四)——抽象類。本站提示廣大學習愛好者:(JAVA面對對象(四)——抽象類)文章只能為提供參考,不一定能成為您想要的結果。以下是JAVA面對對象(四)——抽象類正文
抽象類的作用類似“模板”,可以根據它的格式來修改、創建新的類;但是不能直接由抽象類創建對象只能通過抽象類派生出新的類,再由它來創建對象;抽象類的使用同樣是單繼承,即一個子類只能繼承一個抽象類
抽象類的定義及使用規則:
抽象類的定義格式:
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()方法;不過需要注意幾點:
抽象類使用的依然是類的繼承關系,存在構造方法和各個屬性,所以子類實例化之前必須先對父類進行實例化
抽象類中定義了抽象方法,但是定義的抽象方法不能被外部直接調用;在子類對象實例化前同樣也會默認調用父類中的無參構造也就是說此時子類實際隱含了一個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 }