JAVA习题集4

更新时间:2023-10-07 23:00:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

习题 四

一、判断题

1.如果类A和类B在同一个包中,则除了私有成员外,类A可以访问类B中所有的成员。( )

2.接口中的成员变量全部为常量,方法为抽象方法。 ( ) 3.抽象类可以有构造方法,所以能直接用来生成实例。 ( ) 4.Java的类不允许嵌套定义。 ( )

5.包含抽象方法的类一定是抽象类,但有abstract修饰的类不一定包含抽象方法。 ( )

6.用final修饰的类不能被继承。 ( )

8.接口无构造方法,不能有实例,也不能定义常量。 ( )

9.一个具体类实现接口时,必须要实现接口中的所有方法。 ( ) 10.类具有封装性,但可以通过类的公共接口访问类中的数据。 ( ) 11.子类能继承或覆盖(重写)父类的方法,但不能重载父类的方法。 ( ) 12.用final修饰的方法不能被子类覆盖(重写)。 ( )

13.abstract是抽象修饰符,可以用来修饰类、属性和方法。 ( )

14.父类的静态方法不能被子类覆盖为非静态的方法,反之亦然。 ( ) 15.子类实例化时,子类的构造方法一定会先调用父类的构造方法。 ( ) 16.用final修饰的方法不能被覆盖(重写),也不能有重载的方法。 ( ) 17.接口也可以继承接口,且可以继承多个接口,体现了多重继承性。 ( ) 18.假设类B继承类A,类C继承类B,则在类C中可用super访问类A的方法。 ( )

19.类和接口都可以继承另外一个类。 ( ) 20.抽象类中不能包含final修饰的方法。 ( )

二、选择题

1.Java实现动态多态性是通过( )实现的。

A、重载 B、覆盖 C、接口 D.抽象类 2.下列哪一种描述是正确的?( )

A、动态多态性只针对静态成员方法 B.动态多态性只针对非静态成员方法 C.动态多态性只针对静态成员域 D.动态多态性只针对非静态成员域

3.下列关于重载方法哪一个是正确的描述?( )

A.重载方法的参数形式(类型、参数个数或参数顺序)必须不同 B.重载方法的参数名称必须不同 C.重载方法的返回值类型必须不同 D.重载方法的修饰词必须不同

4.接口的所有成员方法都具有( )修饰的特性。 A. private, final B. public, abstract C. static, protected D. static

5.Java的封装性是通过( )实现的。

A、访问权限控制 B.设计内部类 C、静态域和静态方法 D.包 6.下列说法哪个是正确的?( )

A、子类不能定义和父类同名同参数的方法 B、子类只能继承父类的方法,而不能重载

C、重载就是一个类中有多个同名但有不同形参(类型、参数个数或参数顺序)和方法体的方法

D、子类只能覆盖父类的方法,而不能重载 7.对于下列代码: public class Parent {

public int addValue (int a, int b) { int s; s=a+b; return s; } }

class Child extends Parent { }

下列哪个方法不可以加入类Child?( )

A. public int addValue( int a, int b,int c ) {return a+b+c;} B. int addValue (int a, int b ){return a+b; } C. public int addValue( int a ){return a+1;}

D. public int addValue( int a, int b ) { return a+b+l; }

8.对于下列代码:

