—-构造方法在类继承中的作用

继承的概念

  • 父类或超类。实际上是所有子类的公共域和公共方法的集合.
  • 子类,父类的特殊化,是对公共域和方法在功能、内涵方面的扩展和延伸 ,祖先类的所有成员均将成为子类拥有的“财富”
  • Object类是所有类的祖先。

image.png

6.1.1 Java继承的实现

  1. import java.awt.Color;
  2. class Pixel {
  3. private int x; //x坐标 x,y在Point类中有定义
  4. private int y; //y坐标
  5. Color c; //颜色
  6. //其他……
  7. }
  8. import java.awt.Color;
  9. class Pixel extends Point{ 继承
  10. Color c; //颜色
  11. //其他……
  12. }
  13. 只有c属性是新加入的,其它属性在Point类中均存在

6.1.2 继承关系中构造方法的作用

(1) 子类可以在自己构造方法中使用关键字super来调用父类的构造方法,但super调用语句必须是子类构造方法中的第一个可执行语句
【注意】必须是子类构造方法的第1条语句!
(2) 子类在自己定义构造方法中如果没有用super明确调用父类的构造方法,则在创建对象时,首先自动执行父类的无参构造方法,然后再执行自己定义的构造方法。
———->父类的那些属性值,让父类构造!—-各司其责

以下程序在编译时将出错,为什么?
class parent {
String my;
public parent(String x) { my=x;}
}
public class subclass extends parent {
subclass x=new subclass();
}
parent类 没有无参构造方法。所以,类设计通常要提供无参构造方法

  1. import java.awt.Color;
  2. class Point{
  3. private int x, y;
  4. public Point(int x, int y) { //有参构造方法
  5. this.x = x; this代表当前对象
  6. this.y = y;
  7. }
  8. public Point() { // 无参构造方法
  9. this(0,0); // 用this调用本类的另一构造方法
  10. }
  11. public String toString()
  12. {
  13. return "点:" + x + ","+ y;;
  14. }
  15. }
  16. public class Pixel extends Point {
  17. Color c;
  18. public Pixel(int x,int y,Color c) {
  19. super(x,y); //用super调用父类的构造方法<----------如果没有这行,会执行super()即调用无参构造
  20. this.c=c;
  21. }
  22. public String toString() {
  23. return super.toString() + "颜色: " +c; super代表父类对象的引用,用super调用父类成员
  24. }
  25. public static void main(String a[]) {
  26. Pixel x=new Pixel (3,24,Color.blue);
  27. System.out.println(x);
  28. }
  29. }
  30. 【注意】使用 this 查找匹配的方法时首先在本类查找,找不到时再到其父类和祖先类查找;
  31. 使用 super 查找匹配方法时,首先直接到父类查找,如果不存在,则继续到其祖先类逐级往高层查找。