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进行投诉反馈,一经查实,立即删除!