JAVA复习题继承.docx
《JAVA复习题继承.docx》由会员分享,可在线阅读,更多相关《JAVA复习题继承.docx(40页珍藏版)》请在冰豆网上搜索。
![JAVA复习题继承.docx](https://file1.bdocx.com/fileroot1/2023-1/25/4dcc98ca-c884-48d5-95cb-a2c2b4d5ad3f/4dcc98ca-c884-48d5-95cb-a2c2b4d5ad3f1.gif)
JAVA复习题继承
类的继承习题
一、选择题
1.Java语言的类间的继承关系是(B)。
A)多重的B)单重的C)线程的D)不能继承
2.以下关于Java语言继承的说法正确的是(C)。
A)Java中的类可以有多个直接父类B)抽象类不能有子类
C)Java中的接口支持多继承D)最终类可以作为其它类的父类
3.现有两个类A、B,以下描述中表示B继承自A的是(D)。
A)classAextendsBB)classBimplementsA
C)classAimplementsBD)classBextendsA
4.下列选项中,用于定义接口的关键字是(A)。
A)interfaceB)implementsC)abstractD)class
5.下列选项中,用于实现接口的关键字是(B)。
A)interfaceB)implementsC)abstractD)class
6.Java语言的类间的继承的关键字是(B)。
A)implementsB)extendsC)classD)public
7.以下关于Java语言继承的说法错误的是(A)。
A)Java中的类可以有多个直接父类B)抽象类可以有子类
C)Java中的接口支持多继承D)最终类不可以作为其它类的父类
8.现有两个类M、N,以下描述中表示N继承自M的是(D)。
A)classMextendsNB)classNimplementsM
C)classMimplementsND)classNextendsM
9.现有类A和接口B,以下描述中表示类A实现接口B的语句是(A)。
A)classAimplementsBB)classBimplementsA
C)classAextendsBD)classBextendsA
10.下列选项中,定义抽象类的关键字是(C)。
A)interfaceB)implementsC)abstractD)class
11.下列选项中,定义最终类的关键字是(D)。
A)interfaceB)implementsC)abstractD)final
12.下列选项中,哪个是java语言所有类的父类(C)
A)StringB)VectorC)ObjectD)KeyEvent
13.java语言中,用于判断某个对象是否是某个类的实例的运算符是(A)
A)instanceofB)+C)isinstanceD)&&
14.下列选项中,表示数据或方法可以被同一包中的任何类或它的子类访问,即使子类在不同的包中也可以的修饰符是(B)
A)publicB)protectedC)privateD)final
15.下列选项中,表示数据或方法只能被本类访问的修饰符是(C)
A)publicB)protectedC)privateD)final
16.下列选项中,接口中方法的默认可见性修饰符是(A)
A)publicB)protectedC)privateD)final
17.下列选项中,表示终极方法的修饰符是:
(B)
A)interfaceB)finalC)abstractD)implements
18.下列选项中,定义接口MyInterface的语句正确的是:
(A)
A)interfaceMyInterface{}B)implementsMyInterface{}
C)classMyInterface{}D)implementsinterfaceMy{}
19.如果子类中的方法mymethod()覆盖了父类中的方法mymethod(),假设父类方法头部定义如下:
voidmymethod(inta),则子类方法的定义不合法的是:
(C)
A)publicvoidmymethod(inta)B)protectedvoidmymethod(inta)
C)privatevoidmymethod(inta)D)voidmymethod(inta)
二、填空题
1.如果子类中的某个变量的变量名与它的父类中的某个变量完全一样,则称子类中的这个变量________了父类的同名变量。
(隐藏)
2.属性的隐藏是指子类重新定义从父类继承来的__________。
(同名变量或属性)
3.如果子类中的某个方法的名字、返回值类型和________与它的父类中的某个方法完全一样,则称子类中的这个方法覆盖了父类的同名方法。
(参数列表)
4.Java仅支持类间的____重继承。
(单重)
5.抽象方法只有方法头,没有________。
(方法体)
6.Java语言的接口是特殊的类,其中包含______常量和_______方法。
(static(静态);abstract(抽象))
7.接口中所有属性均为_________、_________和________的。
(public、static、final)
8.如果接口中定义了一个方法methodA(),一个属性attA,那么一个类ClassA要实现这个接口的话,就必须实现其中的_______方法。
(methodA())
9.一个类如果实现一个接口,那么它就必须实现接口中定义的所有方法,否则该类就必须定义成________的。
(抽象的)
10.如果子类中的某个方法的名字、__________和参数列表与它的父类中的某个方法完全一样,则称子类中的这个方法覆盖了父类的同名方法。
(返回值类型)
11.Java仅支持类间的单重继承,接口可以弥补这个缺陷,支持_____重继承(多重)
12.在方法头用abstract修饰符进行修饰的方法叫做________方法。
(抽象)
13.Java语言中用于表示类间继承的关键字是___________。
(extends)
14.接口中所有方法均为________和________的。
(public、abstract)
15.Java语言中,表示一个类不能再被继承的关键字是________。
(final)
16.Java语言中,表示一个类A继承自父类B,并实现接口C的语句是_________________。
(classAextendsBimplementsC)。
17.如果子类中的方法compute()覆盖了父类中的方法compute(),假设父类的compute()方法头部有可见性修饰符public,则methodS()的可见性修饰符必须是__________。
(public)
三、程序阅读题
1.现有类说明如下,请回答问题:
publicclassA
{
Stringstr1="Hello!
\t";
Stringstr2="Howareyou?
";
publicStringtoString()
{returnstr1+str2;}
}
publicclassBextendsA
{
Stringstr1="\b\b,Bill.";
publicStringtoString()
{returnsuper.str1+str1;}
}
问题:
1)类A和类B是什么关系?
(继承关系)
2)类A和类B都定义了str1属性和方法toString(),这种现象分别称为什么?
(属性的隐藏;方法的覆盖)
3)若a是类A的对象,则a.toString()的返回值是什么?
(Hello!
Howareyou?
)
4)若b是类B的对象,则b.toString()的返回值是什么?
(Hello,Bill.)
2.现有一个类定义如下,请回答问题:
classEmployee
{
Stringname;
intage;
doublewage;
staticintNo=0;
Employee(Stringa1,inta2,doublea3)
{
name=a1;age=a2;wage=a3;
No++;
}
}
在使用该类时,已使用下面语句生成了该类的对象:
Employeee1,e2;
e1=newEmployee("王劲",26,6300);
e2=newEmployee("张山",30,3800);
问题:
1)e2.name,e2.age,e2.wage的值各是什么?
(张山;30;3800.0)
2)生成对象e1、e2后,e1.No值为多少?
能否通过类名做前缀引用属性No?
(2;能)
3.阅读程序,回答问题。
publicclassInheritTest1
{
publicstaticvoidmain(String[]args)
{
Aaa;Bbb;
aa=newA();bb=newB();
aa.show();bb.show();
}
}
classA
{
inta=1;
doubled=2.0;
voidshow()
{A:
"+"\ta="+a+"\td="+d);}
}
classBextendsA
{
floata=3.0f;
Stringd="Javaprogram.";
intb=4;
voidshow()
{
A:
"+"\ta="+super.a+"\td="+super.d);
super.show();
B:
"+"\ta="+a+"\td="+d+"\tb="+b);
}
}
问题:
1)这是哪一类java程序?
(java应用程序)
2)类A和类B是什么关系?
(类B是类A的子类)
3)按程序输出的格式写出程序运行后的结果.
(程序运行结果如下:
ClassA:
a=1d=2.0
ClassA:
a=1d=2.0
ClassA:
a=1d=2.0
ClassB:
a=3.0d=Javaprogram.b=4)
4.现有类说明如下,请回答问题:
classA
{
intx=10;
intgetA(){returnx;}
}
classBextendsA
{
intx=100;
intgetB(){returnx;}
}
问题:
1)类B是否能继承类A的属性x?
(能)
2)若b是类B的对象,则b.getB()的返回值是什么?
(100)
3)若b是类B的对象,则b.getA()的返回值是什么?
(10)
4)类A和类B都定义了x属性,这种现象称为什么?
(属性的隐藏)
5.有如下源程序,请回答问题:
classA
{Strings="classA";}
classBextendsA
{Strings="classB";}
publicclassTypeConvert
{
publicstaticvoidmain(Stringargs[])
{
Bb1,b2=newB();
Aa1,a2;
a1=(A)b2;
a2=b2;
b1=(B)a1;
}
}
问题:
该程序的四行输出各是什么?
(classA
classA
classB
classB)
6.现有类说明如下,请回答问题:
publicclassA
{
intx=888;
Stringstr="Ilike:
";
publicStringtoString()
{returnstr+x;}
}
publicclassBextendsA
{
Stringx="java";
publicStringtoString()
{returnstr+x+"and"+super.x;}
}
问题:
1)类A和类B是什么关系?
(类B是类A的子类)
2)类A和类B都定义了x属性和方法toString(),这种现象分别称为什么?
(属性的隐藏和方法的覆盖)
3)若a是类A的对象,则a.toString()的返回值是什么?
(Ilike:
888)
4)若b是类B的对象,则b.toString()的返回值是什么?
(Ilike:
javaand888)
7.运行类C的输出结果是什么?
classA
{
publicA()
{
“ThedefaultconstructorofAisinvoked”);
}
}
classBextendsA
{
publicB()
{
}
}
publicclassC
{
publicstaticvoidmain(String[]args)
{
Bb=newB();
}
}
8.阅读下列程序写出输出结果:
classA
{Strings="classA";
voidshow()
{
}
}
classBextendsA
{Strings="classB";
voidshow()
{
}
}
publicclassTypeConvert
{
publicstaticvoidmain(Stringargs[])
{
Bb1;
Bb2=newB();
Aa1,a2;
a1=(A)b2;
a2=b2;
a1.show();
a2.show();
b1=(B)a1;
);
b1.show();
b2.show();
}
}
答案:
classA
classB
classA
classB
classB
classB
classB
classB
四、程序填空题
1.下面是一个类的定义,完成程序填空。
(Youwritethis.x=x;)
publicclassYouwrite
{
intx;
_______(){x=0;}
Youwrite(intx)
{_____;}
}
2.下面是定义一个接口ITF的程序,完成程序填空。
(interfaceabstract)
public_______ITF
{
publicstaticfinaldoublePI=Math.PI;
public______doublearea(doublea,doubleb);
}
3.下面是定义一个接口A的程序,完成程序填空。
(final”;”)
publicinterfaceA
{
publicstatic_______doublePI=3.14159;
publicabstractdoublearea(doublea,doubleb)_____
}
五、编程题
简单类的继承:
1.定义一个类,描述一个矩形,包含有长、宽两种属性,和计算面积方法。
编写一个类,继承自矩形类,同时该类描述长方体,具有长、宽、高属性,和计算体积的方法。
编写一个测试类,对以上两个类进行测试,创建一个长方体,定义其长、宽、高,输出其底面积和体积。
publicclassTestExtends{
publicstaticvoidmain(String[]args){
LiFangTif=newLiFangTi();
f.length=2;
f.width=3;
f.height=7;
}
}
classJuXing{
intlength;
intwidth;
intfindArea(){
returnlength*width;
}
}
classLiFangTiextendsJuXing{
intheight;
intfindVolume(){
returnfindArea()*height;
}
}
3.定义一个Person类,它包括的属性有“姓名”和“性别”,为Person类派生出一个子类Student类,为Student子类添加两个属性年龄和成绩等级(用A,B,C,D,E表示),在子类中打印出学生的姓名、性别、年龄及成绩等级。
classPerson{
protectedStringname;
protectedStringsex;
Person(Stringname,Stringsex){
this.name=name;
this.sex=sex;
}
publicStringtoString(){
Strings=newString();
s=name+"\t"+sex;
returns;
}
}
classStudentextendsPerson{
protectedintage;
protectedchargrade;
Student(Stringname,Stringsex,intage,chargrade){
super(name,sex);
this.age=age;
this.grade=grade;
}
voidprint(){
Strings=newString();
s=super.toString();
s=s+"\t"+age+"\t"+grade;
}
}
publicclassTestP{
publicstaticvoidmain(String[]args){
Studentst1=newStudent("zhangfei","male",23,'E');
Studentst2=newStudent("liubei","male",25,'A');
de");
st1.print();
st2.print();
}
}
4.定义一个类Rectangle代表矩形,其中包括计算面积的方法。
再定义一个它的子类Square代表正方形],其中也包含计算面积的方法。
编写一程序,测试新建子类对象的属性和方法。
classRectangle{
floatlength;
floatwidth;
Rectangle(floatlen,floatwh){
length=len;
width=wh;
}
floatgetArea(){
returnlength*width;
}
}
classSquareextendsRectangle{
floatlength;
Square(floatlen){
super(len,len);
length=len;
}
floatgetArea(){
returnsuper.getArea();
}
}
publicclassTestRectangle{
publicstaticvoidmain(String[]args){
Squaresq=newSquare(5.2f);
is"+sq.length+",areais"+sq.getArea());
}
}
类与对象习题
一、选择题
1定义类头时,不可能用到的关键字是(B)。
A)classB)privateC)extendsD)public
2.下列类定义中,不正确的是(C)。
A)classx{....}
B)classxextendsy{....}
C)staticclassximplementsy1,y2{....}
D)publicclassxextendsApplet{....}
3.下列类头定义中,错误的是(A)。
A)publicxextendsy{...}
B)publicclassxextendsy{...}
C)classxextendsyimplementsy1{...}
D)classx{...}
4.设A为已定义的类名,下列声明A类的对象a的语句中正确的是(D)。
A)floatAa;B)publicAa=A();
C)Aa=newint();D)staticAa=newA();
5.设A为已定义的类名,下列声明A类的对象a的语句中正确的是(A)。
A)publicAa=newA();B)publicAa=A();
C)Aa=newclass();D)aA;
6.设X、Y均为已定义的类名,下列声明类X的对象x1的语句中正确的是(C)。
A)publicXx1=newY();B)Xx1=X();
C)Xx1=newX();D)intXx1;
7.设X、Y为已定义的类名,下列声明X类的对象x1的语句中正确的是(A)。
A)staticXx1;B)publicXx1=newX(int123);
C)Yx1;D)Xx1=X();
8.通过类MyClass中的不含参数的构造方法,生成该类的一个对象obj,可通过以下语句实现:
_______________________________。
(MyClassobj=newMyClass();)
9.设i,j为类X中定义的int型变量名,下列X类的构造方法中不正确的是(A)。
A)voidX(intk){i=k;}B)X(intk){i=k;}
C)X(intm,intn){i=m;j=n;}D)X(){i=0;j=0;}
10.有一个类A,以下为其构造方法的声明,其中正确的是(A)。
A)publicA(intx){...}B)staticA(intx){...}
C)publica(intx){...}D)voidA(intx){...}
11.有一个类A,以下为其构造方法的声明,其中正确的是(B)。
A)voidA(intx){...}B)A(intx){...}
C)a(intx){...}D)voida(intx){...}
12.设i、j、k为类X中定义的int型变量名,下列类X的构造方法中不正确的是(B)。
A)X(intm){...}B)voidX(intm){...}
C)X(intm,intn){...}D)X(inth,intm,intn){...}
13.设i,j为类X中定义的double型变量名,下列X类的构造方法中不正确的是(A)。
A)doubleX(doublek){i=k;returni;}C)X(){i=6;j=8;}
B)X(doublem,doublen){i=m;j=n;}D)X(doublek){i=k;}
14.设a,b为类MyClass中定义的int型变量名,下列MyClass类的构造方法中不正确的是(A)。
doubleMyClass(doublek){a=k;returna;}
MyClass(){a=6;b=8;}
MyClass(doublem,doublen){a=m;b=n;}
MyClass(doublek){a=k;}
15定义类头时,不可能用到的关键字是(A)。
A)protectedB)classC)extendsD)public
16.下列类头定义中,错误的是(A)。
A)publicTestClassextendsy{...}
B)publicclassTestClassextendsy{...}
C)classTestClassextendsyimplementsy1{...}
classTestClass{...}
17.设B为已定义的类名,下列声明B类的对象b的语句中正确的是(D)。
A)floatBb;B)publicBb=B();
C)Bb=newint();D)staticBb=newB();
18.设ClassA为已定义的类名,下列声明ClassA类的对象ca的语句中正确的是(A)。
A)publicClassAca=newClassA();B)publicClassAca=ClassA();
C)ClassAca=newclass();D)caClassA;
19.设A、B均为已定义的类名,下列声明类A的对象a1的语句中正确的是(C)。
A)publicAa1=newB();B)Aa1=A();
C)Aa1=newA(