【无标题】

发布于:2023-12-04 ⋅ 阅读:(82) ⋅ 点赞:(0)

1:父类对子类的引用

A 派生出子类 B , B 派生出子类 C ,并且在 java 源代码有如下声明:

  1. A a0=new A();
  2. A a1=new B();
  3. 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.

本文含有隐藏内容,请 开通VIP 后查看