JAVA每日随手练【封装(包)与继承】
1.单选题一
关于包的说法, 下列错误的是:( ) A.包是一组类的集合 B.包能防止类的名字冲突 C.import 语句能够导入一个指定的包 D.import static 能够导入一些静态方法
正确答案:C
【分析】: A.包是一组类的集合,一个包可以包含若干个类文件, 还可包含若干个包 B.Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。 D.利用import static 可以不通过调用包名,直接使用包里的静态方法。在JDK 1.5之后提供了静态导入功能。如果一个类中的方法全部是使用static声明的静态方法,则在导入时就可以直接使用import static的方式导入。
2.单选题二
如下代码的 结果是什么 ? A.Base B.BaseBase C.编译失败 D.代码运行但没有输出 E.运行时抛出异常
class Base {
Base() {
System.out.print("Base");
}
}
public class Alpha extends Base {
public static void main( String[] args ) {
new Alpha();
new Base();
}
}
正确答案:B
【分析】:在实例化子类的同时执行子类的构造函数,但执行执行子类构造函数时,会先执行父类的构造函数
3.单选题三
以下程序的输出结果为() A.BD B.DB C.C D.编译错误
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");
}
}
正确答案:D
【分析】:调用子类的构造方法前会隐式的调用父类的无参构造方法,如果父类没有无参构造方法就必须显示的调用父类的有参构造方法。很显然,此题的父类Base没有无参构造方法,也没有调用父类的有参构造方法,所以编译不通过。
4.单选题四
以下程序执行的结果是:() A.ZYXX B.ZYXY C.YXYZ D.XYZX
class X{
Y y=new Y();
public X(){
System.out.print("X");
}
}
class Y{
public Y(){
System.out.print("Y");
}
}
public class Z extends X{
Y y=new Y();
public Z(){
System.out.print("Z");
}
public static void main(String[] args) {
new Z();
}
}
正确答案:C
【分析】: 第一个知识点:继承。子类继承父类,程序执行的过程中先加载用父类,这也是出现重写的原因。所以程序先加载了类X。 第二个知识点:因为java程序在执行时先加载全局变量。在X类中的成员变量是Y b = new Y();在程序加载b 时需要调用类Y的无参构造方法,就输出了Y。 第三个知识点:构造器。程序调用默认调用的是构造器是无参构造器,所以在继承类X时,程序先执行了X的无参构造器输出x(当给这个参构造器有参数时就不会输出x)。当new一个对象时就是调用这个类的构造器。第三个输出和第四个输出和上面类似。
class X{
Y y=new Y();
public X(){
System.out.print("X");
}
}
class Y{
public Y(){
System.out.print("Y");
}
}
public class Z extends X{
Y y=new Y();
public Z(){
System.out.print("Z");
}
public static void main(String[] args) {
new Z();
}
}
5.单选题五
以下关于java封装的描述中,正确的是:() A.super关键字是在子类对象内部指代其父类对象的引用 B.super关键字不仅可以指代子类的直接父类,还可以直接指代父类的父类 C.子类通过super关键字只能调用父类的方法,而不能调用父类的属性 D.子类通过super关键字只能调用父类的属性,而不能调用父类的方法
正确答案:A
【分析】: super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。 super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。
|