初始化基类:
Java会自动化的导出类(个人理解是继承的子类)的构造器中插入对基类构造器的调用
public class Art {
Art(){
System.out.println("Art constructor");
}
}
class Drawing extends Art{
Drawing(){
System.out.println("Drawing constructor");
}
}
class Cartoon extends Drawing{
public Cartoon (){
System.out.println("Cartoon constructor");
}
public static void main(String[] args) {
Cartoon cartoon = new Cartoon();
}
}
输出结果:
Art constructor
Drawing constructor
Cartoon constructor
带参构造器
public class Game {
Game( int i){
System.out.println("Game constructor" +i );
}
}
//class BoardGame extends Game{} // There is no default constructor available in 'Javathingking.Game
class BoardGame extends Game{
// BoardGame(){}//There is no default constructor available in 'Javathingking.Game
BoardGame( int a){
super(a);
System.out.println("BoardGame constructor" + a);
}
}
class Chess extends BoardGame{
Chess(){
super(11);
System.out.println("Chess constructor");
}
public static void main(String[] args) {
Chess chess = new Chess();
}
}
结果展示,请留意代码注释的代码和原因
Game constructor11
BoardGame constructor11
Chess constructor
在这里书中有这样一句话“ 调用基类构造器必须是你在导出类构造器中要做的第一件事”
向上转型
为新类提供方法并不是继承技术中最重要的方面,其最重要的方面是用来表现新类和基类之间的关系,这种关系可以用“新类是现有类一种类型”加以概括
public class Instrument {
public void play () {};
static void tune (Instrument i){
i.play();
}
}
class Wind extends Instrument{
public static void main(String[] args) {
Wind wind = new Wind();
Instrument.tune(wind);
}
}
注意参数的类型
这里明确的给出了是否要用继承的判断:
问一问自己是否需要从新类中向基类进行向上转型,如果必须向上转型者继承是必须的,否则要考虑是否需要继承