继承的概念
- 父类或超类。实际上是所有子类的公共域和公共方法的集合.
- 子类,父类的特殊化,是对公共域和方法在功能、内涵方面的扩展和延伸 ,祖先类的所有成员均将成为子类拥有的“财富”
- Object类是所有类的祖先。
6.1.1 Java继承的实现
import java.awt.Color;
class Pixel {
private int x; //x坐标 x,y在Point类中有定义
private int y; //y坐标
Color c; //颜色
//其他……
}
import java.awt.Color;
class Pixel extends Point{ 继承
Color c; //颜色
//其他……
}
只有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类 没有无参构造方法。所以,类设计通常要提供无参构造方法
import java.awt.Color;
class Point{
private int x, y;
public Point(int x, int y) { //有参构造方法
this.x = x; this代表当前对象
this.y = y;
}
public Point() { // 无参构造方法
this(0,0); // 用this调用本类的另一构造方法
}
public String toString()
{
return "点:" + x + ","+ y;;
}
}
public class Pixel extends Point {
Color c;
public Pixel(int x,int y,Color c) {
super(x,y); //用super调用父类的构造方法<----------如果没有这行,会执行super()即调用无参构造
this.c=c;
}
public String toString() {
return super.toString() + "颜色: " +c; super代表父类对象的引用,用super调用父类成员
}
public static void main(String a[]) {
Pixel x=new Pixel (3,24,Color.blue);
System.out.println(x);
}
}
【注意】使用 this 查找匹配的方法时首先在本类查找,找不到时再到其父类和祖先类查找;
使用 super 查找匹配方法时,首先直接到父类查找,如果不存在,则继续到其祖先类逐级往高层查找。