不算重零开始的java学习
第三篇
转眼之间又是一年的九月一号,大一新生们憧憬着即将到来的大学生活,迎接新的同学,新的老师,新的环境。甚至会获得一个美好的爱情。然而这些对我而言已经远去。
NO.1
在创建新对象时,所有继承下来的构造函数都会执行
public class Animal{
public Animal(){
//do sth.
}
}
public class Hippo extends Animal{
public Hippo(){
//do sth.
}
}
public class TestHippo{
public static void mian(String[] arg){
Hippo h = new Hippo;
}
}
1、某程序执行new Hippo()的动作,Hippo()的构造函数进入堆栈最上方的堆栈块
2、Hippo()调用父类构造函数导致Aniaml()的构造函数进入栈顶
3、Animal()调用父类的构造函数导致Object()的构造函数进入栈顶
4、Object()执行完毕,它的堆栈块被弹出,接着继续执行Animal()
如何直接调用父类构造函数
public Duck entends Animal{
int size;
public Duck(int newSize){
Animal();//error
size = newSize;
}
}
public Duck entends Animal{
int size;
public Duck(int newSize){
super();//调用super()会把父类的构造函数放在栈堆最上方
size = newSize;
}
}
上面说到,在创建新对象时,所有继承下来的构造函数都会执行。那如果父类中的构造函数是有参的呢
public abstract class Animal{
private String name;
public String getName(){
return name;
}
public Animal(String theName){
name = theName;
}
}
public class Hippo extends Animal{
public Hippo(String name){
super(name);
}
}
public class MakeHippo{
public static void main(String arg[]){
Hippo h = new Hippo("a");
}
}