第5章 继承和多态

第5章  继承和多态
第5章  继承和多态

继承与多态习题

继承与多态习题 一.基本概念与基础知识自测题 8.1填空题 8.1.1 如果类α继承了类β,则类α称为(1)类,而类β称为(2)类。(3)类 的对象可作为(4)类的对象处理,反过来不行,因为(5)。如果强制转换则要注意(6)。 答案:(1)基类 (2)派生类 (3)派生类 (4)基类 (5)派生类有一些新成员 (6)只能派生类强制转换为基类 8.1.2 当用public继承从基类派生一个类时,基类的public成员成为派生类的(1)成员, protected成员成为派生类的(2)成员,对private成员是(3)。公有派生可以使其类的(4),所以公有派生是主流。 答案:(1)public成员 (2)protected成员 (3)不可访问 (4)接口不变 8.1.3 利用继承能够实现(1)。这种实现缩短了程序开发的时间,VC++中的(2)很 好地体现了这一点。 答案:(1)代码的复用 (2)MFC编程 8.1.4 一个派生类只有一个直接基类的情况称为(1),而有多个直接基类的情况称为 (2)。继承体现了类的(3)概念,这在MFC中得到了很好表现,MFC中只采用了(4)。 答案:(1)单继承 (2)多重继承 (3)层次 (4)单继承 8.1.5 C++中多态性包括两种多态性:(1)和(2)。前者是通过(3)实现的, 而后者是通过(4)和(5)来实现的。 答案:(1)编译时的 (2)运行时的 (3)函数和运算符的重载 (4)类继承关系 (5)虚函数 8.1.6 在基类中将一个成员函数说明成虚函数后,在其派生类中只要(1)、(2)和

(3)完全一样就认为是虚函数,而不必再加关键字(4)。如有任何不同,则认为是(5)而不是虚函数。除了非成员函数不能作为虚函数外,(6)、(7)和(8)也不能作为虚函数。 答案:(1)同虚函数名 (2)同参数表 (3)同返回类型。如基类中返回基类指针,而派生类中返回派生类指针是允许的 (4)virtual (5)重载 (6)静态成员函数 (7)内联函数 (8)构造函数 8.1.7 纯虚函数定义时在函数参数表后加(1),它表明程序员对函数(2),其本质 是将指向函数体的指针定为(3)。 答案:(1)=0 (2)不定义 (3)NULL 8.2简答题 8.2.1构造函数和析构函数可以继承吗?派生类构造函数各部分的执行次序是怎样的?答:构造函数和析构函数不可以继承。派生类构造函数各部分的执行次序是: 1.调用基类构造函数,按它们在派生类声明的先后顺序,依次调用。 2.调用新增成员对象的构造函数,按它们在类定义中声明的先后顺序,依次调用。 3.派生类的构造函数体中的操作。 8.2.2什么叫派生类的同名覆盖(override)? 答:如果派生类声明了一个和某个基类成员同名的新成员(当然如是成员函数,参数表也必须一样,否则是重载),派生类中的新成员就屏蔽了基类同名成员,类似函数中的局部变量屏蔽全局变量。称为同名覆盖(override)。 8.2.3派生类的析构函数中需完成什么任务?是否要编写对基数和成员对象的析构函数的 调用?为什么? 答:析构函数的功能是作善后工作,析构函数无返回类型也没有参数,情况比较简单。派生类析构函数定义格式与非派生类无任何差异,不要编写对基数和成员对象的析构函数的调用,只要在函数体内把派生类新增一般成员处理好就可以了,因为对新增的成员对象和基类的善后工作,系统会自己调用成员对象和基类的析构函数来完成。 8.2.4为什么要使用虚基类?怎样定义虚基类?用一个实例来解释虚基类在其派生类中的 存储方式。 答:在多重继承是有可能出现同一基类的两个拷贝,为避免这种情况,可使用虚基类。虚基类(virtual base class)定义方式如下: class派生类名:virtual 访问限定符基类类名{...}; class派生类名:访问限定符virtual基类类名{...}; virtual 关键字只对紧随其后的基类名起作用。

第五章 类与继承作业一

