Java基础题3:继承
1. 以下代码运行输出的是
public class Person {
private String name = "Person";
int age = 0;
}
public class Child extends Person {
public String grade;
public static void main(String[] args) {
Person p = new Child();
System.out.println(p.name);
}
}
A. 输出:Person
B. 没有输出
C. 编译出错
D. 运行出错
【答案】
C
【解析】
name是私有成员变量,只能在包内使用。
2. 以下代码运行输出的是
public class Base {
Base() {
System.out.print("Base");
}
}
public class Alpha extends Base {
public static void main(String[] args) {
new Alpha(); //1
//调用父类无参的构造方法
new Base(); //2
}
}
A. Base
B. BaseBase
C. 编译失败
D. 代码运行但没有输出
【答案】
B
【解析】
Alpha子类中,其实有一个默认提供的构造方法。
Alpha() {
super();
}
所以,代码1,当new Alpha();
时会调用子类默认的构造方法,因为子类的构造方法是继承自父类的,所以最终会调用父类的构造方法,输出Base。
new Base();
调用自己的构造方法,输出Base。
3. 以下代码运行输出的是
public class Base {
public Base(String s) {
System.out.println("B");
}
}
public class Derived extends Base {
public Derived(String s) {
System.out.println("D");
}
public static void main(String[] args) {
new Derived("C");
}
}
A. BD
B. DB
C. C
D. 编译错误
【答案】
D
【解析】
父类和子类都是带参数的构造方法,但是子类的构造方法的时候,没有帮助父类进行构造,所以编译错误,要想实现此代码,需要在子类构造方法的第一行加 super(s);
4. 以下代码运行输出的是
class X {
Y y = new Y(); //1
public X() { //2
System.out.println("X");
}
}
class Y {
public Y() { //3
System.out.println("Y");
}
}
class Z extends X {
Y y = new Y(); //4
public Z() { //5
System.out.println("Z");
}
public static void main(String[] args) {
new Z();
}
}
A. ZYXX
B. ZYXY
C. YXYZ
D. XYZX
【答案】
C
【解析】
我们在继承板块中的知识点,可知,代码运行的顺序一定是先静态、再实例、再构造的方法。
静态的有:静态代码块,静态成员变量;实例的(也可以说非静态的)有非静态代码块、非静态成员变量。
并且在继承关系中,执行顺序是先静态,再父类,再子类。就是:父类的静态、子类的静态、父类的实例、父类的构造方法、子类的实例、子类的构造方法。
此题中,当Z继承于X,因为此题代码没有静态方法,所以①先执行父类的实例、父类的构造方法。
父类中:
class X {
Y y = new Y(); //1
public X() { //2
System.out.println("X");
}
}
代码1,new Y();
Y中提供了不带参数的构造方法,先输出Y,再去执行父类自己的构造方法,输出X。
②再执行子类的实例、子类的构造方法。同样的,子类先后输出YZ。
故,执行结果为:YXYZ
注意:子类中的构造方法,可以理解为,其构造方法的第一行默认有一个super();
。
6. 以下关于 super 描述正确的是
A. super关键字只代表当前对象内部的那一块父类型特征,不包含再子类对象中。
B. super关键字不仅可以指代子类的直接父类,还可以直接指代父类的父类。
C. 子类通过super关键字只能调用父类的方法,而不能调用父类的属性。
D. 子类通过super关键字只能调用父类的属性,而不能调用父类的方法。
【解析】
super关键字只能指代直接父类,不能指代父类的父类,所以B错。
子类通过super关键字可以调用父类的方法即父类的属性。故CD错。
A正确是因为,super其实只是一个关键字,但是我们在理解的时候可以认为它是父类对象的引用,以用来提高代码的可读性,所以当我们看到super时就知道它是来调用父类的。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!