目录

  1. 参考链接
  2. 介绍
  3. 涉及的关键字

    1. extends
    2. implements
    3. super与this
  4. 构造器

参考链接

介绍

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

继承的目的是将重复的代码提取到父类,子类保留各自独有的代码,从而使代码更简洁、易维护、复用性更高。

继承的特性如下:

  1. 子类拥有父类非private的属性,方法;
  2. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展;
  3. 子类可以用自己的方式实现父类的方法;
  4. Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类,这是 java 继承区别于 C++ 继承的一个特性;
  5. 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系)。

涉及的关键字

继承可以使用extendsimplements这两个关键字来实现继承,而且所有的类都是继承于 java.lang.Object,当一个类没有继承的两个关键字,则默认继承 object(这个类在 java.lang 包中,所以不需要import)祖先类。

extends

extends是常用的实现继承的关键字。使用extends实现继承的示例代码如下:

  1. class People {
  2. public void eat() {
  3. System.out.println("Eating.");
  4. }
  5. }
  6. // Chinese类继承People类,speakChinese是Chinese独有的方法,eat则是从父类继承的
  7. public class Chinese extends People {
  8. public void speakChinese() {
  9. System.out.println("Speaking Chinese.");
  10. }
  11. public static void main(String[] args) {
  12. Chinese cp = new Chinese();
  13. cp.eat();
  14. cp.speakChinese();
  15. }
  16. }

implements

使用implements关键字可以变相的使 java 具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。

本人还未接触到接口的内容,更多内容等后续补充。

super与this

super关键字用于子类对父类的访问,this则用于自身的引用。

示例代码:

  1. class People {
  2. public void speak() {
  3. System.out.println("Speaking.");
  4. }
  5. }
  6. public class Chinese extends People {
  7. public void speakChinese() {
  8. System.out.println("Speaking Chinese.");
  9. }
  10. public void speakAll() {
  11. super.speak(); // 调用父类的speak
  12. this.speakChinese(); // 调用自身的speakChinese
  13. }
  14. public static void main(String[] args) {
  15. Chinese cp = new Chinese();
  16. cp.speakAll();
  17. }
  18. }

构造器

子类不能继承父类的构造器(构造方法或者构造函数),如果父类的构造器带有参数,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表。

如果父类构造器没有参数,则在子类的构造器中不需要使用super关键字调用父类构造器,系统会自动调用父类的无参构造器。

分析以下代码:

  1. class SuperClass {
  2. private int n;
  3. SuperClass() {
  4. System.out.println("SuperClass()");
  5. }
  6. SuperClass(int n) {
  7. System.out.println("SuperClass(int n)");
  8. this.n = n;
  9. }
  10. }
  11. class SubClass extends SuperClass{
  12. private int n;
  13. SubClass() {
  14. super(300);
  15. System.out.println("SubClass");
  16. }
  17. public SubClass(int n) {
  18. // super(); 有一句"隐形"的父类调用语句
  19. System.out.println("SubClass(int n):"+n);
  20. this.n = n;
  21. }
  22. }
  23. public class TestSuperSub {
  24. public static void main (String args[]) {
  25. SubClass sc = new SubClass();
  26. SubClass sc2 = new SubClass(200);
  27. }
  28. }

输出结果为:

  1. SuperClass(int n)
  2. SubClass
  3. SuperClass()
  4. SubClass(int n):200

解析:

  • 首先,创建 sc 实例对象时,没有传递参数,进入 SubClass 类的无参构造器,此构造器内用super(300)语句将参数300传给父类,SuperClass 类的有参构造器先输出SuperClass(int n),接着 SubClass 类的无参构造器输出SubClass;

  • 然后,创建 sc2 实例对象时,传入参数200,进入 SubClass 类的有参构造器,此构造器内先执行默认的super()语句船只给父类,SuperClass 类的无参构造器先输出SuperClass(),接着 SubClass 类的有参构造器输出SubClass(int n):200


  1. ID : 83
  2. DATE : 2018/06/18
  3. AUTHER : WJT20
  4. TAG : Java