第五章类与继承作业一 一、填空选择题 1、(在同一包中)子类不能继承父类中的私有成员,除此之外,其它所有的成员都可以通过继承变为子类的成员。 2、给出如下的程序,A-E选项中与构造方法ConstOver重载的两个构造方法是:AC。 .public class ConstOver { publicConstOver (int x, int y, int z) { } } A.ConstOver ( ) { } B.ProtectedintConstOver ( ) { } C.PrivateConstOver (int z, int y, byte x) { } D.public Object ConstOver (int x, int y, int z) { } E.public void ConstOver (byte x, byte y, byte z) { } 3、已知类关系如下: class Employee; class Manager extends Employeer; class Director extends Employee; 则以下关于数据的语句正确的是:(A)。 A. Employee e=new Manager(); B. Director d=new Manager(); C. Director d=new Employee(); D. Manager m=new Director(); 4、(A)下面对类的申明哪个是正确的? A)public class Fred { publicint x = 0; public Fred (int x) { this.x = x; } } B)public class fred publicint x = 0; publicfred (int x) { this.x = x; } } C)public class Fred extends MyBaseClass, MyOtherBaseClass { publicint x = 0; public Fred (intxval) { x = xval; } } D)protected class Fred { privateint x = 0;

实验五 继承与多态

实验五继承与多态 专业班级学号姓名 实验学时 2 实验类型验证性实验地点数计学院实验中心实验时间指导老师 实验成绩 年月日一、实验目的: 理解继承与多态的概念,掌握三种访问控制的区别,掌握抽象类、接口与包的应用。 二、实验内容: 1. 参考教材P124,示例程序C5_17,掌握抽象类的应用。 2. 参考教材P128,示例程序C5_18,掌握接口的使用方法。 3. 参考教材P133,示例程序C5_20,掌握包的使用方法。 三、实验要求: 1.完成示例程序的验证。 2.写出实验报告。 四、实验步骤与结果:(由学生按照实验内容完成) 程序一 package ch01; import java.applet.Applet; import java.awt.Graphics; abstract class Shapes //定义一个抽象类Shapes { public int x,y; //x、y为画图的坐标 public int width,height; public Shapes(int x,int y,int width,int height) { this.x=x; this.y=y; this.width=width; this.height=height; } abstract double getArea( ); //求图形面积的抽象方法 abstract double getPerimeter( ); //求图形周长的抽象方法 } class Square extends Shapes //由抽象类Shapes派生的子类——矩形类 { @Override public double getArea( ){return(width*height);} @Override public double getPerimeter( ){return(2*width+2*height);} public Square(int x,int y,int width,int height) { super(x,y,width,height); } }

自考Java语言程序设计(一)第五章以后课后习题及答案

自考Java语言程序设计(一)第五张课后习题及答案 自考Java语言程序设计(一)第五章类的继承课后习题 五、类的继承 l.什么是继承?什么是父类?什么是子类?继承的特性可给面向对象编程带来什么好处?什么是单重继承?什么是多重继承? 2.观察下面的程序片断,指出其中的父类和子类,以及父类和子类的各个域和方法。 class SuperClass { int data; voidsetData(intnewData) { data=newData~ } intgetData() { return data~ } } class SubClass extends SuperClass { int suhData; void setSubData(intnewData) { suhData=new Data; } intgetData() { return subData; } } 3.“子类的域和方法的数目一定大于等于父类的域和方法的数目”,这种说法是否正确?为什么? 4. 在Java程序中,通过类的定义只能实现单重继承() 5.下列哪些说法是正确的? A、Java 语言只允许单一继承 B、Java 语言只允许实现一个接口 C、Java 语言不允许同时继承一个类并实现一个接口 D、Java 语言的单一继承使得代码更加可靠 6.Java中所有类都是类________的子类。

7.请写出下面程序的运行结果。 public class Test extends TT{ public void main(String args[]){ Test t = new Test("Tom"); } public Test(String s){ super(s); System.out.println("How do you do?"); } public Test(){ this("I am Tom"); } } www.Ehttps://www.360docs.net/doc/f05261489.html, class TT{ public TT(){ System.out.println("What a pleasure!"); } public TT(String s){ this(); System.out.println("I am "+s); } } 结果:________ 8.父类的成员在子类中的访问权限由决定。 9.对象的使用包括引用对象的成员变量和方法。通过运算符就能实现对对象成员变量的访问和对象 10.Java是面向对象语言,对象是客观事物的,对象与之是一一对应的,它是很具体的概念。 参考答案: l.答:继承是面向对象程序设计中两个类之间的一种关系。当一个类获取另一个类中所有非私有的数据和操作的定义作为它自己的部分或全部成分时,就称这两个类之间具有继承关系。被继承的类称为父类或超类,继承了父类或超类的所有数据和操作的类称为子类。 面向对象程序设计中的继承,可使得程序结构更加清晰,降低了编码和维护的工作量。如果一个类只能有一个父类,则这种继承关系称为单重继承;如果一个类可以有多个父类,则这种继承关系称为多重继承。 2.答: 父类SuperClass 父类的域data来源:考试大的美女编辑们 父类的方法setData(),getData() 子类SubClass 子类的域data,subData 子类的方法setSubData(),setData(),getData()采集者退散 3.答:这种说法是错误的,因为子类不一定能继承父类的所有域和方法,它只能

JAVA基础 第4章继承与多态_练习题_200910

第4章继承与多态一.选择题 1、编译与运行以下两文件结果就是( D )。 //文件P1、java package MyPackage; class P1{ void afancymethod(){ System、out、println("What a fancy method"); } } //文件P2、java package YourPackage; import MyPackage、*; public class P2 extends P1{ public static void main(String argv[]){ P2 p2 = new P2(); p2、afancymethod(); } } A.两个均通过编译,P2运行时输出What a fancy method B.没一个通过编译 C.两个均通过编译,但P2运行时出错 D.P1 通过编译,但P2出现编译错误 2.下列程序运行的结果就是( A )。 package a; package b; public class D{ public static void main(String args[]) { System、out、println("^_^,今天心情不错!"); } } A.出现编译错误 B.^_^,今天心情不错! C.通过编译,运行时出错 D.以上都不对 3.Java的核心类库中哪个包,Java系统能自动引入( B )。 A.java、io B.java、lang C.java、net D.java、util 4.下列程序运行结果就是( A )。 private class Base{ Base(){ int i = 100; System、out、println(i); }

继承与多态性习题参考答案

继承与多态性习题参考答案

————————————————————————————————作者:————————————————————————————————日期:

C++程序设计语言习题及实验指导 第8章继承与多态性习题参考答案 8.3 习题 8.3.1 选择题 题号 1 2 3 4 5 6 7 8 9 10 答案 C D A D A B C B D D 题号11 12 13 14 15 16 17 18 19 20 答案 D D A C B C C C A C 8.3.2 填空题 1.(1) a、b、c、x、y、z (2) b、y (3) c、z (4) a、x (5) b、c、x、y、z (6) b、y (7) y (8) b、c、z (9) a、x (10) b、c、x、y、z (11) y (12) y (13) z (14) a、b、c、x (15) b、c、x、y、z (16) y 2.私有 3.抽象 4.虚基 5.(1) 基类(2) 对象 6.(1) 静态(2) 编译(3) 虚函数 7.(1) 2 1 (2) 0 5 8.(1) 100 200 300 30 (2) 10 100 (3) 20 200 9.(1) 5 10 (2) end. (3) 20 10 10.(1) classA classB (2) end. (3) ~classB ~classA 11.(1) 10 (2) build B (3) build C (4) release A 12.(1) class B (2) class C (3) class D (4) 5 13.(1) 5 5 (2) 20 20 14.(1) 10 (2) 10 20 15.(1) 1 (2) 3 (3) 5 (4) 100 10 16.(1) B::f() (2) B::fun() (3) A::f() (4) B::fun() 17.(1) 姓名陈涛年薪6.8万元。(2) 姓名李原(3) 姓名李原月工资4000元18.(1) 110 (2) 2220 19.(1) protected 或public (2) Base1(s1),Base2(s2) 或Base2(s2),Base1(s1) (3) Base1::str (4) test.print() 20.(1) virtual void show()=0 (2) C(int,int,int) (注:参数可有任一名称) (3) b1(y) (4) &t 8.3.3 编程题 1.求长方形的面积和长方体的表面积、体积 #include class Rectangle{ protected: float L; // 长方形的长 float W; // 长方形的宽

java答案第五章

Java语言程序设计 第五章课后习题答案 1.什么是接口?接口起什么作用?接口与抽象类有何区别? 答:Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 作用:接口是面向对象的一个重要机制,使用接口可以实现多态继承;接口中的所有方法都是抽象的,这些抽象方法由实现这一接口的不同类型来具体;接口还可以用来实现不同类之间的常量共享。 与抽象类不同的是:接口允许在看起来不相干的类之间定义共同行为。 2.试编程证明接口中的属性都隐含为static及final,所有的方法都为public。 //定义接口Shape2D interface Shape2D{ double Pi=3.14; double area(); } //Circle类继承接口Shape2D public class Circle implements Shape2D{ double radius; public Circle(double r){radius=r;} public double area(){return Pi*radius*radius;} } //A类(测试接口中隐含final的area()方法) public class A extends Shape2D{ public double area(); } //test5_2 public class test5_2{ public static void main(String args[]){ Circle c=new Circle(10); System.out.println("Pi=3.14圆的面积:"+c.area()); SetPi b=new SetPi(3.00); System.out.println("改变Pi=3.00圆的面积:"+c.area()); } } 运行结果:

第五章 习题答案

答案: 一、单项选择题 1.C 2.D 3.A 4.D 5.C 6.B 7.A 8.B 9.A 10.D 二、简答题 1. 面向对象编程的三大特征:封装、继承和多态。封装:通过设置访问权限等方式封装了内部实现细节,使用者只需要知道外部接口。继承:子类可以继承父类的成员,又可以新增自己独有的成员,还可以覆盖父类的成员。多态:同名方法可以具有不同的行为,Java中有两种意义的多态:重载和重写。 2. 万物皆是对象,对象都有属性和行为。属性是对象所拥有的状态、数据,是静态的特征;行为是对象所拥有的功能、对数据的操作,是动态的特征,可能会影响到属性。 类封装了一类对象共有的属性和行为,是对具有相同属性和行为的对象的抽象。类是创建对象的模板,对象是类的具体实例。 3. (1)定义在类体内、方法外的变量称为成员变量。定义在方法体内部的变量,以及方法的形式参数,是方法所临时使用的变量,称为局部变量。 (2)成员变量在整个类体中都有效。而局部变量的有效范围仅限于定义它的方法体内,具体说明如下:①方法的形式参数:在整个方法体内有效;②方法体内独立定义的变量:在方法体中该变量定义之后的语句中有效;③选择、循环等语句块内定义的变量:只在语句块的{ }内有效。 (3)如果定义的成员变量没赋值,则系统为其提供缺省的初始值。所以成员变量定义后就有了确定的值,就可以使用。而方法的局部变量必须自行定义而且赋值后才能使用。(4)类成员变量在程序加载进内存时即开辟空间,实例成员变量在创建对象时开辟空间。局部变量只在方法调用时开辟空间,方法执行完毕后空间随即释放。 4. 多个方法名字相同,但参数个数或者类型不同,称为方法重载。方法返回值的类型和参数的名字不参与比较,方法重载是多态的一种体现。当调用方法时,根据传入的实参个数和类型,可以区分出调用的是哪一个方法。 5. 构造方法与所在类的类名完全相同,构造方法没有返回值类型,也不用void修饰。构造方法可以重载,一个类中可以定义多个构造方法。每个类中至少都有一个构造方法,如果未定义构造方法,系统会自动为该类生成一个缺省的没有参数的构造方法,如果类中定义了构造方法,就不再提供其他构造方法。 构造方法用new调用来创建对象,一般在构造方法中初始化成员变量。构造方法不能用static修饰。 三.编程题 1. classVecter3: def__init__(self,x=0,y=0,z=0): self.X=x self.Y=y

JAVA基础第章继承与多态练习题

第4章继承与多态一.选择题 1. 编译和运行以下两文件结果是( D )。 //文件P1.java package MyPackage; class P1{ void afancymethod(){ System.out.println("What a fancy method"); } } //文件P2.java package YourPackage; import MyPackage.*; public class P2 extends P1{ public static void main(String argv[]){ P2 p2 = new P2(); p2.afancymethod(); } } A.两个均通过编译,P2运行时输出What a fancy method B.没一个通过编译 C.两个均通过编译,但P2运行时出错 D.P1 通过编译,但P2出现编译错误 2.下列程序运行的结果是(A )。 package a; package b; public class D{ public static void main(String args[]) { System.out.println("^_^,今天心情不错!"); } } A.出现编译错误 B.^_^,今天心情不错! C.通过编译,运行时出错 D.以上都不对 3.Java的核心类库中哪个包,Java系统能自动引入(B )。 A.java.io B.https://www.360docs.net/doc/f05261489.html,ng C.https://www.360docs.net/doc/f05261489.html, D.java.util 4.下列程序运行结果是( A )。 private class Base{ Base(){ int i = 100; System.out.println(i); }

第5章继承与多态

第5章继承与多态 本章讨论面向对象程序设计另外两个最重要的特点:继承和多态。 继承是面向对象程序设计方法中实现软件重用的一种重要手段,通过继承可以更有效地组织程序结构,明确类之间的关系,并充分利用已有的类来创建新类,通过继承可以实现代码的重用,以完成更复杂的设计、开发。 多态则可以统一多个相关类的对外接口,并在运行时根据不同的情况执行不同的操作,提高类的抽象度和灵活性。 5.1 子类、父类与继承机制 5.1.1 继承的概念 在类的定义过程中,继承是一种由已有的类创建新类的机制。继承而得到的类为子类,被继承的类为父类,父类包括所有直接或间接被继承的类。 在类的声明中加入extends子句就可以创建一个类的子类: class SubClass extends SuperClass {……} Java中不通过extends关键字支持多重继承,即extends之后只能有唯一的父类。如果缺省extends子句,则该类为https://www.360docs.net/doc/f05261489.html,ng.Object的子类。子类可以继承父类中访问权限设定为public、protected和包可访问的成员变量和方法,但是不能继承访问权限为private的成员变量和方法。 一个父类可以同时拥有多个子类,而每一个子类则只能有唯一的父类。子类是对公共域和方法在功能、内涵方面的扩展和延伸。 父类、子类间的关系具有: 共享性即子类可以共享父类的公共域和方法。 差异性即子类和父类一定会存在某些差异,否则就应该是同一个类。 层次性即由Java规定的单继承性,每个类都处于继承关系中的某一个层面。 5.1.2 类的层次 Java语言中类的是有严格的层次结构的。 除Object类之外,每个类都继承惟一的父类。这种继承性性质使得类的层次结构形成了如图所示的一种树状结构。 Object类定义和实现了Java系统所需要的众多类的共同行为,它是所有类的父类,也即这个树状结构中的根类,所有的类都是由这个类继承、扩充而来的,这个Object类定义在https://www.360docs.net/doc/f05261489.html,ng包中。 5.2 继承的实现 5.2.1 子类的定义 定义一个子类,即在定义一个类的时候加上extends关键字,并在之后带上其父类名,其一般格式为:[类的修饰符] class <子类名> extends <父类名>{ <域定义>; <方法定义>; } 这和前面定义类的格式并没有什么区别,只是在定义子类时“extends <父类名>”不再是可选项。

05继承与多态

1.下面关于继承的描述正确的有:【选择两项】AD A在java 中只允许单一继承。// B在java 中一个类只能实现一个接口。//一个类只能实现多个接口 C在java 中一个类不能同时继承一个类和实现一个接口。//所有的类都继承object D java 的单一继承使代码更可靠。// 2.下面程序中第10行调用的方法是在第几行声明的:【选择一项】D 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 void printValue() {/*...*/ } 7 public void printValue(int i) {/*...*/} 8 public static void main(String args[]){ 9 Person t = new Teacher();//多态 10 t.printValue(10); //多态调用子类方法、父类属性 11 } 12 } A第2行 B第3行 C第6行 D第7行 3.对于下面给定的代码,下面哪些选项可以添加到程序的第11行处:【选择一项】D 1 class Person { 2 String name,department; 3 public void printValue(){ 4 System.out.println("name is "+name); 5 System.out.println("department is "+department); 6 } 7 } 8 public class Teacher extends Person { 9 int salary; 10 public void printValue(){ 11 //doing the same as in the parent method printValue() 12 System.out.println("salary is "+salary); 13 } 14 } A printValue();//递归 B this.printValue();//递归 C Person.printValue();//不是静态的

相关文档
最新文档