Java练习题:认识包

    1.关于包的说法,下列错误的是

A.包是一组类的集合

B.包能防止类名字冲突

C.import语句能够导入一个指定的包

D.import static能够导入一些静态方法

答案:C

原因:import语句能够导入一个具体的类

     2. 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行的声明都是正确的

答案:D

class A{

}
class B extends A{

}
class C extends B{

}

public class TestDemo {
    public static void main(String[] args) {
        A a0=new A();//实例化自己
        A a1=new B();//父类引用 引用子类对象
        A a2=new C();//A也是C的父类
    }
}

    3.如下代码的 结果是什么 ?

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

new Alpha();//调用Alpha不带参数的构造方法,题中没有,则编译器默认生成一个。那么这段代码会调用到父类的Base方法,默认Alpha的时候,会先默认有一个super调用Base的构造方法。则打印出Base.

new Base();//打印出Base

    4.以下程序的输出结果为

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

原因:当子类继承父类的时候,在子类的构造方法中,先要有super来显示的调用父类的构造方法,先来帮助父类构造。此时父类没有提供不带参数的构造方法,所以Derived中要有super(),且再传一个参数。

    5.以下程序执行的结果是:

A.ZYXX

B.ZYXY

C.YXYZ

D.XYZX

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();
	}
}

答案:C

原因:继承时有说过会有如下的执行顺序:

  • 父类静态代码块优先于子类静态代码块执行,且是最早执行;
  • 父类实例代码块和父类构造方法紧接着执行;
  • 子类的实例代码块和子类构造方法紧接着再执行;
  • 第二次实例化子类对象时,父类和子类的静态代码块都将不会再执行;

所以题中可见,会先执行1,再执行2。即先打印Y在打印X;

接下来在子类中再执行4,最后执行5。即先打印Y在打印Z。

    6.以下关于关键字super的描述中,正确的是:

A.super关键字只代表当前对象内部的那一块父类型特征,不包含在子类对象中

B.super关键字不仅可以指代子类的直接父类,还可以直接指代父类的父类

C.子类通过super关键字只能调用父类的方法,而不能调用父类的属性

D.子类通过super关键字只能调用父类的属性,而不能调用父类的方法

答案:A

原因:super只能指代当前的父类,不能指代那么多;

          通过super父类的属性、成员方法、变量都可以被调用;

    7.在 java 中,一个类可同时定义为许多同名的方法,这些方法的形式参数个数,类型或顺序各不相同,传回的值可能各不相同,这种面向对象的特性称为()

A.隐藏

B.重写

C.重载

D.无此特性

答案:C

原因:题干就是重载的要求。重写要求方法名、参数列表、返回值都要相同。

    8.以下说法, 描述错误的是:

A.重载要求两个方法名字相同, 但是参数的类型和个数不同, 不要求返回值类型相同

B.重写要求两个方法名字相同, 同时参数的类型和个数相同, 不要求返回值类型相同

C.重写的方法可以使用 @Override 注解来修饰

D.父类的方法为 private 的时候, 子类方法不能进行重写.

答案:B

    9.java 接口的修饰符可以为()

A.private

B.protected

C.final

D.abstract

答案:D

    10.在 java 中 , 一个类()

A.可以继承多个类

B.可以实现多个接口

C.在一个程序中只能有一个子类

D.只能实现一个接口

答案:B

原因:A:Java中只能实现单继承;

           C:在一个程序中可以有多个子类;

    11.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";

答案:C

原因:题干表示,一个接口里定义了一个NAME,这个NAME默认是public static final修饰

    12.下列关于java抽象类的说法哪个正确?
A.某个抽象类的父类是抽象类,则这个子类必须重写父类的所有抽象方法

B.接口和抽象类是同一回事

C.可以用抽象类直接去实例化创建对象

D.一个类只能继承一个抽象类

答案:D

原因:A:因为抽象类的父类是抽象类那么子类无须重写父类的所有抽象方法;

           B:明显的错;

           C:接口和抽象类都不能进行实例化;

           D:类只能继承一个,不能继承多个;

    13.以下代码输出结果为:

A.BD

B.DB

C.BB

D.DD

E.编译出错

class B {
    public int Func() {
        System.out.print("B");
        return 0;
    }
}
class D extends B {
    @Override
    public int Func() {
        System.out.print("D");
        return 0;
    }
}
public class Test {
    public static void main(String[] args) {
        B a = new B();
        B b = new D();
        a.Func();
        b.Func();
    }
}

答案:A

原因:B a = new B();自己引用自己

          B b = new D();父类引用子类对象

         a.Func();调用父类自己的Func方法,所以打印B;b.Func();引用了子类D,而子类D中重写了Func方法,所以打印D;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值