1:父类对子类的引用
A 派生出子类 B , B 派生出子类 C ,并且在 java 源代码有如下声明:
A a0=new A();
A a1=new B();
A a2=new C();
问以下哪个说法是正确的?()
A.只有第一行能通过编译
B.第1、2行能通过编译,但第3行编译出错
C.第1、2、3行能通过编译,但第2、3行运行时出错
D.第1行,第2行和第3行的声明都是正确的
A虽然不是C的直接父类,但是C依然间接继承了A的内容的,此时可以发生向上转型的。
D正确。
2:如下代码的 结果是什么 ?
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.代码运行但没有输出
E.运行时抛出异常
当子类继承父类之后,在实例化子类对象的时候,先要调用父类的构造方法,来帮助父类初始化。
故选B
3:以下程序的输出结果为
class Base{ public Base(String s){ System.out.print("B"); } } public class Derived extends Base{ public Derived (String s) { System.out.print("D"); } public static void main(String[] args){ new Derived("C"); } }
A.BD
B.DB
C.C
D.编译错误
当子类继承父类需要先初始化继承过来的父类的成员,此时需要通过super来完成。很明显在子类的构造方法当中,并没有通过super调用父类的构造方法。正确写法应该是:
class Base{ public Base(String s){ System.out.print("B"); } } public class Derived extends Base{ public Derived (String s) { super(s); System.out.print("D"); } public static void main(String[] args){ new Derived("C"); } }
4:以下程序执行的结果是:
class X{ Y y=new Y();//1 public X(){//2 System.out.print("X"); } } class Y{ public Y(){//3 System.out.print("Y"); } } public class Z extends X{ Y y=new Y();//4 public Z(){//5 System.out.print("Z"); } public static void main(String[] args) { new Z(); } }
A.ZYXX
B.ZYXY
C.YXYZ
D.XYZX
本题考察代码的执行顺序:
类Z继承类X。
在继承层次上,先执行父类和子类的静态的,再执行父类的实例,父类的构造,最后执行子类的实例和子类的构造。
根据以上顺序,我们得出结论:本题中没有静态的。所以先执行1和2,再执行4和5。执行注释1和注释4的时候,分班打印Y。故最终的结果是YXYZ。
故答案为:C
5:以下关于关键字super的描述中,正确的是:
A.super关键字只代表当前对象内部的那一块父类型特征,不包含在子类对象中
B.super关键字不仅可以指代子类的直接父类,还可以直接指代父类的父类
C.子类通过super关键字只能调用父类的方法,而不能调用父类的属性
D.子类通过super关键字只能调用父类的属性,而不能调用父类的方法
本题中主要考察关键字super。首先3种用法为:
1.super.data访问父类中的属性
2.super.func() 访问父类的方法
3.super() 访问父类的构造方法
根据这3点,选项C和D均错。
B中:super只能指代其直接父类,不能指代父类的父类
A正确,super关键字只是在代码层次上提高了代码的阅读性。在子类中代表继承过来的父类型的特征。通过super.data就能知道访问的是父类的data。
6:重载的特点:
在 java 中,一个类可同时定义为许多同名的方法,这些方法的形式参数个数,类型或顺序各不相同,传回的值可能各不相同,这种面向对象的特性称为(重载)
7:以下代码运行输出的是
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.运行出错
子类继承父类之后,会继承父类私有的数据,但是由于private访问修饰符的问题,子类没有办法直接反问该数据。
故编译出错。
8:在 java 中 , 一个类()
A.可以继承多个类
B.可以实现多个接口
C.在一个程序中只能有一个子类
D.只能实现一个接口
Java中一个类只能继承一个类,不能继承多个。
一个类可以实现多个接口
子类和程序之间没有限制关系
9:
public interface IService { String NAME="default"; }
默认类型等价表示是哪一项:
作业内容
A.public String NAME=“default”;
B.public static String NAME=“default”;
C.public static final String NAME=“default”;
D.private String NAME=“default”;
接口当中的成员变量默认是:public static final
接口当中的成员方法默认是:public abstract
10:下列关于java抽象类的说法哪个正确?
A.某个抽象类的父类是抽象类,则这个子类必须重载父类的所有抽象方法
B.接口和抽象类是同一回事
C.可以用抽象类直接去实例化创建对象
D.一个类只能继承一个抽象类
A:抽象类A继承抽象类B,此时抽象类A,可以不重写抽象类B中的方法。如果是普通类继承,就得重写
B:接口和抽象类是两个事情
C:抽象类和接口都不可以实例化
D:正确
11:以下哪些方法是Object类中的方法?
A.clone()
B.toString()
C.wait()
D.finalize()
参考Object类的源码我们发现,所有方法均存在。
A:是用来进行对象的克隆
B:将对象的属性等信息,以字符串的形式输出
C:调用wait方法,当前线程进入等待状态
D:在对象被垃圾收集器析构(回收)之前调用,这个方法叫做 finalize( ),它用来清除回收对象。
故选择A,B,C,D.