继承和多态选择题分享

这是一组关于Java中继承和多态的选择题,涵盖了final和abstract的使用、instanceof关键字的应用、子类与父类之间的关系、访问权限控制、抽象类和方法等内容。通过这些题目,可以加深对Java继承和多态的理解。

1、下列哪个叙述是正确的?(A)
A.不可以同时用final和abstract修饰同一个方法。

B.abstract类中只可以有abstract方法。

C.final 类可以有子类。

D.abstract类中可以有非abstract方法,但该方法不可以用final修饰。
2、假设C是B的子类,B是A的子类,cat是C类的一个对象,bird是B类的一个对象,下列哪个叙述是错误的?(D)
A.cat instanceof A的值是true。

B.cat instanceof B的值是true。

C.bird instanceof A的值是true。

D.bird instanceof C的值是true。

3、给定下列程序,正确的输出是?(D)

class Base{

Base(int i){test();}

void test(){  System.out.println("Base.test()"); }

}

public class Child extends Base{

Child (int i){   super(i);

                  test();}

Child (float f){  this((int)f); }

void test(){  System.out.println("Child.test()");  }

    public static void main(String arg[])  {  new Child(10.8f).test();  }

}

A

Child.test()

B

编译失败

C

Child.test()

Child.test()

D

Child.test()

Child.test()

Child.test()

4、B是父类,C是子类。父类引用指向子类对象B b = new C()时,下列说法那个是错误的(D)

A.若子类未覆盖某属性,则父类引用调用父类本身的旧属性

B.若子类未覆盖某方法,则父类引用调用父类本身的旧方法

C.若子类定义了父类同名的某方法,则父类引用调用子类重新定义的新方法

D.若子类定义了父类同名的属性,父类引用调用子类的属性

*[HTML]:

父类引用指向子类对象时

  1. 若子类覆盖了某方法,则父类引用调用子类重新定义的新方法
  2. 若子类未覆盖某方法,则父类引用调用父类本身的旧方法
  3. 若子类覆盖了某属性,但父类引用仍调用父类本身的旧属性
  4. 若子类未覆盖某属性,则父类引用调用父类本身的旧属性
  5. 父类引用不能访问子类新定义的方法

子类引用指向自身对象时

  1. 若子类覆盖了某方法,则子类引用调用子类重新定义的新方法
  2. 若子类未覆盖某方法,则子类引用调用父类本身的旧方法
  3. 若子类覆盖了某属性,则子类引用调用子类重新定义的新属性
  4. 若子类未覆盖某属性,则子类引用调用父类本身的旧属性
  5. 子类引用可以访问子类新定义的方法

5、如果子类和父类不在同一个包中,那么,子类继承了父类的()成员变量做为子类的成员变量,继承了父类的()方法为子类的方法(D)

A.private protected, private protected

B.private、public, protected、public

C.protected、public, private public

D.protected、public, protected、public

6、运行下面程序的结果是什么?©

abstract class MineBase {

abstract void amethod();

static int i;

}

public class Mine extends MineBase {

public static void main(String[] a) {

int[] ar = new int[5];

for (int i=0; i<ar.length; i++)

{ System.out.println(ar[i]); }

}

}

A.打印5个0

B.编译错误,数组ar[]必须初始化

C.编译错误,Mine应声明为抽象类

D.出现IndexOutOfBoundsException异常

7、指出下列程序中的错误(A)

final class First

{ private int a = 1;

 int b = 2;

}

class Second extends First

{ protected int a = 2;

public void method() 

{ System.out.println(a + b); }

}

A. Second类不能继承First类

B. 子类中重复定义变量a

C.println方法中参数类型错误,该方法只能接受字符串类型数据

D. 关键字final不能修饰First类

8、下列哪个叙述是正确的?(D)

A.abstract类的子类必须是非abstract类。

B. 子类继承父类的构造方法。

C.子类重写或新增的方法也能直接操作被子类隐藏的成员变量。

D.子类继承的方法只能操作子类继承和隐藏的成员变量。

9、关键字supper的作用是(D)

A.用来调用父类的构造函数

B.以上都是

C.用来调用父类中的方法

D.用来访问父类被隐藏的成员变量

10、子类的继承性相关的说法正确的是(ACD)

A.如果父类中的成员使用public修饰,子类无条件继承。

B.如果父类中的成员使用private修饰,子类也能继承到。

C.如果父类和子类在同一个包中,此时子类可以继承父类中缺省修饰符的成员。

D.父类的构造器,子类不能继承。

### 关于Java继承、封装多态选择题 #### 题目一 下列哪项描述了Java中实现代码重用的主要方式? - A. 使用`import`语句引入其他包中的 - B. 利用接口定义通用行为 - C. 通过继承机制使子获得父的功能[^1] 正确答案:C 解释:项A涉及的是导入外部库或自定义包;B则是关于接口的应用,而题目所指的方式是指向子能够自动拥有来自其单一父方法与属性。 ```java class Parent { public void show() { System.out.println("Parent method"); } } class Child extends Parent {} // 子Child获得了Parent的所有非私有成员函数及变量 ``` #### 题目二 在Java里创建一个新时如何声明它为另一个现有的子? - A. `new Class SubClass(SuperClass)` - B. `SubClass extends SuperClass` - C. `SuperClass implements SubClass` - D. `SubClass implements SuperClass` 正确答案:B 解析:当希望新的成为已有的孩子时,在定义这个新的时候应该在其名称后面加上关键词`extends`以及想要扩展的那个超的名字[^2]。 ```java // 正确语法示范 public class Vehicle {} public class Car extends Vehicle {} // Car现在是Vehicle的一个子 ``` #### 题目三 下面哪个说法最能体现Java里的“封装”概念? - A. 可以被实例化成个对象 - B. 可以隐藏数据字段并通过公共方法访问这些字段 - C. 不同型的实体可以通过共同基来共享某些功能 - D. 同一可以在不同环境中展现出不同的行为模式 正确答案:B 说明:“封装”的核心在于保护内部状态的同时提供受控的数据存取途径。这通常意味着将属性设为private,并且仅允许经由getter/setter这样的公开API来进行读写操作[^5]。 ```java public class Person { private String name; public String getName() { return this.name; } public void setName(String newName) { this.name = newName; } } ``` #### 题目四 对于一个多态环境下的程序设计而言,哪一个条件不是必需满足的? - A. 至少存在两个具有相同签名但是逻辑有所差异的方法版本 - B. 所有的子都必须覆盖(override)同一个方法 - C. 创建了一个指向某个特定子的对象却将其视为更广泛的父型引用 - D. 方法调用发生在运行时期而非编译期间决定实际执行的动作 正确答案:B 理由:虽然为了达到多态效果确实需要至少有一个可覆写的父级方法,但这并不强制要求所有的派生都要这样做——只要求那些参与到了动态绑定过程之中者才行。 ```java class Animal { public void sound() {/*...*/} } class Dog extends Animal { @Override public void sound() {System.out.println("Woof");} } Animal myPet = new Dog(); myPet.sound(); // 输出"Woof" ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值