首页 > 编程语言 > 详细

Java 基础 4

时间:2021-02-03 14:00:29      阅读:25      评论:0      收藏:0      [点我收藏+]

继承

Java 中所有的类的祖先都是 Object,在定义类的层次结构时,可以把一些类的相同点抽象出来,作为父类,减少代码重复。

如定义一个 Animal 类:

public class Animal {
  public void roam() {
    // do some thing
    System.out.println("Animal roam");
  }
}

当一个类 Dog 继承自 Animal 时,Dog 就默认拥有了 roam 方法:

public class Dog extends Animal {

}
Dog d = new Dog();
d.roam(); // output: Animal roam

子类可以覆写父类的同名方法,从而使函数实现不同的功能

public class Cat extends Animal {
  public void roam() {
    System.out.println("Miao");
  }
}
Cat c = new Cat();
c.roam();  // output: Miao

在子类覆写父类的同名方法中,仍然可以调用父类的同名方法

public void roam() {
  super.roam();
  System.out.println("Miao");
}
Cat c = new Cat();
c.roam(); // output: Animal roam \n Miao

super 关键字和 this 关键字类似,super 可以调用父类的相应方法(包括构造函数)或使用父类的成员变量(非 private),this 可以调用当前类的方法或使用当前类的成员变量。

在构造函数中,super() 或者 this() 的调用必须放在方法体的第一行,否则无法编译。

public class Cat extends Animal {
  public Cat() {
    super(); // 默认行为,不写时,编译器默认添加该语句
  }    
}

 

重新定义 Animal 和 Cat,

class Animal {
  public Animal() {
    System.out.println("Constructor of animal");
  }
}

public class Cat extends Animal {
  public Cat() {
    System.out.println("Constructor of cat");
  }
  public Cat(String name) {
    this();
    System.out.println("Miao, " + name);
  }
}

调用 Cat 的两种构造函数:

Cat c = new Cat();
// output:
// Constructor of animal
// Constructor of cat

 

Cat c = new Cat("d");
// output:
// Constructor of animal
// Constructor of cat
// Miao, d

 

使用 this() 调用类的其它构造函数时,super() 就不会添加到构造函数的第一行。即 this() 和 super() 在一个构造函数中只能出现一次。

但由于被调用的构造函数总会被编译器添加上 super(),因此父类的构造方法还是会执行。

 

Java 基础 4

原文:https://www.cnblogs.com/zhshanhe/p/14366394.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!