什么是继承,继承就是子类得到父类中的一切的东西。父类的方法,父类的变量。子类,就是一种特殊的父类。
子类是一种特殊的父类,那么我们可以这样理解,在构建子类的时候必须要知道他的父类是什么,必须去通过他的父类把一些共有的元素加到子类中来,也就是说,在子类中一定要有父类的构造器,如果没有,则默认是父类的一共形参列表为空的构造器,如果父类中写了其他的构造器,但是没有写这个空的构造器,则会报错,你可以根据需求在子类中换一个构造器或者在父类中再写一个构造器。
但是这并不是在创建子类的时候也创建了一个子类
在子类的构建中。java永远是先进行子类构造器中的this的调用→父类成员变量初始化→父类构造方法→子类变量初始化→子类构造方法。
我们是通过父类的构造器去创建子类而不是父类。
在子类的构造函数中,调用父类的构造器语句,super(参数列表)应该放在构造器的第一句,且只有一个。
super 就是父类的意思,那么在调用父类的public方法的时候,就可以用super.方法的形式来调用
在eclipse里面,我们可以快捷的通过Source的Genrate Constructor using Fileds 去构造构造器,这样可以很快的节约时间
父类中定义了多个构造器
public Item(String title, String instruction) {
super();
this.title = title;
this.instruction = instruction;
}
public Item(){
}
public CD(String title, String artist, int numberOfCD, String instruction,String company) {
super(title,instruction);
this.artist = artist;
this.numberOfCD = numberOfCD;
this.company=company;//直接就好像定义在了里面一样 company是protected类型
}
子类中调用父类的构造器
而要是想得到在父类中定义的对象,子类中没有定义的对象,我们就要用到一些 方法,在父类中得到这些值,然后才能在子类中运用,因为,成员变量我们最好还是定义成private的变量
所以,我们在定义父类的时候一定要注意接口的定义,构造器的定义。
最后,一句来自thinking in java的话
由于继承在面向对象程序设计中如此重要,所以它经常被高度强调,于是程序员新手就会有这样的印象:处处都应该使用继承。这会导致设计难以使用并过分复杂。实际上,在建立新类时,应该首先考虑组合,因为它更加简单灵活。如果采用这种方式,设计会变得更加清晰。一旦有了一些经验之后,便能够看出必须使用继承的场合了。——Thinking in Java