版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 类的封装性、继承性、多态性及接口1、 判断题1. 如果类A和类B在同一个包中,则除了私有成员外,类A可以访问类B中所有的成员。()2. 接口中的成员变量全部为常量,方法为抽象方法。()3. 抽象类可以有构造方法,所以能直接用来生成实例。()4. Java的类不允许嵌套定义。()5. 包含抽象方法的类一定是抽象类,但有abstract修饰的类不一定包含抽象方法()6. 泛型只能用于类的定义中,不能用于接口的定义中。()7. 用final修饰的类不能被继承。()8. 接口无构造器,不能有实例,也不能定义常量。()9. 一个具体类实现接口时,必须要实现接口中的所有方法。()10. 类具有封装
2、性,但可以通过类的公共接口访问类中的数据。()11. 子类能继承或覆盖(重写)父类的方法,但不能重载父类的方法。()12. 用final修饰的方法不能被子类覆盖(重写)。()13. abstract是抽象修饰符,可以用来修饰类、属性和方法。()14. 父类的静态方法不能被子类覆盖为非静态的方法,反之亦然。()15. 子类实例化时,子类的构造方法一定会先调用父类的构造方法。()16. 用final修饰的方法不能被覆盖(重写),也不能有重载的方法。()17. 接口也可以继承接口,且可以继承多个接口,体现了多重继承性。()18. 假设类B继承类A,类C继承类B,则在类C中可用super访问类A的方法
3、。()19. 类和接口都可以继承另外一个类。()20. 抽象类中不能包含final修饰的方法。()二、选择题1. Java实现动态多态性是通过()实现的。 A. 重载 B. 覆盖 C. 接口 D. 抽象类2. 下列哪一种描述是正确的?() A. 动态多态性只针对静态成员方法 B. 动态多态性只针对非静态成员方法 C. 动态多态性只针对静态成员域 D. 动态多态性只针对非静态成员域3. 下列关于重载方法哪一个是正确的描述?() A. 重载方法的参数形式(类型、参数个数或参数顺序)必须不同 B. 重载方法的参数名称必须不同 C. 重载方法的返回值类型必须不同 D. 重载方法的修饰词必须不同4. 接
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 publ
5、ic 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+1;8. 对于下列代码:
6、1. class Person2. public void printValue(int i, int j) /.3. public void printValue(int i) /.4. 5. public classTeacher extends Person6. public void printValue() /. 7. public void printValue(int i) /.8. public static void main(String args)9. Peson t=new Teacher();10. t. printValue(10);11. 12. 第10行语句将调
7、用哪行语句?() 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(“i=”+i); interface B int k=10; A. i=0 B. i=10 C. 程序有编译错误 D. i=true10. 阅读下面的程序,输出结果是()? public class TestDemo int m=5; public void som
8、e(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 SupClasspublic void methodOne (int i ) public void methodTwo (int i ) publ
9、ic 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. 关于下面的程序,说法正确的是()。 cl
10、ass Baseint m;public Base(int m) this.m=m+1; 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 Baseint m=0;public int getM()return m; public class Test
11、 extends Baseint 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. 1114. 设有下面的两个类定义:class Avoid Show()System.out. println(“我喜欢Java!”); class B extends A void Show()System.out. println(“我喜欢C+
12、!”); 则顺序执行如下语句后输出结果为()。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 implements D. class B extends A16. 定义类B和类C如下,并将其保存为B. java文件,得到的结果是()。 clas
13、s Bint b; B(int i)b=i;class C extends Bdouble 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. 编译时
14、合法而在运行时可能非法18. 在/ point x处的哪个声明是合法的?() class Person privaate int a; public int change(int m) return m; public class Teacher extends Person public int b; public static void main(String args) 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.
15、 下面关于继承的叙述哪些是正确的?()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 voidadd(float a)21. 在Java语言中,类Cat是类Animal的子类,Cat的构造方法中
16、有一句super(),该语句表达了什么含义?()A. 调用类Cat中定义的super()方法 B. 调用类Animal中定义的super()方法C. 调用类Animal的构造方法 D. 语法错误22. 定义一个类名为Myclass. java的类,并且该类可被一个工程中的所有类访问,那么该类的正确声明应为()。A. private class MyClass extends ObjectB. class Myclass extends ObjectC. public class MyClass extends ObjectD. Protected class MyClass extends O
17、bject23. 关于下面的程序,以下哪个结论是正确的?()1. public class Test2. public Test()3. System.out.print(“3”);4. 5. public void Test()6. System.out.print(“2”);7. 8. public static void main(String args)9. Test t=new Test();10. t.Test();11. System.out.print(“1”);12. 13. A. 程序可以通过编译并正常运行,输出结果为21 B. 程序可以通过编译并正常运行,输出结果为31
18、C. 程序可以通过编译并正常运行,输出结果为321 D. 程序无法通过编译24. 给定如下Java程序: class A public A()rint(“A”); class B extends A public B() System.out.print(“B”) public static void main(String args) B b=new B(); 上述程序将()。A. 不能通过编译 B. 通过编译,执行后输出为AB C. 通过编译,执行后输出为BD. 通过编译,执行后输出为A25. 已知MyInterface是一个接口,ClassA是实现了MyInterface的一个类,Cla
19、ssB是ClassA 的子类,则下列哪个语句是正确的?()A. ClassB obj=new ClassA();B. Myinterface obj=new ClassB();C. ClassA obj=new MyInterface();D. MyInterface obj=new MyInterface();26. A派生出子类B,B派生出子类C,并且在Java源代码中有如下声明: A a0=new A(); A a1=new B(); A a2=new C();以下哪个说法是正确的?()A. 只有第1行能通过编译B. 第1行和第2行能通过编译,但第3行编译出错C. 第13行能通过编译,但
20、第2行和第3行运行时出错D. 第1行、第2行和第3行的声明都是正确27. 考虑以下代码: class C1 interface C2 class C3 extends C1 implements C2 class C4 <T extends C1 & C2> 则下列哪个语句是正确的?()A. C4<C1> c41=new C4<C1>();B. C4<C2> c42=new C4<C2>();C. C4<C3> c43=new C4<C3>();D. C4<T> c44=new C4<
21、T>();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;29. 设有一个类的代码如下: class Outer public class Inner1 public static class Inner2 则在另一
22、个类的代码中,下列哪个语句是正确的?()A. Outer.Inner1 obj=new Outer.Inner1();B. Outer.Inner2 obj=new Outer.Inner2();C. Outer.Inner1 obj=new Outer.Inner1() .new Inner1();D. Outer.Inner2 obj=new Outer(). new Inner2();30. 以下关于泛型的说法哪个是错误的?()A. 泛型是通过类型参数来提高代码复用性的一种技术B. 通过在类名后增加类型参数可以定义具有泛型特点的类C. 通过在接口名后增加类型参数可以定义具有泛型特点的接口
23、D. 一个泛型类只能有一个类型参数2、 程序阅读题1. 仔细阅读下面的程序代码,若经编译和运行后,请写出打印结果。 class Overloadvoid testOverload(int i) System.out.println(“int”); void testOverload(String s) System.out.println(“String”); public static void main(String args) Overload a=new Overload(); char ch=x; a.testOverload(ch);2. 仔细阅读下面的程序代码,请将划线上(1)(
24、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”专业是:”+major; public class TestPerson publi
25、c static void main(String args) Person p=new Student(“张三”,”软件工程”); System.out.println(p.getName()+”,”+p.getMajor(); 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
26、 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
27、/2; class Examplepublic 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(“resultOne=”+resultOne); System.out.println(“resultTwo=”+resultTwo); System.out.println(“resultThree=”+resultThree); 5. 下面的程序运行结果是什么? c
28、lass 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 ( " Pine " ) ; if ( tree instanceof Tree) System . out . println ( " Tree "
29、) ; if ( tree instanceof Oak) System . out . println ( " Oak " ) ; else System . out . println ( " Oops " ) ; 6. 下面的程序运行结果是什么? abstract class Base abstract public void myfunc ( ) ; public void another ( ) System . out . println ( " Another method " ) ; public class Abs
30、extends Base public static void main ( String args ) Base b=new Abs ( ) ; b . another ( ) ; public void myfunc ( ) System . out . println ( " My Func " ); public void another () myfunc ();7. 下面的程序运行结果是什么?class Super public int i=0 ; public Super () i=1; public class Sub extends Super publi
31、c Sub ( ) i=2; public static void main ( String args ) Sub s = new Sub ( ) ; System . out . println ( s . i) ;8. 下面的程序运行结果是什么?class Personpublic Person ( ) System . out . println ( " hi ! " ) ;public Person ( String s ) this ( ) ;System . out . println ( " I am " +s ); public cla
32、ss Who extends Person public Who ( ) this ( " I am Tony " ) ; public Who ( String s ) super ( s ) ; System .out .println ( " How do you do? " ) ; public static void main ( String args) Who w=new Who ( " Tom " ) ; 9. 阅读下面的程序,修改程序中错误的地方(提示:共三处错误)。1 . interface Shape2 . do
33、uble PI();3. double area ();4. 5 . class Cycle extends Shape6. 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 . prin
34、tln ( " 面积为 : " + c. area ( ) ) ;18. 19. 10.仔细阅读下面的程序代码,若经编译和运行后,请写出打印结果。 class GenericsFoo < T > private T x ; public GenericsFoo ( T x ) this .x=x; public T getX( ) return x; public void setX( T x ) this .x =x; public class GeneriesFooDemo public static void main ( String args ) Ge
35、nericsFoo < String > strFoo=new GenericsFoo < String > ( " He1lo ! " ) ; GenericsFoo < Double > douFoo = new GenericsFoo Double > ( new Double ( " 1 " ) ) ;System . out . println ( " strFoo. getX " + strFoo . getX( ) ) ;System . out . println ( &quo
36、t; douFoo. getX " + douFoo. getX ( ) ) ;11. 阅读下面的程序代码,写出程序运行的输出结果。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 ; cl
37、ass 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 ) ; 12. 仔细阅读下面的程序代码,写出程序运行的输出结果。public class TestSample public static void main ( String ar
38、gs ) 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
39、 Superint method1 ( ) return ( ( x > y ) ? x : y ) ; 13. 仔细阅读下面的程序代码,写出程序运行的输出结果。class Test1 private int i=1 ;public class Test11private int i = 2 ;public void methodI ( int i) i + + ; this . i + + ;Test1 . this . i + + ;System . out . println ( " i of methodI ( ) : " + i ) ;System . ou
40、t . println ( " i of Test11 : " + this . i ) ;System . out . println ( " i of Test1 :”+Test1.this.i); Test11 ic = new Test11( ) ;public void increaseI ( int k ) ic . methodI( k ) ; public static void main ( String args ) Test1 oc=new Test1( );oc .increaseI( 20 ) ;14. 阅读下面的程序代码,判断2635行
41、(带划线部分)各语句编译是否通过,如果编译通过,直接写出该行的打印结果。1 . class Parentclass 2. int x;3. int sum ( int a , int b ) ;4 . return a+b ;5. 6. int sub ( int a , int b )7. return a-b;8. 9. 10. class Childclass extends ParentClass11. int x=1; 12. int y = 2;13. int sum ( int a , int b ) 14. return a + b + 1;15. 16. int multi
42、( int a,int b)17. return a*b;18. 19. 20. class Test21. public static void main ( String args ) 22. ParentClass p=new ParentClass ( ) ;23. ChildClass c = new ChildClass();24. ParentClass pp=c;25. ChildClass cc = ( ChildClass ) pp;26. System . out . println ( pp .sum ( 5 , 5 ) ); 27. System . out.prin
43、tln( pp .sub ( 10 , 5 ) ) ;28. System . out.println( pp .multi( 10 , 5 ) ) ;29. System . out.println( pp .x) ;30. System . out.println( pp .y) ;31. System . out . println ( cc . sum ( 5 , 5 );32. System . out . println ( cc . sub ( 10 , 5 ) ) ;33. System . out . println ( cc . multi ( 5 , 5 ) );34.
44、System . out . println ( cc . x);35. System . out . println ( cc . y ) ;36. 37. 四、编程题1. 按以下要求编写程序。(1)根据下面的要求实现圆类Circle: Circle类的成员变量: radius半径。 Circle类的方法成员如下所示。 Circle():构造方法,将半径置为0。 Circle(double r):构造方法,创建Circle对象时将半径初始化为r。 double getRadius():获得圆的半径值。 double getPerimeter():获得圆的周长。 double getArea(
45、):获得圆的面积。 void disp():将圆的半径、周长、面积输出到屏幕上。(2)继承上题中的圆Circle类,派生圆柱体类Cylinder,要求如下。Cylinder类的成员变量:height表示圆柱体的高。Cylinder类的方法成员如下所示。Cylinder(double r,double h)构造方法:创建Cylinder对象时将圆半径初始化为r,圆柱高初始化为hdouble getHeight():获得圆柱体的高。double getCylinderArea():获得圆柱体的面积。double getVol():获得圆柱体的体积。void dispVol():将圆柱体的体积输出到
46、屏幕。2. 按以下要求编写程序。(1)定义一个Shape接口,该接口中只有一个抽象方法getArea(),该方法无参数,返回值类型为double型。(2)定义一个圆类Circle,满足以下条件。 Circle类实现Shape接口。 定义Circle类的成员变量r,表示圆的半径,数据类型为int。 定义Circle类的构造方法,参数名为r,用该参数初始化圆的半径。 实现getArea()方法,计算圆的面积(圆周率取3.14)。(3)编写一个测试类,类名为TestCircle,利用Circle类计算半径为5的圆的面积,并将面积在屏幕打印出来。3. 定义一个接口Shape,其中包括一个方法area(
47、),设计“三角形”、“圆”、“长方形”等类实现Shape接口。分别创建一个“三角形”、“圆”、长方形”对象存入一个类型为Shape的数组中,将数组中各类图形的面积输出。4. 请编程实现以下要求:(1)定义一个接口DataStructure,包括以下方法: Boolean isFul1() Boolean isEmpty() Void addElement(Object obj) Object removeElement()(2)设计一个队列类(MyQueue)实现DataStructure接口。队列的大小由其构造方法指定。要求实现的方法体现出队列的先进先出特性。 (3)设计一个测试类,在其主方
48、法中用DataStructure类型的引用变量引用一个大小为10的MyQueue对象,使用addElement()方法增加“0”,“1”,,”9”共10个字符串对象,再用removeElement()方法取出这些元素并打印出来。5. 按以下要求编程程序。 (1)编写一个抽象类Animal,其成员变量有name、age、weight表示动物名、年龄和质量。方法有showInfo()、 move()和eat(),其中后面两个方法是抽象方法。 (2)编写一个类Bird继承Animal,.实现相应的方法。通过构造方法给name、age、weight分别赋值,showInfo()打印鸟名、年龄和质量,move()方法打印鸟的运动方式,eat()打印鸟喜欢吃的食物。(3)编写测试类TestAnimal,用Animal类型的变量,调用Bird对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论