更新时间:2020-09-11 16:55:02 来源:极悦 浏览2102次
1.下面这段代码的输出结果是什么?
ublic class Test {
public static void main(String[] args) { new Circle();
}
}
class Draw {
public Draw(String type) { System.out.println(type+" draw constructor");
}
}
class Shape { private Draw draw = new Draw("shape");
public Shape(){ System.out.println("shape constructor");
}
}
class Circle extends Shape { private Draw draw = new Draw("circle");
public Circle() { System.out.println("circle constructor");
}
}
这道题目主要考察的是类继承时构造器的调用顺序和初始化顺序。要记住一点:父类的构造器调用以及初始化过程一定在子类的前面。由于Circle类的父类是Shape类,所以Shape类先进行初始化,然后再执行Shape类的构造器。接着才是对子类Circle进行初始化,最后执行Circle的构造器。
2.下面这段代码的输出结果是什么?
public class Test { public static void main(String[] args) {
Shape shape = new Circle();
System.out.println(shape.name);
shape.printType();
shape.printName();
}
}
class Shape { public String name = "shape";
public Shape(){
System.out.println("shape constructor");
}
public void printType() {
System.out.println("this is shape");
}
public static void printName() {
System.out.println("shape");
}
}
class Circle extends Shape { public String name = "circle";
public Circle() {
System.out.println("circle constructor");
}
public void printType() {
System.out.println("this is circle");
}
public static void printName() {
System.out.println("circle");
}
}
这道题主要考察了隐藏和覆盖的区别
覆盖只针对非静态方法(终态方法不能被继承,所以就存在覆盖一说了),而隐藏是针对成员变量和静态方法的。这2者之间的区别是:覆盖受RTTI(Runtime type identification)约束的,而隐藏却不受该约束。也就是说只有覆盖方法才会进行动态绑定,而隐藏是不会发生动态绑定的。在Java中,除了static方法和fina·方法,其他所有的方法都是动态绑定。因此,就会出现上面的输出结果。
总结
父类的构造器调用以及初始化过程一定在子类的前面
初始化顺序也是按照;先对象成员初始化--->普通对象代码块初始化-->构造方法初始化
以上就是极悦java培训机构的小编针对“互联网常见的Java继承基础练习题”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习