繼承
概念:
① 繼承背後的思想就是基於已存在的類來構建新類;
② 當從已存在類繼承時,就重用了它的方法和屬性,還可以添加新的方法和屬性來定制新類以應對需求;
③ 當從其它類導出的類叫作子類,被導出的類叫作父類;
④ 在Java中,除了Object類外,所有類都是子類,都有唯一父類;
⑤ 繼承在OO中不可或缺;
⑥ 創建一個類時,總是在繼承;
類之間關系:Is-a繼承體現,Has-a組合體現,Like-a實現接口體現;
繼承的意義:代碼重用,體現不同抽象層次;
父子類關系:父類更抽象,更一般;子類更具體,更特殊;
繼承的特點:1、子類繼承父類的成員;2、具有層次結構;
繼承的優點:1、代碼重用;2、父類字段和方法可用於子類;3、從抽象到具體形成類的結構體系;4、可輕松定義子類;
實現:
在Java中,用extends關鍵字來表示一個類繼承了另一個類;
public class Teacher extends Person{
//代碼
}
super關鍵字
特點:
① Super代表父類對象的引用,this代表當前對象的引用;
② 當子父類的成員出現重名時,可以通過super來進行區分;
③ 子類的構造方法中,通過super關鍵字調用父類的構造方法;
public class JavaTeacher extends Teacher(){
public JavaTeacher(String name,String school){
//通過調用父類的構造方法,完成對相關字段值的初始化
super(name,school);
}
}
☆當構造一個類對象的時候一定會先調用父類的構造方法來構造父類的對象,調用父類的構造方法的語句必須是子類構造方法中的第一條指令;
的
1 public class TeacherDemo{ 2 public static void main(String []args){ 3 B b=new B(); 4 5 //父類中加上showB()方法之後,調用的是子類的showB(); 6 7 //若要調用父類的showB();在子類中加上super.showB(); 8 b.showB(); 9 } 10 } 11 12 class A{ 13 public A(){ 14 System.out.println("A的構造方法"); 15 } 16 public void showA(){ 17 System.out.println("A"); 18 } 19 20 public void showB(){ 21 System.out.println("父類中的showB方法"); 22 } 23 } 24 25 class B extends A{ 26 public B(){ 27 //super();//調用父類無參的構造方法,可以省略 28 System.out.println("B的構造方法"); 29 } 30 31 public void showB(){ 32 System.out.println("B"); 33 //showA();//子類繼承父類,可以調用,同super.showA(); 因為名稱未沖突 34 super.showB(); 35 36 } 37 } View Code下面這份代碼更清晰的表達了繼承
1 public class TeacherDemo{ 2 public static void main(String []args){ 3 JavaTeacher jTeacher=new JavaTeacher("張三","清華"); 4 jTeacher.teaching(); 5 6 DBTeacher dTeacher=new DBTeacher("李四","清華"); 7 dTeacher.teaching(); 8 } 9 } 10 11 class Teacher{ 12 private String name; 13 private String school; 14 15 public Teacher(String name,String school){ 16 this.name=name; 17 this.school=school; 18 } 19 20 public void teaching(){ 21 System.out.println("授課前准備"); 22 } 23 } 24 25 class JavaTeacher extends Teacher{ 26 public JavaTeacher(String name,String school){ 27 super(name,school); 28 } 29 30 public void teaching(){ 31 super.teaching();//調用父類teaching 32 System.out.println("打開eclipse"); 33 System.out.println("書寫java代碼"); 34 } 35 } 36 37 class DBTeacher extends Teacher{ 38 public DBTeacher(String name,String school){ 39 super(name,school); 40 } 41 42 public void teaching(){ 43 super.teaching();//調用父類teaching 44 System.out.println("打開Oracle"); 45 System.out.println("書寫pl-sql指令"); 46 } 47 } View Code