JAVA习题集4
更新时间:2023-10-07 23:00:02 阅读量: 综合文库 文档下载
- java推荐度:
- 相关推荐
习题 四
一、判断题
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对象,并执行相应的方法。
正在阅读:
JAVA习题集410-07
模板工程及支撑系统配置方案10-28
部门行政管理(在线作业三)09-26
拓扑空间中集合的导集12-07
2014北京东城区小学划片区域信息全解03-08
如何测量甲醛是否超标12-16
市生态环境局最新年终工作总结与2022工作计划精选范例04-22
高中政治必修一全套教案表格版 - 图文05-05
广州市四年级信息技术教案(第一册)03-06
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 习题集
- JAVA