继承和接口设计习题
- 格式:doc
- 大小:83.00 KB
- 文档页数:13
1.写出程序的运行结果//扩展Point类public class Point{protected int x,y;public Point(int x, int y){this.x=x;this.y=y;}public boolean equals(Point p){return (x==p.x && y=p.y);}public int getX(){return x;}public int getY(){return y;}public string toString(){return new}}public class NamedPoint extends Point{final private String name;public NamedPoint(int x, int y, String name){super(x,y);=name;}public String getName(){return name;}public String toString(){return new String(name+"("+x+", "+y+")");}}public class TestNamedPoint{public static void main(String[] a){NamedPoint p=new NamedPoint(2,-3,"p");System.out.println("p:"+p);System.out.println("p.getName():"+p.getName());System.out.println("p.getX():"+p.getX());NamedPoint q=new NamedPoint(2,-3,"Q");System.out.println("q: "+q);System.out.println("q.equals(p):"+q.equals(p));}}2.//写出程序运行结果class ClassX{protected int m;protected int n;void f(){System.out.println("Now in ClassX.f().");m=22;}void g(){System.out.println("Now in ClassX.g().");n=44;}public String toString(){return new String("{ m="+m+", n="+n+"}");}}class ClassY extends ClassX{private double n;void g(){System.out.println("Now in ClassY.g().");n=3.14159265;}public String toString(){return new String("{ m="+m+", n="+n+"}");}}class TestClassY{public static void main(String[] a){ClassX x=new ClassX();x.f();x.g();System.out.println("x="+x);ClassY y=new ClassY();y.f();y.g();System.out.println("y= "+y);}}3.有接口Speaker包含一个方法speak(),实现以下分层结构:4. 有接口Geometric ,有3个方法getArea(), getCircumference(),getX()和getY()。
⼀、单选题(共 60.00 分)⼆、判断题(共 40.00 分)Java 程序设计(深圳⼤学继续教育学院引进课程) 测验-4.1继承概念1. A.B.C.D.下列关于继承的哪项叙述是正确的_______。
在java 中允许多重继承在java 中⼀个类只能实现⼀个接⼝在java 中⼀个类不能同时继承⼀个类和实现⼀个接⼝java 的单⼀继承使代码更可靠正确答案:D2. A.B.C.D.给出下⾯代码: 1) class Parent { 2) private String name ; 3) public Parent (){} 4) } 5) public class Child extends Parent { 6) private String department ; 7) public Child () {} 8) public String getValue (){ return name ; } 9) public static void main (String arg[]) { 10) Parent p = new Parent (); 11) } 12) } 那些⾏将引起错误?第3⾏第6⾏第7⾏第8⾏正确答案:D3. A.B.C.D.设有下⾯两个类的定义:class Person {class Student extends Person{long id ; // 身份证号int score ; //⼊学总分String name ; // 姓名int getScore () { return score ; } }} 问:类Person 和类Student 的关系是( )。
包含关系继承关系(内部类继承了外部类)关联关系⽆关系,上述类定义有语法错误正确答案:B1构造⽅法不能被继承1.A.B.正确错误正确答案:A2. A.B.⼀个⼦类可以重新定义从⽗类那⾥继承来的同名⽅法,⽽且允许它们有不同的返回值类型。
一.单选题1.JAVA语言的类间的继承关系是()。
A多重的B.单重的C.线程的D.不能继承2.以下关于JAVA语言继承的说法正确的是()。
A.Java中的类可以有多个直接父类B.抽象类中不能有子类C.JAVA中的接口支持多继承D.最终类可以作为其他类的父类3.下列选项中,用于定义接口的关键字是()。
A)interface B)implements C)abstract D)class4.下列选项中,用于实现接口的关键字是()。
A)interface B)implements C)abstract D)class5.以下哪个接口的定义是正确的?A)interface B{void print() { } ;}B)abstract interface B { void print() ; }C)abstract interface B extends A1,A2 { abstract void print(){ };D)interface B { void print();}6.定义一个接口时,下列哪个关键字用不到?A)public B)extends C)interface D)class7.在使用interface声明一个接口时,只可以使用哪个修饰符修饰该接口。
A)private B)protected C)private或者protected D)public8.下列类头定义中,错误的是?A)public x extends yB)public class x extends yC)class x extends y implements y1D)class x9.下列叙述正确的是?A)Java中允许多重继承B)Java一个类只能实现一个接口C)Java中只能单重继承D)Java中一个类可以继承多个抽象类10.现有类A和接口B,以下描述中表示类A实现接口B的语句是()。
A.class A implements BB.class B implements AC.class A extends BD.class B extends A二.填空题1.接口中的所有属性均为__public____、___static___和__final_。
JAVA复习习题(继承)类的继承习题一、选择题1. Java语言的类间的继承关系是( B )。
A) 多重的B) 单重的C) 线程的D) 不能继承2. 以下关于Java语言继承的说法正确的是( C )。
A)Java中的类可以有多个直接父类B)抽象类不能有子类C)Java中的接口支持多继承D)最终类可以作为其它类的父类3. 现有两个类A、B,以下描述中表示B继承自A的是(D)。
A) class A extends B B) class B implements AC) class A implements B D) class B extends A4. 下列选项中,用于定义接口的关键字是( A)。
A)interface B) implements C) abstract D) class5. 下列选项中,用于实现接口的关键字是( B)。
A)interface B) implements C) abstract D) class6. Java语言的类间的继承的关键字是( B )。
A) implements B) extends C) class D) public7. 以下关于Java语言继承的说法错误的是( A )。
A)Java中的类可以有多个直接父类B)抽象类可以有子类C)Java中的接口支持多继承D)最终类不可以作为其它类的父类8. 现有两个类M、N,以下描述中表示N继承自M的是(D)。
A) class M extends N B) class N implements MC) class M implements N D) class N extends M9. 现有类A和接口B,以下描述中表示类A实现接口B的语句是(A)。
A) class Aimplements B B) class B implements AC) class Aextends B D) class B extends A10. 下列选项中,定义抽象类的关键字是( C)。
/********以下作业在代码编写过程中要按照注释规范对 类,方法,属性,局部变量 进行注释关键代码片段也需要进行注释说明 ********/1、根据如下图示,使用继承编写出对应的程序。
然后分别创建对应的车辆,调用方法输出 车辆信息,并测试每辆车包含的其他方法。
尽量让你的程序变得有意思一些(属性和方 法可添加和扩展)。
所属公司最大载客数量I打发票2、3、请编码实现动物世界的继承关系:动物(Animal )具有行为:吃(eat )、睡觉(sleep ) 动物包括:兔子(Rabbit ),老虎(Tiger ) 这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡觉的行为是一致的。
请通过继承实现以上需求,并编写测试类 AnimalTest 进行测试 4、请使用接口编码实现如下需求:乐器(Instrument )分为:钢琴(Piano )、小提琴(Violin ) 各种乐器的弹奏(play )方法各不相同。
编写一个测试类 InstrumentTest ,要求:编写方法testPlay ,对各种乐器进行弹奏测试。
要依据乐器的不同,进行相应的弹奏。
在main 方法中创建不同的乐器对象,通过testPlay 的弹奏测试方法进行测试。
5、 定义Fight 接口,其中有一个打人的动作(fight )。
让胖人(FatFat )和瘦人(Thi nth in )分别实现打人接口,但具有不同的打人结果: 胖人打人疼,瘦人打人不疼。
编写测试类,使用多态的方式对不同人打人的动作进行测试,输出胖人和瘦人打人的动作。
6、 7、8、 医生(Doctor )有姓名(name )、编号(idNumber )和地址(address )等基本信息, 还都具有量体温 (temperature )和开药(giveMedicine )的方法。
巴士是汽车吗? 卡车是汽车吗? 出租车是汽车吗?引擎数量 外观颜色 品牌 车牌 刹车 加速属性,行为请问:出租车 包含哪些属性 和行为呢? 最大载客数量报站 让座提示最大载重量 卸货汽车医生又分为普通医生和主治医生。
抽象类与接⼝练习【练习题】1.抽象类与继承设计⼀个能细分为矩形、三⾓形、圆形和椭圆形的“图形”类。
使⽤继承将这些图形分类,找出能作为基类部分的共同特征(如校准点)和⽅法(如画法、初始化),并看看这些图形是否能进⼀步划分为⼦类。
本题只考虑实现思想,不考虑具体实现的细节,实现⽅式可⾃由发挥。
【练习题】2.抽象类:创建⼀个Vehicle类并将它声明为抽象类。
在Vehicle类中声明⼀个NoOfWheels⽅法,使它返回⼀个字符串值。
创建两个类Car和Motorbike 从Vehicle类继承,并在这两个类中实现NoOfWheels⽅法。
在Car类中,应当显⽰“四轮车”信息;⽽在Motorbike类中,应当显⽰“双轮车”信息。
创建另⼀个带main⽅法的类,在该类中创建Car和Motorbike的实例,并在控制台中显⽰消息。
【练习题】3.接⼝:创建⼀个名称为Vehicle的接⼝,在接⼝中添加两个带有⼀个参数的⽅法start()和stop()。
在两个名称分别为Bike和Bus的类中实现Vehicle接⼝。
创建⼀个名称为interfaceDemo的类,在interfaceDemo的main()⽅法中创建Bike和Bus对象,并访问start()和stop()⽅法。
【练习题】4.接⼝:创建⼀个名称为Vehicle的接⼝,在接⼝中添加两个带有⼀个参数的⽅法start()和stop()。
在两个名称分别为Bike和Bus的类中实现Vehicle接⼝。
创建⼀个名称为interfaceDemo的类,在interfaceDemo的main()⽅法中创建Bike和Bus对象,并访问start()和stop()⽅法。
【练习题】5.抽象类、继承、接⼝综合设计⼀个系统:XXX门的实现过程:流程:设计⼀张抽象的门Door,那么对于这张门来说,就应该拥有所有门的共性,开门openDoor()和关门closeDoor();然后对门进⾏另外的功能设计,防盗--theftproof()、防⽔--waterproof()、防弹--bulletproof()、防⽕、防锈…… 要求:利⽤继承、抽象类、接⼝的知识设计该门【练习题】6.抽象类、继承、接⼝综合设计⼀个系统:xxx纯净⽔⽣产线⽬前流程是:从某个地⽅把⽔取出来,然后经过缓冲,过滤,加热和放糖的步骤 abstract ⽔{public void ⽔();}interface 过滤{}interface 缓冲{}interface 加热{}interface 放糖{}class 纯净⽔1 extends ⽔ imps 过滤,缓冲{}class 纯净⽔2 extends ⽔ imps 缓冲{}class 纯净⽔2 extends ⽔ imps 过滤{}。
继承练习题一、选择题1. 关于Java中的继承说法正确的是:A. 子类可以继承父类的私有成员B. 子类可以继承父类的protected成员C. 子类可以继承父类的静态成员D. 子类不能继承父类的构造方法2. 在Java中,下列哪个关键字用于声明继承?A. extendsB. implementsC. interfaceD. class3. 如果一个类声明为final,那么它:A. 可以被继承B. 不能被继承C. 可以被实例化D. 不能被实例化4. 关于Java中的方法重写,下列说法正确的是:A. 重写的方法必须具有相同的返回类型B. 重写的方法可以有不同的访问权限C. 重写的方法可以抛出新的异常D. 重写的方法必须抛出与父类方法相同的异常5. 在Java中,下列哪个操作是不合法的?A. 子类覆盖父类的静态方法B. 子类覆盖父类的非静态方法C. 子类覆盖父类的私有方法D. 子类覆盖父类的protected方法二、填空题6. 在Java中,如果一个类没有明确指定继承哪个类,那么它默认继承______类。
7. 在Java中,使用______关键字可以实现对父类方法的重写。
8. 如果子类要调用父类的构造方法,可以使用______关键字。
9. 在Java中,子类可以______父类的成员变量和方法。
10. 在Java中,如果子类和父类都有相同的成员变量,那么在子类中访问这个变量时,默认访问的是______。
三、判断题11. 在Java中,一个类只能继承一个类,但可以实现多个接口。
()12. 子类可以继承父类的私有成员变量,但不能继承私有方法。
()13. 在Java中,子类必须显式调用父类的构造方法。
()14. 如果父类的构造方法有参数,那么子类的构造方法也必须有相同参数的构造方法。
()15. 在Java中,子类可以覆盖父类的静态方法。
()四、编程题16. 定义一个父类`Animal`,包含一个方法`makeSound()`。
1.在Java中,子类可以继承父类的哪些特性?
答:子类可以继承父类的所有非私有属性和方法,包括公有、受保护和默认访问级别。
此外,子类还可以继承父类的构造函数和初始化块。
2.如果一个子类要继承父类的方法,应该如何实现?
答:子类要继承父类的方法,可以使用与父类方法同名、相同参数列表和相同返回类型的方法。
如果子类想要重写父类的方法,可以使用@Override注解来标记。
3.什么是多态性?在Java中如何实现多态性?
答:多态性是指一个接口可以有多种实现方式,或者一个对象可以有多种形态。
在Java中,多态性可以通过继承和接口实现。
子类可以继承父类的属性和方法,也可以实现接口的规范,从而让一个对象在不同上下文中表现出不同的行为。
4.如果一个子类要继承父类的构造函数,应该如何实现?
答:如果一个子类要继承父类的构造函数,可以在子类的构造函数中通过super关键字调用父类的构造函数。
如果子类没有显式地定义构造函数,则会自动调用父类的无参构造函数。
5.什么是抽象类?在Java中如何定义抽象类?
答:抽象类是一个不能被实例化的类,它只能作为其他类的基类。
抽象类可以包含抽象方法和非抽象方法。
在Java中,使用abstract关键字来定义抽象类,抽象类不能被实例化,但可以被继承。
如果一个子类继承了一个抽象类,那么它必须实现该抽象类中的所有抽象方法。
第7章继承和接口设计一.选择题1.在C#中,一个类【】。
A) 可以继承多个类B) 可以实现多个接口C) 在一个程序中只能有一个子类D) 只能实现一个接口2.【】关键字用于在C#中从派生类中访问基类的成员。
A) new B) super C) this D) base3.在定义类时,若希望类的某个方法能够在派生类中进一步改进,以满足派生类的不同需要,则应将该方法声明为【】。
A) new B) public C) virtual D) override4.在C#中,在派生类中对基类的虚方法进行重写,要求在派生类的声明中使用【】。
A) new B) public C) virtual D) override5.已知类B是由类A继承而来,类A中有一个名为M的非虚方法,现在希望在类B中也定义一个名为M的方法,且两方法的参数个数和类型完全相同,若希望编译时不出现警告信息,则在类B中声明该方法时,应使用【】关键字。
A) static B) new C) override D) virtual6.假设类B继承了类A,下列说法错误的是【】。
A) 类B中的成员可以访问类A中的公有成员B) 类B中的成员可以访问类A中的保护成员C) 类B中的成员可以访问类A中的私有成员D) 类B中的成员可以访问类A中的静态成员7.关于多态,下列说法正确的是【】。
A) 多态实际上就是重载,它们本质上是以一样的B) 多态可以分为编译时多态和运行时多态。
前者的特点是在编译时就能确定要调用成员方法的哪个版本,后者则是在程序运行时才能确定要调用成员方法的哪个版本。
C) 编译时多态是在程序运行时才能确定要调用成员方法的哪个版本,而运行时多态在编译时就能确定要调用成员方法的哪个版本。
D) 多态和重载是两个完全不同的概念,前者是通过定义虚方法和重写虚方法来实现,后者是通过对同一函数名编写多个不同的实现代码来实现。
8.下列关于接口的说法,正确的是【】。
一、选择题1、为了区分重载多态中同名的不同方法,要求(A )。
A) 采用不同的参数列表B) 返回值类型不同C) 调用时用类名或对象名做前缀D) 参数名不同2、定义主类的类头时可以使用的访问控制符是( C)。
A) private B) protected C) public D) private protected3、下列整型的常量属性i 的定义中,正确的是( A)。
A) static final int i=100; B) final int i;C) static int i; D) final float i=1.2f;4、设x,y 均为已定义的类名,下列声明对象x1的语句中正确的是( C)。
A) public x x1= new y( ); B) x x1=x( );C) x x1=new x( ); D) int x x1;5、下列方法定义中,正确的是( D)。
A) int x( int a,b ) B) double x( int a,int b){ return (a-b); } { int w; w=a-b; }C) double x( a,b ) D) int x( int a,int b){ return b; } { return a-b; }6、为了使包sos在当前程序中可见,可以使用的语句是( A)。
A)import sos.*; B)package sos.*;C)sos import; D)sos package;7、设i、j、k 为类x 中定义的int 型变量名,下列类x 的构造函数中正确的是( )。
A) x( int m){ ... } B) void x( int m){ ... }C) x( int m, int n){ ... } D) x( int h,int m,int n){ ... }8、下列类头定义中,正确的是( )。
CA) class x B) public x extends y{ .... } { .... }C) public class x extends y D) class x extends y implements y1{ .... } { .... }9、下面是有关子类继承父类构造函数的描述,其中正确的是(C )。
一.extends和super的使用和方法的重写1.定义一个人的类(属性有名字,年龄。
写一个能输出各个属性值的方法showlnfo()),定义一个学生类(属性有性别),学生继承人类要求:(1)父类的属性赋值用构造方法来实现(分别用有参数构造方法和无参数构造方法实现)(2)子类的属性也用构造方法来赋值。
(3)在子类中重写父类的showInfo()方法(4)声明学生类的对象,调用学生的显示信息的方法。
2定义Animal父类,含有属性name,sex,age,方法sleep,run,编写一个子类Person,继承Animal类,然后调用父类的属性和方法- *■ ♦1、试编写三个具有继承关系的类,人、8、€(8继承人,C继承B)。
要求A中包含方法a1()、a2(),B类中的方法b1()访问了 a1()和 a2(),C 类中的方法 c1()访问了@1()、a2()、b1()。
提示:(a1(),a2(),b1(),c1()这些方法体除了实现题目要求之外,其余内容可以任意编写。
)2、请编码实现动物世界的继承关系:动物(Animal)具有行为:吃(eat)、睡觉(sleep)动物包括:兔子(Rabbit),老虎(Tiger)这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡觉的行为是一致的。
请通过继承实现以上需求,并编写测试类AnimalTest进行测试。
3、父类Person包含like()方法子类Son重写父类方法并打印输出4、(选做)父类Employee 属性:name、sex,带一个构造方法Employee(String n, char s)子类Worker 继承自Employee 属性:char category;//类别boolean dressAllowance; 〃是否提供服装津贴,有一个构造方法负责构造所有属性,还有一个自定义方法isDressAll()这个方法负责通过判断dressAllowance的值输出,是否提供服装津贴。
java 继承练习题Java继承练习题Java的继承是一种重要的面向对象编程概念,通过继承可以实现代码的重用和扩展性。
在这篇文章中,我将为您提供一些Java继承的练习题,帮助您加深对于继承的理解并提升编程技巧。
题目一:创建一个父类Animal,包含属性name和age,并定义一个方法showInfo用于展示动物的信息。
创建子类Dog和Cat并重写showInfo方法,分别展示狗和猫的信息。
题目二:创建一个父类Shape,包含属性color和area,并定义一个计算面积的抽象方法calculateArea。
创建子类Circle和Rectangle,并实现calculateArea方法,分别计算圆和矩形的面积。
题目三:创建一个父类Employee,包含属性name和salary,并定义一个方法getAnnualSalary用于计算员工的年薪。
创建子类Manager 和Staff,其中Manager类有一个bonus属性用于表示经理的奖金,Staff类没有额外的属性,分别实现getAnnualSalary方法。
题目四:创建一个父类Vehicle,包含属性brand和price,并定义一个方法showInfo用于展示交通工具的信息。
创建子类Car和Bike,分别实现showInfo方法,在方法中增加信息的格式化输出。
题目五:创建一个父类Phone,包含属性brand和price,并定义一个抽象方法sendMessage。
创建子类Android和IOS,分别实现sendMessage方法,输出不同系统的短信。
以上是几个Java继承的练习题,接下来我将给出每个题目的解答及相应的代码示例。
题目一解答:```javaclass Animal {protected String name;protected int age;public Animal(String name, int age) { = name;this.age = age;}public void showInfo() {System.out.println("Name: " + name + ", Age: " + age);}}class Dog extends Animal {public Dog(String name, int age) {super(name, age);}@Overridepublic void showInfo() {System.out.println("Dog - Name: " + name + ", Age: " + age); }}class Cat extends Animal {public Cat(String name, int age) {super(name, age);}@Overridepublic void showInfo() {System.out.println("Cat - Name: " + name + ", Age: " + age); }}public class Main {public static void main(String[] args) {Animal animal1 = new Dog("Tom", 3);Animal animal2 = new Cat("Jerry", 4);animal1.showInfo(); // 输出:Dog - Name: Tom, Age: 3animal2.showInfo(); // 输出:Cat - Name: Jerry, Age: 4 }}```题目二解答:```javaabstract class Shape {protected String color;protected double area;public Shape(String color) {this.color = color;}public abstract void calculateArea();public void showInfo() {System.out.println("Color: " + color + ", Area: " + area); }}class Circle extends Shape {private double radius;public Circle(String color, double radius) {super(color);this.radius = radius;}@Overridepublic void calculateArea() {area = Math.PI * radius * radius;}}class Rectangle extends Shape {private double width;private double height;public Rectangle(String color, double width, double height) { super(color);this.width = width;this.height = height;}@Overridepublic void calculateArea() {area = width * height;}}public class Main {public static void main(String[] args) {Shape shape1 = new Circle("Red", 2.5);Shape shape2 = new Rectangle("Blue", 3.0, 4.0);shape1.calculateArea();shape1.showInfo(); // 输出:Color: Red, Area: 19.634954084936208shape2.calculateArea();shape2.showInfo(); // 输出:Color: Blue, Area: 12.0 }}```题目三解答:```javaclass Employee {protected String name;protected double salary;public Employee(String name, double salary) { = name;this.salary = salary;}public double getAnnualSalary() {return salary * 12;}}class Manager extends Employee {private double bonus;public Manager(String name, double salary, double bonus) { super(name, salary);this.bonus = bonus;}@Overridepublic double getAnnualSalary() {return salary * 12 + bonus;}}class Staff extends Employee {public Staff(String name, double salary) {super(name, salary);}}public class Main {public static void main(String[] args) {Employee employee1 = new Manager("John", 5000, 2000);Employee employee2 = new Staff("Alice", 3000);System.out.println("Employee1 Annual Salary: " + employee1.getAnnualSalary()); // 输出:Employee1 Annual Salary: 62000.0System.out.println("Employee2 Annual Salary: " + employee2.getAnnualSalary()); // 输出:Employee2 Annual Salary: 36000.0}}```题目四解答:```javaclass Vehicle {protected String brand;protected double price;public Vehicle(String brand, double price) {this.brand = brand;this.price = price;}public void showInfo() {System.out.println("Brand: " + brand + ", Price: " + price);}}class Car extends Vehicle {public Car(String brand, double price) {super(brand, price);}@Overridepublic void showInfo() {System.out.printf("Car - Brand: %s, Price: %.2f\n", brand, price);}}class Bike extends Vehicle {public Bike(String brand, double price) {super(brand, price);}@Overridepublic void showInfo() {System.out.printf("Bike - Brand: %s, Price: %.2f\n", brand, price);}}public class Main {public static void main(String[] args) {Vehicle vehicle1 = new Car("Toyota", 25000);Vehicle vehicle2 = new Bike("Yamaha", 1500);vehicle1.showInfo(); // 输出:Car - Brand: Toyota, Price: 25000.00 vehicle2.showInfo(); // 输出:Bike - Brand: Yamaha, Price: 1500.00}}```题目五解答:```javaabstract class Phone {protected String brand;protected double price;public Phone(String brand, double price) { this.brand = brand;this.price = price;}public abstract void sendMessage();}class Android extends Phone {public Android(String brand, double price) { super(brand, price);}@Overridepublic void sendMessage() {System.out.println("Android Phone - Brand: " + brand + ", Price: " + price);}}class IOS extends Phone {public IOS(String brand, double price) {super(brand, price);}@Overridepublic void sendMessage() {System.out.println("iOS Phone - Brand: " + brand + ", Price: " + price);}}public class Main {public static void main(String[] args) {Phone phone1 = new Android("Samsung", 1000);Phone phone2 = new IOS("iPhone", 1500);phone1.sendMessage(); // 输出:Android Phone - Brand: Samsung, Price: 1000.0phone2.sendMessage(); // 输出:iOS Phone - Brand: iPhone, Price: 1500.0}}```通过完成以上继承练习题,您可以对Java继承的概念和用法有更深入的理解,并巩固自己的编程能力。
第4章类的封装性、继承性、多态性及接口一、判断题1. 如果类A和类B在同一个包中,则除了私有成员外,类A可以访问类B中所有的成员。
()2. 接口中的成员变量全部为常量,方法为抽象方法。
()3. 抽象类可以有构造方法,所以能直接用来生成实例。
()4. Java的类不允许嵌套定义。
()5. 包含抽象方法的类一定是抽象类,但有abstract修饰的类不一定包含抽象方法()6. 泛型只能用于类的定义中,不能用于接口的定义中。
()7. 用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. 接口的所有成员方法都具有()修饰的特性。
1.以下关于继承的叙述正确的是( C )。
A、在Java中类只允许单一继承B、在Java中一个类只能实现一个接口C、在Java中一个类不能同时继承一个类和实现一个接口D、在Java中接口只允许单一继承2.有继承关系时用到的关键字是(A )。
( 2 分)A:extendB:extendsC:implementsD:implement3:Java变量中,以下不属于复合类型的数据类型是( D)。
( 2 分)A:类B:字符型C:数组型D:接口4:java中定义数组名为abc,下面(B )可以得到数组元素的个数。
( 2 分)A:abc.length( )B:abc.lengthC:len(abc)D:ubound(abc)5:下列说法正确的是(A )。
( 2 分)A:编译后的Java源程序根据文件中定义的类和接口的个数产生相应个数的.class 字节码文件。
B:Java语言的源文件中不是任何地方都可以加注释的。
C:一个文件中可以有多个访问权限为public的类。
D:含有main()方法的类可以为public的类,也可以为其他类。
6:在调用构造函数时(C )( 2 分)A:子类可以不加定义就使用父类的所有构造函数B:不管类中是否定义了何种构造函数,创建对象时都可以使用默认构造函数C:先调用父类的构造函数D:先调用形参多的构造函数7:Java与C/C++比较说法错误的是(D)。
( 2 分)A:Java不提供goto语句,所以也就没指定goto作为关键字。
B:Java没有指针。
C:Java没有联合和结构D:Java只有单继承没有多重继承。
8:若需要定义一个类域或类方法,应使用( B)修饰符。
( 2 分)A:staticB:packageC:privateD:public9:下列说法( C)是正确的。
( 2 分)A:程序执行到break语句是一定会结束所有的循环B:程序执行到continue语句时会结束当前循环C:break语句和continue语句都可以和标签协同使用D:continue语句和break语句的作用相同10:以下说法正确的是(D )。
1,定义一个接口Assaultable(可攻击的),该接口有一个抽象方法attack()。
2,定义一个接口Mobile(可移动的),该接口有一个抽象方法move()。
3,定义一个抽象类Weapon,实现Assaultable接口和Mobile接口,但并没有给出具体的实现方法。
4,定义3个类:Tank,Flighter,WarShip都继承自Weapon,分别用不同的方式实现Weapon 类中的抽象方法。
5,写一个类Army,代表一支军队,这个类有一个属性是Weapon数组w(用来存储该军队所拥有的所有武器);该类还提供一个构造方法,在构造方法里通过传一个int类型的参数来限定该类所能拥有的最大武器数量,并用这一大小来初始化数组w。
该类还提供一个方法addWeapon(Weapon wa),表示把参数wa所代表的武器加入到数组w中。
在这个类中还定义两个方法attackAll()和moveAll(),让w数组中的所有武器攻击和移动。
6,写一个主方法去测试以上程序。
interface Assaultable{//可攻击的void attack();}interface Mobile{//可移动的void move();}abstract class Weapon implements Assaultable,Mobile {public void attack(){}public void move(){}}class Tank extends Weapon{public void attack(){System.out.println("坦克攻击!!!");}public void move(){System.out.println("坦克移动!!!");}}class Flighter extends Weapon{public void attack(){System.out.println("战斗机攻击!!!");}public void move(){System.out.println("战斗机移动!!!");}}class Warship extends Weapon{public void attack(){System.out.println("战船攻击!!!");}public void move(){System.out.println("战船移动!!!");}}class Army{Weapon[] w;int max;int j=0;public int getMax() {return max;}public void setMax(int max) {this.max = max;}public Army(int max){w= new Weapon[max];this.max=max;System.out.println("您最多拥有"+max+"个武器!!!") ;}public void addWeapon(Weapon wa){if(j<getMax()){System.out.println("武器库足够!"+"已增加"+(j+1)+"个武器");w[j]=wa;j++;}else{System.out.println("警告:武器库已满!!!不能增加武器!!!");}}public void attackAll(){System.out.println();System.out.println("所有武器准备战斗!!!");for(int i=0;i<w.length;i++){System.out.print((i+1)+"号");w[i].attack();}}public void moveAll(){System.out.println();System.out.println("所有武器准备移动!!!");for(int i=0;i<w.length;i++){System.out.print((i+1)+"号");w[i].move();}}}public class Test1 {public static void main(String[] args){Army a = new Army(4);a.addWeapon(new Tank());a.addWeapon(new Flighter());a.addWeapon(new Warship());a.addWeapon(new Warship());a.addWeapon(new Warship());a.moveAll();a.attackAll();}}。
第7章继承和接口设计一.选择题1.在C#中,一个类【】。
A) 可以继承多个类B) 可以实现多个接口C) 在一个程序中只能有一个子类D) 只能实现一个接口2.【】关键字用于在C#中从派生类中访问基类的成员。
A) new B) super C) this D) base 3.在定义类时,若希望类的某个方法能够在派生类中进一步改进,以满足派生类的不同需要,则应将该方法声明为【】。
A) new B) public C) virtual D) override4.在C#中,在派生类中对基类的虚方法进行重写,要求在派生类的声明中使用【】。
A) new B) public C) virtual D) override5.已知类B是由类A继承而来,类A中有一个名为M的非虚方法,现在希望在类B中也定义一个名为M的方法,且两方法的参数个数和类型完全相同,若希望编译时不出现警告信息,则在类B中声明该方法时,应使用【】关键字。
A) static B) new C) override D) virtual 6.假设类B继承了类A,下列说法错误的是【】。
A) 类B中的成员可以访问类A中的公有成员B) 类B中的成员可以访问类A中的保护成员C) 类B中的成员可以访问类A中的私有成员D) 类B中的成员可以访问类A中的静态成员7.关于多态,下列说法正确的是【】。
A) 多态实际上就是重载,它们本质上是以一样的B) 多态可以分为编译时多态和运行时多态。
前者的特点是在编译时就能确定要调用成员方法的哪个版本,后者则是在程序运行时才能确定要调用成员方法的哪个版本。
C) 编译时多态是在程序运行时才能确定要调用成员方法的哪个版本,而运行时多态在编译时就能确定要调用成员方法的哪个版本。
D) 多态和重载是两个完全不同的概念,前者是通过定义虚方法和重写虚方法来实现,后者是通过对同一函数名编写多个不同的实现代码来实现。
8.下列关于接口的说法,正确的是【】。
A) 接口中定义的方法都必须是虚方法B) 接口中定义的方法可以编写其实现代码C) 继承接口的类可提供被继承接口中部分成员的实现代码D) 接口中的所有方法都必须在其派生类中得到实现。
9.下列关于虚方法的描述中,正确的是【】。
A) 虚方法能在程序执行时动态确定要调用的方法,因此比非虚方法更灵活B) 在定义虚方法时,基类和派生类的方法定义语句中都要带上virtual修饰符C) 在重写基类的虚方法时,为消除隐藏基类成员的警告,需要带上new修饰符D) 在重写基类的虚方法时,需要同时带上virtual和override修饰符10.在C#中,以下关于抽象类的叙述中错误的是【】。
A) 抽象类可以包含抽象方法B) 含有抽象方法的类一定是抽象类C) 抽象类不能被实例化D) 抽象类可以是密封类11.在C#中,以下关于抽象类和接口的叙述中正确的是【】。
A) 抽象类可以包含非抽象方法,而接口不包含任何方法的实现B) 抽象类可以被实例化,而接口不能被实例化C) 抽象类不能被实例化,而接口可以被实例化D) 抽象类能够被继承,而接口不能被继承12.在C#中,以下关于抽象类和接口的叙述中正确的是【】。
A) 在抽象类中,所有的方法都是抽象方法B) 继承自抽象类的子类必须实现其父类(抽象类)中的所有抽象方法C) 在接口的定义中可以有方法实现,在抽象类的定义中不能有方法实现D) 一个类可以从多个接口继承,也可以从多个抽象类继承13.以下类和接口的区别中正确的是【】。
A) 类可以继承而接口不可以B) 类不可以继承而接口可以C) 类可以多继承而接口不可以D) 类不可以多继承而接口可以14.下列方法定义中,【】是抽象方法。
A) static void func(){ } B) virtual void func(){ }C) abstract void func(){ } D) overridel void func(){ } 15.下列关于接口的说法,错误的是【】。
A) 一个类可以有多个基类和多个基接口B) 抽象类和接口都不能被实例化C) 抽象类自身可以定义成员,而接口不可以D) 类不可以多重继承,而接口可以。
16.已知类Base、Derived的定义如下:class Base{ public void Hello(){ in Base!”); }}class Derived: Base{ public new void Hello(){ i n Derived!”); }}则下列语句段在控制台中的输出结果是【】。
Derived x=new Derived();();A) Hello in Base! B) Hello in Base! Hello in Derived!C) Hello in Derived! D) Hello in Derived!Hello in Base!17.关于继承,下列说法正确的是【】。
A) 子类将继承父类所有的成员B) 子类将继承父类的非私有成员C) 子类只继承父类public成员D) 子类只继承父类的方法,而不继承属性18.下列是抽象类的声明的是【】。
A) abstract class figure{ } B) c lass abstract figure{ }C) seald class figure{ } D) static class figure{}19.abstract修饰的方法是抽象方法,抽象方法只有声明而无主体,且【】。
A) 只能存在于抽象类中B) 可以在任何类中C) 只能在接口中D) 只能在密封类中20.重写一个基类的虚方法时,应与原虚方法的方法名相同,并且【】。
A) 不能改变方法的参数类型、个数和返回值B) 可以改变方法的参数类型、个数和返回值C) 可以改变方法的返回值D) 可以改变方法的参数类型和个数21.下面有关继承的说法中,正确的是【】。
A) A类和B类均有C类需要的成员,因此可以从A类和B类共同派生出C类B) 在派生新类时,可以指明是公有派生、私有派生或保护派生C) 派生类可以继承基类中的成员,同时也继承基类的父类中的成员D) 在派生类中,不能添加新的成员,只能继承基类的成员22.为了防止从所修饰的类派生出其他类,可以将此类定义为【】。
A) 抽象类B) 密封类C) 静态类D) 私有类23.若想从派生类中访问基类的成员,可以使用【】。
A) this关键字B) me关键字C) base关键字D) override关键字24.下面有关派生类的描述中,不正确的是【】。
A) 派生类可以继承基类的构造函数B) 派生类可以隐藏和重载基类的成员C) 派生类不能访问基类的私有成员D) 派生类只能有一个直接基类25.C#中的多态不能通过【】实现。
A) 接口B) 抽象类C) 密封类D) 虚方法26.下列程序错误的原因是【】。
sealed class SealedClass{ }class Derived:SealedClass{ }A) SealedClass类不能被继承B) 没有Main()入口C) SealedClass没有被实例化D) 以上皆是27.下面关于接口的叙述中,不正确的是【】。
A) 接口只是由方法、属性、索引器或事件组成的框架,并没有描述任何对象的实例代码B) 接口的所有成员都被自动定义为公有的,不可使用访问修饰符来定义接口成员C) 类可以通过在类型定义语句中包括冒号和接口名来表明它正在实现接口D) 一个类只能实现一个接口28.接口可以包含一个或多个成员,以下选项中【】不能包含在接口中。
A) 方法B) 属性C) 事件D) 常量29.下列叙述中,正确的是【】。
A) 接口中可以有虚方法B) 一个类可以实现多个接口C) 接口能被实例化D) 接口中可以包含已实现的方法30. 关于虚方法实现多态,下列说法错误的是【】。
A) 定义虚方法使用关键字virtual B) 关键字virtual可以与override一起使用C) 虚方法是实现多态的一种应用形式D) 派生类是实现多态的一种应用形式31. 以下类MyClass的定义中,【】是合法的抽象类。
A) abstract class MyClass { public abstract int getCount(); }B) abstract class MyClass { public virtual abstract intgetCount(); }C) abstract class MyClass { private abstract int getCount(); }D) abstract class MyClass { public static abstract intgetCount(); }32. 分析下列程序中类MyClass的定义class BaseClass{ public int i; }class MyClass:BaseClass{ public new int i; }则下列语句在Console 上的输出为【】。
MyClass y = new MyClass();BaseClass x = y;= 100;("{0}, {1}",,;A) 0, 0 B) 100, 100 C) 0, 100 D) 100, 033. 在C#程序中定义如下IPlay接口,实现此接口代码正确的是【】。
interface IPlay{ void Play();void Show();}A) class Teacher :Iplay{ void Play(){ 以下泛型集合声明中正确的是【】。
A) List<int> f=new List<int>(); B) List<int> f=new List ();C) List f=new List (); D) List<int> f=new List<int>;34. 以下关于泛型的叙述中错误的是【】。
A) 泛型是通过参数化类型来实现在同一份代码上操作多种数据类型B) 泛型编程是一种编程范式,其特点是参数化类型,C) 泛型类型和普通类型的区别在于泛型类型与一组类型参数或类型变量关联D) 以上都不对二.填空题1.在C#中有两种多态性:编译时的多态性和运行时的多态性。
编译时的多态性是通过【虚方法和重写虚方法】实现的,运行时的多态性是通过继承和【重载/隐藏】来实现的。
2.在声明类时,在类名前使用【abstract】修饰符,则声明的类只能作为其他类的基类,不能被实例化。
3.在声明类时,在类名前使用【sealed 】修饰符,则声明的类不能作为其他类的基类,不能再派生新的类。