你的位置:首页 > Java教程

[Java教程]Java学习 (十二)、面向对象编程(四)继承,概念及super关键字


继承

概念:

①   继承背后的思想就是基于已存在的类来构建新类;

②   当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求;

③   当从其它类导出的类叫作子类,被导出的类叫作父类;

④   在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();//调用父类teaching32     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();//调用父类teaching44     System.out.println("打开Oracle");45     System.out.println("书写pl-sql指令");46   }47 }

View Code