scjp考试准备 - 6 - 父类构造器的引用
题一,如下代码的执行结果:
class Person{
String name = "No name";
public Person(String nm){name = nm;}
} class Employee extends Person{
String empID = "0000";
public Employee(String id){empID = id;}
} class EmployeeTest{
public static void main(String[] args){
Employee e = new Employee("4321");
System.out.println(e.empID);
}
}
题二,如下代码的执行结果:
class Atom{
Atom(){System.out.print("atom ");}
}
class Rock extends Atom{
Rock(String type){System.out.print(type);}
}
public class Mountain extends Rock{
Mountain(){
super("granite ");
new Rock("granite ");
}
public static void main(String[] a){new Mountain();}
}
题三,对如下代码执行哪些调整,可以使Sub类正常执行:
1. class Super{
2. private int a;
3. protected Super(int a){this.a = a;}
4. }
...
11. class Sub extends Super{
12. public Sub(int a){super(a);}
13. public Sub(){this.a = 5;}
14. }
调整选项:
A. Change line 2 to:
public int a;
B. Change line 2 to:
protected int a;
C. Change line 13 to:
public Sub(){this(5);}
D. Change line 13 to:
public Sub(){super(5);}
E. Change line 13 to:
public Sub(){super(a);}
这两道题考察的重点是类的继承,考点是父类构造器的调用。
关于父类构造器的调用需要注意以下几点:
- 子类不会获得父类的构造器;
- 在一个构造器中调用另一个重载的构造器可以使用this调用,在子类构造器中调用父类构造器可以使用super调用;
- 使用super调用父类构造器必须出现在子类构造器执行体的第一行;
- 不管是否使用super调用父类构造器,子类构造器总会调用父类构造器,调用形式有如下三种:
- 子类构造器使用super显式调用父类构造器;
- 子类构造器使用this调用重载的构造器,重载的构造器调用父类构造器;
- 若子类构造器执行体中没有super调用,也没有this调用,系统将会在执行子类构造器前隐式调用父类的无参数构造器。
- 当调用子类构造器初始化子类对象时,父类构造器总会在子类构造器前执行。以此向上类推,创建任何java对象,最先执行的总是Object类的构造器;
- 如果没有为一个类提供自定义构造器,系统会默认为这个类提供一个无参数构造器;反之,若已经为这个类提供了自定义构造器,系统将不会为这个类提供隐式无参构造器。
题目分析:题一中Person类没有无参数构造器,子类Employee的构造器中也没有使用super调用Person类中已定义的构造器,那么子类将无法找到无参数的Person类构造器,无法编译。
附上题一编译结果:
根据以上的第五条可以推断出题二的执行结果。
题二执行结果:
对于题三,先分析所给的代码,着重关注Sub类的第二个构造器,这个构造器需要隐式调用父类的无参构造器。父类没有提供无参构造器。因此需要为父类Super添加一个无参构造器,或调整Sub类的第二个构造器,使之调用Super类的有参数的构造器。答案中CD正确,E中调用的父类成员变量a的作用域错误。
scjp考试准备 - 6 - 父类构造器的引用的更多相关文章
- scjp考试准备 - 7 - Java构造器
题目——如下代码的执行结果: class Hello{ String title; int value; public Hello(){ title += " World!"; } ...
- java 父类构造器
当创建任何java对象时,程序总会首先调用系统的父类非静态初始化块(隐式执行)和父类构造器(从object开始(java程序中所有类的最终父类都是java.lang.Object类,使用语句super ...
- Java 中变量初始化、子类和父类构造器调用的顺序
先说结论 变量初始化 -> 父类构造器 -> 子类构造器 贴代码 Animcal.java 父类 public class Animal { private static int inde ...
- Java的初始化执行顺序(父类static变量->子类static变量->父类成员变量->父类构造器->成员变量->构造器->main函数)
1. 引言 了解Java初始化的顺序,有助于理解Java的初始化机制和内存机制. 顺序:父类static变量->子类static变量->父类成员变量->父类构造器->成员变量- ...
- 调用父类构造器:super
import static java.lang.System.*; class Base{ public String name; public double weight; public Base( ...
- Java修炼——继承_super父类对象的引用
Super是指直接父类对象的引用,可以通过super来访问父类中被子类覆盖的方法和属性. 当你调用子类的构造方法时,系统会默认给你先调用父类的构造方法,然后才会调用子类的构造方法. package c ...
- 方法引用_通过this引用本类的成员方法和方法引用_类的构造器(构造方法)引用和数组的构造器引用
package com.yang.Test.ThisMethodReference; /** * 通过this引用本类的成员方法 */ public class Husband { //定义一个买房子 ...
- scjp考试准备 - 10 - 类型转换
题目为如下代码的执行结果: class Building{} public class Barn extends Building{ public static void main(String[] ...
- scjp考试准备 - 8 - final关键字
题目,如下代码的执行结果: import java.util.ArrayList; class Pizza{ ArrayList toppings; public final void addTopp ...
随机推荐
- Android常见包
Android.jar常见包 android.app-----------提供高层的程序模型.提供基本的运行环境android.content-------包含各种的对设备上的数据进行访问和发布的类a ...
- 深入了解Qt(二)之元对象系统(Meta-Object System)
深入了解Qt主要内容来源于Inside Qt系列,本文做了部分删改,以便于理解.在此向原作者表示感谢! 在Qt Meta Object System-元对象系统这篇文章中,从底层实现的源码剖析了元对象 ...
- Windows下Qt连接MySql数据库
1.设置环境变量,需添加如下的环境变量: 2.打开Qt Command Prompt,输入第一条命令:cd %QTDIR%\src\plugins\sqldrivers\mysql 后按回车 ...
- JavaScript 性能优化1
一直在学习javascript,也有看过<犀利开发Jquery内核详解与实践>,对这本书的评价只有两个字犀利,可能是对javascript理解的还不够透彻异或是自己太笨,更多的是自己不擅于 ...
- Java 编译报错:illegal character
1.检查编译版本:1.5还是1.6 2.重新引用一下Jar包
- javaSE第二十五天
第二十五天 399 1:如何让Netbeans的东西Eclipse能访问. 399 2:GUI(了解) 399 (1)用户图形界面 399 (2)两个包: 399 (3) ...
- HTML 5缓存机制:Cache Manifest配置实例
Cache Manifest是HTML 5的一种缓存机制,文章作者直接用博客当测试环境,虽然[color=#444444 !important]应用起来非常简单,但效果却出奇的好.缓存后的速度,简直是 ...
- 搭建高性能计算环境(五)、应用软件的安装之Amber12
应用软件通常安装在/opt目录下,这样系统中的各个用户都能方便使用,下面的软件都将安装到/opt目录. 1,上传需要的软件包Amber12.tar.gz.AmberTools13.tar.bz2.Am ...
- 极速地将git项目部署到SAE的svn服务器上
本文最初发布于我的个人博客:http://jerryzou.com/posts/gitForSAE/ 我花了一些时间自己写了一个能够极速地将一个git项目部署到SAE的svn服务器上的脚本.代码不是复 ...
- jquery图片轮播,单张图片轮播时间不同
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...