1. class Person {

2. public void printValue(int i, int j) {//… } 3. public void printValue(int i){//… } 4. }

5. public class Teacher extends Person {

6. public voidprintValue() { //.... } 7. public voidprintValue(int i) { //… }

8. public static void main(String args[ ] ) { 9. Person t = new Teacher(); 10. t.printValue(10); 11. } 12. }

第10行语句将调用哪行语句?( )

A.第2行 B.第3行 C.第6行 D.第7行

9.以下程序段输出结果的是( )。

public class A implements B {

public static void main(String args[]) { int i;

A c1 = new A(); i = c1.k;

System.out.println(\ } }

interface B { int k = 10; }

A、i=0 B.i=10 C.程序有编译错误 D.i=true

10.阅读下面的程序,输出结果是( )。

public class TestDemo { int m = 5;

public void some(int x) { m = x; }

public static void main(String args[]) { new Demo().some(7); } }

class Demo extends TestDemo { int m = 8;

public void some(int x) { super.some(x);

System.out.println(m); } }

A、5 B、8 C、7 D、编译错误

11.下述哪个方法不可以加入类SubClass? ( )

class SupClass{

public void methodOne(int i){} public void methodTwo(int i){}

public static void methodThree(int i){} public static void methodForth(int i){} }

class SubClass extends SupClass{ }

A. public static void methodOne(int i){ } B. public void methodTwo(int i){ }

C. public static void methodThree(int i,int j){ } D. public static void methodForth(int i){ }

12.关于下面的程序,说法正确的是( )。 class Base{ int m;

public Base(int m){ this.m=m+l; } }

public class Test extends Base { public Test(){ m=m+1; }

public static void main(String args[]){ Test t=new Test();

System.out.print(t.m); } }

A、输出结果为0 B.输出结果为1 C、输出结果为2 D.编译出错

13.关于下面的程序,编译和运行后输出结果是( )。

class Base{ int m=0;

public int getM() { return m; } }

public class Test extends Base { int m=1;

public int getM() {

return m; }

public static void main (String args [] ) { Test t=new Test ();

System.out.print (t.m);

system.out.print (t.getM ()); } }

A. 00 B. 01 C. 10 D. 11

14.设有下面的两个类定义:

class A{

void Show(){

System.out.println(\我喜欢Java!\ } }

class B extends A{ void Show(){

System.out.println (\我喜欢C++!\ } }

则顺序执行如下语句后输出结果为( )。

A a=new A(); B b=new B(); a.show ( ); b.show ();

A、我喜欢Java! B、我喜欢C++!

我喜欢C++! 我喜欢Java! C、我喜欢Java! D、我喜欢C++! 我喜欢Java! 我喜欢C++!

15.现有两个类A和B,以下描述中表示B继承A的是( )。 A. class A extends B B. class B implements A C. class A imvlements D. class B extends A

16.定义类B和类C如下,并将其保存为B.java文件,得到的结果是(

class B{ int b;

)。

B(int i) { b=i; } }

class C extends B{ double c=7.8; }

A.代码能够成功编译运行

B.代码无法编译因为类B不是一个应用程序或小程序

C.代码无法编译,因为类C没有定义一个带参数的构造方法 D.代码无法编译,因为类B没有定义一个不带参数的构造方法

17.类Teacher和Student都是类Person的子类,t、s、p分别是上述三个类的非空引用变量,关于以下语句说法正确的( )。 if(t instanceof Person){ s=(Student)t; }

A.将构造一个Student对象 B.表达式合法

C、编译时非法 D.编译时合法而在运行时可能非法

18.在//point x 处的哪个声明是合法的?( )

class Person { private int a;

public iht change(iht m){ return m; } }

public class Teacher extends Person { public int b;

public static void main(String arg[])( Person p=new Person(); Teacher t=new Teacher(); int i; //point x } }

A. i=m; B.i=b;

C. i=p. a; D.i=p.change(30);

19.下面关于继承的叙述哪些是正确的?( ) A.在Java中的类只允许继承一个类

B.在Java中一个类允许继承多个类

C.在Java中一个类不能同时继承一个类和实现一个接口 D、在Java中接口可以继承一个或多个接口

20.下列哪些方法与方法public void add(int a) { }构成重载方法?( ) A. public int add(int a) B. public long add(long a) C. public void add(int a,int b) D. public void add(float a) 21.在Java语言中,类Cat是类Animal的子类,Cat的构造方法中有一句super(),该语句表达了什么含义?( )

A.调用类Cat中定义的super()方法 B、调用类Animal中定义的super()方法 C、调用类Animal的构造方法 D、语法错误

22.定义一个类名为MyClass.java的类,并且该类可被一个工程中的所有类访问,那么该类的正确声明应为( )。

A. private class MyClass extends Object B. class MyClass extends Object

C. public class MyClass extends Object D. protected class MyClass extends Object

23.关于下面的程序,以下哪个结论是正确的?( )

1. public class Test{ 2. public Test () {

3. System.out.print (\4. }

5. public void Test () {

6. System.out.print ( \7. }

8. public static void main (String args [ ] ) { 9. Test t=new Test(); 10. t.Test();

11. System.out .print (\12. } 13. }

A、程序可以通过编译并正常运行,输出结果为21 B.程序可以通过编译并正常运行,输出结果为31 C.程序可以通过编译并正常运行,输出结果为321 D.程序无法通过编译

24.给定如下Java程序: class A{

public A () {

System.out .print (\ } }

class B extends A{ public B() {

System.out .print (\}

public static void main (String[] args) { B b=new B(); } }

上述程序将( )。 A、不能通过编译

B、通过编译,执行后输出为AB C、通过编译,执行后输出为B D、通过编译,执行后输出为A 25.已知MyInterface是一个接口,ClassA是实现了MyInterface的一个类,ClassB是ClassA的子类,则下列哪个语句是正确的?( )

A. ClassB obj = new ClassA();

B. MyInterface obj = new ClassB(); C. ClassA obj=new MyInterface();

D. MyInterface obj=new MyInterfaee();

26.A派生出子类B,B派生出子类C,并且在Java源代码中有如下声明: A a0=new A(); A a1=new B(); A a2=new C ();

以下哪个说法是正确的?( ) A.只有第l行能通过编译

B.第1行和第2行能通过编译,但第3行编译出错

C.第1~3行能通过编译,但第2行和第3行运行时出错 D.第1行、第2行和第3行的声明都是正确的

28.对于以下类: class A{ }

class B extends A{ } class C extends A{ }

public class Test {

public static void main (String args [] ) { A x=new A(); B y=new B(); C z=new C();

//此处插人一条语句 } }

下面哪个语句可以放到插入行? A. x=y; B. z=x; C. z=(c)y; D. y=(a)y;

三、程序阅读题

1.仔细阅读下面的程序代码,若经编译和运行后,请写出打印结果。

class Overload {

void testOverload(int i) {

System.out.println(\ }

void testOverload(String s) {

System.out.println(\ }

public static void main(String args[ ]){ Overload a=new Overload (); char ch='x';

a.testOverload(ch); } }

2.仔细阅读下面的程序代码,请将划线上(1)~(5)的语句补充完整。

abstract class Person{ private String name;

public Person(String n){ name=n; }

public (1) String getMajor(); public String (2) (){ return name; } }

class Student (3) Person{

private (4) ;

public Student(String n, String m){ super(n);

major= m; }

public String (5) () { return \专业是:\

} }

public class TestPerson{

public static void main (String args [ ] ) { Person p= new Student (\张三\软件工程\

System.out.println(p.getName() +\ } }

3.写出下列程序代码的运行结果。

public class Test { int m=1;

public void some (int x) { m=x; }

public static void main (String args []) { new Demo().some(2); ) }

class Demo extends Test { int m=3;

public void some (int x) ( super.some(x);

System.out.print(m);

System.out.print(super.m); } }

4.写出下列程序代码的运行结果。

class A{

int m= 0,n= 0;

long f () { return m+n; } }

class B extends A{ int m=1, n=1; long f() {

long result= 0; super.m= 10; super.n= 30;

result= super.f ( ) + (m+ n); return result; }

long g() {

long result= 0; result=super.f (); return result/2; } }

class Example {

public static void main (String args [ ] ) { B b=new B(); b.m=6; b.n=2;

long resultOne=b.g(); long resultTwo=b.f(); long resultThree=b.g();

System.out.println( \ System.out.println(\

System.out.println( \ } }

5.下面的程序运行结果是什么?

class Tree { }

class Pine extends Tree { } class Oak extends Tree { } public class Forest {

public static void main(String[] args) { Tree tree = new Pine(); if (tree instanceof Pine)

System.out.println(\ if (tree instanceof Tree)

}

System.out.println(\if (tree instanceof Oak)

System.out.println(\ else

System.out.println(\}

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

abstract class Base {

abstract public void myfunc();

public void another() {

System.out.println(\ } }

public class Abs extends Base {

public static void main(String argv[]) { Base b = new Abs(); b.another(); }

public void myfunc() {

System.out.println(\ }

public void another() { myfunc(); } }

7.下面的程序运行结果是什么?

class Super { }

public class Sub extends Super {

public Sub() { public Super() { }

i = 1;

public int i = 0;

}

}

i = 2;

public static void main(String args[]) { }

Sub s = new Sub(); System.out.println(s.i);

8.下面的程序运行结果是什么?

class Person {

public Person() {

System.out.println(\ }

public Person(String s) { this();

System.out.println(\ } }

public class Who extends Person { public Who() {

this(\ }

public Who(String s) { super(s);

System.out.println(\ }

public static void main(String args[]) { Who w = new Who(\ } }

9.阅读下面的程序,修改程序中错误的地方(提示:共三处错误)。

1. interface Shape{ 2. double PI;

3. double area (); 4. }

5. class Cycle extends Shape{ 6. private double r;

7. public Cycle (double r) { 8. this.r=r; 9. }

10. double area () { 11. return PI*r*r; 12. } 13. }

14. public class Test{

15. public static void main (String args [ ] ) { 16. Cycle c=new Cycle (1.5);

17. System.out.println(\面积为:\18. } 19. }

10.阅读下面的程序代码,写出程序运行的输出结果。

class ParentClass { int x=0;

int sum(int a,int b, int c) { return a+b+c; }

int sum(int a,int b) { return a+b; } }

class ChildClass extends ParentClass{ public ChildClass () { x=10; }

int sum(int a,int b) { return a+b+1; } }

Test.java

public class Test { public static void main (String args [] ) { ParentClass p=new ChildClass (); System.out.println (p.sum (5, 5, 5)); System.out.println(p.sum(5,5));

System.out.println(p.x);

} }

11.阅读下面的程序代码,写出程序运行的输出结果。

public class TestSample {

public static void main(String args[]) { Sub obj1 = new Sub(); Super obj2 = new Sub(); Super obj3 = new Super();

System.out.println(obj1.method1()); System.out.println(obj2.method1()); System.out.println(obj3.method1()); } }

class Super {

int x = 1, y = 2;

int method1() {

return (x < y ? x : y); } }

class Sub extends Super { int method1() {

return ((x > y) ? x : y); } }

四、 编程题

1、按以下要求编写程序。

(1)根据下面的要求实现圆类Circle: Circle类的成员变量:radius 半径。 Circle类的方法成员如下所示:

Circle():构造方法,将半径置为0。

Circle(double r):构造方法,创建Circle对象时将半径初始化为r。 double get Radius():获得圆的半径值。 double get Perimeter():获得圆的周长。

double gerArea():获得圆的面积。

void disp():将圆的半径、周长、面积输出到屏幕上。

(2)继承上题中的圆Circle类,派生圆柱体类Cylinder,要求如下。

Cylinder类的成员变量:height表示圆柱体的高。 Cylinder类的方法成员如下所示。

Cylinder(doubler,double h)构造方法:创建Cylinder对象时将圆半径初始化为r,圆柱高初始化为h。

double getHeight():获得圆柱体的高。

double getCylinderArea():获得圆柱体的面积。 double getVol():获得圆柱体的体积。

void dispVol():将圆柱体的体积输出到屏幕。

2、按以下要求编写程序。

(1)定义一个Shape接口,该接口中只有一个抽象方法getArea(),该方法无参数,返回值类型为double型。

(2)定义一个圆类Circle,满足以下条件。

①Circle类实现Shape接口。

②定义Circle类的成员变量r,表示圆的半径,数据类型为int。 ③定义Circle类的构造方法,参数名为r,用该参数初始化圆的半径。 ④实现getArea()方法,计算圆的面积(圆周率取3.14)。

(3)编写一个测试类,类名为TestCircle,利用Circle类计算半径为5的圆的面积,并将面积在屏幕打印出来。

3.定义一个接口Shape,其中包括一个方法area(),设计“三角形”、“圆”、“长方形”等类实现Shape接口。分别创建一个“三角形”、“圆”、“长方形”对象存入一个类型为Shape的数组中,将数组中各类图形的面积输出。

5.按以下要求编程程序。

(1)编写一个抽象类Animal,其成员变量有name、age、weight表示动物名、年龄和质量。方法有showlnfo()、move()和eat(),其中后面两个方法是抽象方法。 (2)编写一个类Bird继承Animal,实现相应的方法。通过构造方法给name、age,weight分别赋值,showInfo()打印鸟名、年龄和质量,move()方法打印鸟的运动方式,eat()打印鸟喜欢吃的食物。

(3)编写测试类TestAnimal,用Animal类型的变量,调用Bird对象的三个方法。 6.尽量少写相同的代码编写程序描述如图所示的类层次,其中人为父类Person,其属性包括姓名、性别、出生日期等,方法为printInfo()打印信息。教师Teacher还包括学校和工号属性;学生Student还包括学校、学号、专业、年级和班级等属性;编写一个测试类TestPerson,在main方法中创建1名教师和1名学生对象,输出对象的所有属性信息。

7.为管理学校中教师的工作证和学生的学生证设计一个类体系结构,尽可能保证代码的重用率。假设教师工作证包括编号、姓名、出生年月、部门、职务和签发工作日期;学生证包括编号、姓名、出生年月、学院、专业、入校时间及每学年的注册信息等。

8.按以下要求编写程序。

(1)定义接口AreaInterface,该接口有一个双精度浮点型的常量PI,它的值等于Math.PI;含有一个求面积的方法double area()。

(2)定义一个Rectangle(长方形)实现AreaInterface接口,该类有两个private访问权限的双精度浮点型变量x(长)和y(宽);定义一个public访问权限的构造方法,用来给类变量赋值;实现area()方法得到长方形的面积;定义toString()方法,返回一段字符串信息,内容如下格式:“该长方形面积为:”+面积。

(3)定义一个TestArea类,在它的main()方法中;创建一个Rectangle的实例,长为10.0,宽为20.0,输出它的面积。

9.编写一个汽车类Car。 Car具有以下属性。

品牌:brand,类型为String;发动机排量:engineDisplacement,类型为double;速度:speed,类型为double;状态:status,类型为boolean;最高时速:maxSpeed,类型为double。

Car具有以下方法。

构造方法:Car(String brand,double engineDisplacement,double maxSpeed),该方法使用参数设置成员变量的值。

启动:start(),该方法使得status的值变成true。

加速:speedup(),当汽车处于启动状态时,该方法每调用一次,速度增加5,但速度不得高于最高时速。 ,

减速:slowdown(),当汽车处于启动状态时,该方法每调用一次,速度减5,但速度不得小于0。

熄火:stop(),当speed为零时,将status的值变成false。

每个方法除了改变成员变量的之外,还要打印出方法执行后的状态和速度。

编写main方法实例化一个Car对象,其品牌为“红旗”,排量为2.0,最高时速为160.00,启动该汽车,加速到120,再减速到0,最后熄火。

10.运输工具Vehicle都有名称(name)、品牌(brand)、最大载重量(loadCapacity)、当前载重量(load)、最高速度(maxSpeed)、速度(speed)等属性,也都有移动(move)、加速(speedup)、减速(slowdown)、停止(stop)等方法。飞机Plane、汽车Car、轮船Ship、马车Wagon概不例外。虽然都有move和stop方法,但其实现不同。其他方法的实现相同。请编写相应的类,尽量少写相同的代码。编写一个测试类TestVehicle,在其main方法中声明一个Vehicle类型的引用变量vehicle,分别引用一个Plane、Car、Ship、Wagon对象,并执行相应的方法。

本文来源:https://www.bwwdw.com/article/e9ud.html

Top