JAVA题库-面向对象

1.

class Parent1 {
  Parent1(String s){
   System.out.println(s);
  }
 }
 class Parent2  extends Parent1{
  Parent2(){
   System.out.println("parent2");
  }
 }
 public class Child extends Parent2 {
 public static void main(String[] args) {
   Child child = new Child();
  }
 }

//编译错误:没有找到构造器Parent1()

在给定的代码中,Parent2 类继承自 Parent1 类,但是 Parent2 类的构造函数没有显式地调用父类 Parent1 的构造函数。由于 Parent1 类中只声明了一个带有字符串参数的构造函数,没有无参构造函数,所以编译器会默认插入父类的无参构造函数调用,但是在父类中并没有这样的构造函数。

因此,在编译代码时,由于缺少调用父类 Parent1 的构造函数的语句,编译器会报错,提示找不到构造器 Parent1()

解释是:

  • Parent1 类有一个接受字符串参数的构造函数。
  • Parent2 类继承自 Parent1 类,但是它的构造函数中没有显式地调用父类的构造函数。
  • Child 类继承自 Parent2 类,并在其 main 方法中创建一个 Child 实例对象。
  • 由于缺少对父类 Parent1 构造函数的调用,编译器会报错,指出找不到无参构造函数 Parent1()

2.

class Parent{
  public String name;
 public Parent(String pName){
   this.name = pName;
  }
 }
 public class Test  extends Parent {  //第1行
  public Test(String Name){              //第2行
   name="hello";          //第3行
   super("kitty");          //第4行
  }   
 }
下列选项说法正确的是( )
A.第2行错误,Test类的构造函数中参数名称应与其父类构造函数中的参数名相同
B.第3行错误,应使用super关键字调用父类的name属性,改为super.name="hello";
C.第4行错误,调用父类构造方法的语句必须放在子类构造方法中的第一行
D.程序编译通过,无错误

Test 类是 Parent 类的子类。在 Test 类的构造函数中,首先出现的语句是name="hello";,然后才是 super("kitty");。根据Java语法规定,调用父类的构造方法必须作为子类构造函数的第一条语句,因此这里的代码是错误的。

正确的代码如下所示:

public class Test extends Parent {
  public Test(String pName) {
    super("kitty");  // 调用父类构造方法作为第一条语句
    name = "hello";  // 设置子类的实例变量
  }
}

这样,调用父类的构造方法 super("kitty"); 就被放置在了正确的位置。

3.

public class Test {
   public Test(){
     System.out.println(“构造方法一被调用了”);
   }
   public Test(int x){
     this();
     System.out.println(“构造方法二被调用了”);
   }
   public Test(boolean b){
  this(1);
     System.out.println(“构造方法三被调用了”);
   }
   public static void main(String[] args){
    Test test = new Test(true);
   }
}
上面程序的运行结果为()
A.构造方法一、构造方法二和构造方法三都被调用了
B.只有构造方法一被调用了
C.只有构造方法一和构造方法三被调用了
D.只有构造方法三被调用了  
  1. 在主函数中,创建了一个名为 test 的 Test 对象,并传入了布尔值 true
  2. 由于传入的是布尔值 true,所以会调用 Test 类中的带有 boolean 类型参数的构造函数 public Test(boolean b)
  3. 在 public Test(boolean b) 构造函数中,首先出现的语句是 this(1);,表示调用带有 int 类型参数的构造函数 public Test(int x)
  4. 在 public Test(int x) 构造函数中,首先调用了 this(),没有参数,表示调用无参构造函数 public Test()
  5. 在 public Test() 构造函数中,输出了字符串 “构造方法一被调用了”。
  6. 继续执行 public Test(int x) 构造函数中的代码,输出了字符串 “构造方法二被调用了”。
  7. 最后继续执行 public Test(boolean b) 构造函数中的代码,输出了字符串 “构造方法三被调用了”。

因此,根据程序的运行流程,三个构造函数都被调用了,最终的运行结果是构造方法一、构造方法二和构造方法三都被调用了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java程序设计》课程的题库资料,由贺州学院整理,可供学生期末课程复习使用,也可以供相关任课教师出卷使用。 内容示例为: 9. 阅读下列程序片段,写出运行结果。 public class Test { public static void main(String[] args) { int percent = 10; tripleValue(percent); System.out.println(percent); } public static void tripleValue(int x) { x = 3 * x; } } 代码执行后输出的结果是______。 答案:10 [解析] static 关键字应用的场合有:①用来修饰类中定义的变量,这样的变量称为类变量或静态变量。②可以用来修饰类中定义的方法,这样的方法称为静态方法。③用来修饰初始化语句块,这样的语句块常称为静态初始化语句块。static 在这里表示这个方法为类方法,不属于任何对象实例,而是类所有,描述对象的共有动作,可以用类名直接调用。在调用了tripleValue函数之后,函数的值没有返回,所以percent的值还是10。 10. 阅读下列程序片段,写出运行结果。 class Shape { public Shape() { System.out.print("Shape"); } } class Circle extends Shape { public Circle() { System.out.print("Circle"); } } public class Test { public static void main(String[] args) { Shape d = new Circle(); } } 代码执行后输出的结果是______。 答案:ShapeCircle [解析] 继承是而向对象编程的一个主要优点之一,它对如何设计Java类有着直接的影响。继承有如下几点好处: ①它可以利用已有的类来创建自己的类,只需要指出自己的类和已有的其他类有什么不同即可,而且还可以动态访问其他有 关类中的信息。 ②通过继承,可以利用Java类库所提供的丰富而有用的类,这些类都已经被很好地实现。 ③当设计很大的程序时,继承可以使程序组织得层次清晰,有利于程序设计相减少错误的发生。该程序首先编写了一个Shape的类,然后又编写一个类Circle去继承Shape类。由于子类拥有父类所有的属性和方法,所以输出的是ShappeCircle。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值