当前位置:文档之家› 第七章继承多态练习题#(精选.)

第七章继承多态练习题#(精选.)

第七章继承多态练习题#(精选.)
第七章继承多态练习题#(精选.)

第七章继承多态

一、选择题:

1、分析:

class A {

A() { }

}

class B extends A { //系统自动生成的构造方法和类的访问权限一样

}

哪两种说法是正确的? ( )

A:类B的构造方法是public的. B:类B的构造方法包含对this()的调用. C:类B的构造方法没有参数. D:类B的构造方法包含对super()的调用.

2、运行结果是:()

class Base {

Base() { System.out.print("Base"); }

}

public class Alpha extends Base {

public static void main( String[] args ) {

new Alpha();

new Base();

}

}

A: Base B: BaseBase C: 编译失败. D: 没有输出. E: 运行时异常. 3. 程序的运行结果是?()

A: 编译失败. B: hello from a C: hello from b

D: hello from b E: hello from a

hello from a hello from b

4. 运行结果是:()

class TestSuper {

TestSuper(int i) { }

}

class TestSub extends TestSuper{ }

class TestAll {

public static void main (String [] args) {

new TestSub();

}

}

A: 编译失败. B: 程序运行没有异常.

C: 第7行抛出异常. D: 第2行抛出异常.

5. 程序的运行结果是?()

A: 0 B: 1 C: 2 D: 编译失败.

6. 对于语句"B is a D" 和"B has a C",一下哪两种说法是正确的? ( ) A:D是B. B:B是D. C:D是C. D:B是C. E:D继承B.

F:B 继承D.

7. 运行结果是?()

A: 1 B: 2 C: 第8行编译失败. D: 第14行编译失败.

8. 分析:

public class ConstOver {

public ConstOver(int x, int y, int z) {

}

}

哪两个是对ConstOver 的构造方法的重载? ( )

A:ConstOver() { } B:protected int ConstOver() { }

C:private ConstOver(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) { }

9. 运行结果是?()

A: 4,4 B: 4,5 C: 5,4 D: 5,5 E: 编译失败.

10. 分析:

public class X {

public X aMethod() { return this;}

}

1) public class Y extends X {

2)

3) }

在第2行可以插入哪两项? ( )

A:public void aMethod() { } B:private void aMethod() { }

C:public void aMethod(String s) { } D:private Y aMethod() { return null; } E:public X aMethod() { return new Y(); }

11. 运行结果是?()

A: 4,4 B: 4,5 C: 5,4 D: 5,5 E: 编译失败.

12. 以下哪两个重载了方法setVar()? ( )

public class MethodOver {

public void setVar(int a, int b, float c) {

}

}

A:private void setVar(int a, float c, int b) { } B:public int setVar(int a, float c, int b) {return a;}

C:protected void setVar(int a, int b, float c) { } D:public int setVar(int a, int b, float c) {return a;}

E:protected float setVar(int a, int b, float c) {return c;}

13. 分析:

1) class BaseClass {

2) private float x = 1.0f;

3) protected void setVar(float f) { x = f; }

4) }

5) class SubClass extends BaseClass {

6) private float x = 2.0f;

7) // insert code here

8) }

在第7行插入哪两个覆盖了方法setVar()? ( )

A:void setVar(float f) { x = f; } B:public void setVar(int f) { x = f; } C:public void setVar(float f) { x = f; } D:public double setVar(float f)

{ return f; }

E:public final void setVar(float f) { x = f; } F:protected float setVar() { x = 3.0f; return 3.0f; }

14. 运行结果是?( )

A: 1 B: 2 C: 运行时异常. D: 第8行编译错误. E: 第14行编译错误.

15. 分析:

class A {

protected int method1(int a, int b) { return 0; }

}

在A的子类中,以下哪两个方法是合法的? ( )

A:public int method1(int a, int b) { return 0; } B:private int method1(int a, long b) { return 0; }

C:private int method1(int a, int b) { return 0; } D:public short method1(int a, int b) { return 0; }

E:static protected int method1(int a, int b) { return 0; }

16. 分析:

1) public abstract class Test {

2) public abstract void methodA();

3)

4) public abstract void methodB()

5) {

6) System.out.println("Hello");

7) }

8) }

哪两种改法,可以使程序通过编译? ( )

A:给方法methodA()加方法体C:在Test的声明中去掉abstract

B:用";"替换第5-7行D:在方法methodA()的声明中去掉abstract E: 在方法methodB()的声明中去掉abstract

17. 运行结果是:()

1) abstract class AbstractIt {

2) abstract float getFloat();

3) }

4) public class AbstractTest extends AbstractIt {

5) private float f1 = 1.0f;

6) private float getFloat() { return f1; }

7) }

A: 编译成功. B: 运行时异常. C: 第2行编译失败. D: 第6行编译失败.

18. 在接口中哪两个方法的声明是合法的? ( )

A:void method1(); B:public void method2(); C:static public void method5();

D:protected void method3(); E:final public void method4();

19. 分析:

1) public interface Foo {

2) int k = 4;

3) }

哪三项与第2行等价? ( )

A:final int k = 4; B:public int k = 4; C:static int k = 4;

D:abstract int k = 4; E:volatile int k = 4; F:protected int k = 4;

20. 分析:

interface Inter { }

class A implements Inter { }

class B extends A {

B() {

A[] arr = new A[10];

boolean b1 = this instanceof Inter;

boolean b2 = arr instanceof Object;

System.out.println("b1 = " + b1 + ", b2 = " + b2);

}

}

创建B的对象时会输出?( )

A: 编译失败. B: b1 = true, b2 = true C: b1 = true, b2 = false

D: b1 = false, b2 = true E: b1 = false, b2 = false

21. 哪一个能通过编译?()

A: new Animal().soundOff(); B: Lion l = Alpha1.get("meat eater");

C: Elephant e = new Alpha1(); D: new Alpha1().get("veggie").soundOff();

22. 分析:

class Passenger { }

class Engine { }

interface TransportVehicle {

void loadPassengers();

}

interface Helicopter extends TransportVehicle {

int flyIt( String direction );

}

abstract class JetStream implements Helicopter { }

哪种说法是正确的?()

A: TransportVehicle has a Passenger. B: 类Engine在类JetStream中.

C: 接口TransportVehicle可以形成多态的基础.

D: 继承JetStream的非抽象类可以随意声明方法loadPassengers().

23. 哪三个是"is a" 关系? ( )

A:public class X { } B:public interface Shape { }

public class Y extends X { } public interface Rectangle extends Shape{ }

C:public interface Color { } D:public class Species { }

public class Shape { private Color color; } public class Animal { private Species species; }

E:public class Person { } F:interface Component { }

public class Employee { class Container implements

Component {

public Employee(Person person) { } private Component[] children;

} }

24. 运行结果是:()

public interface Test {

int frood = 42;

}

class TestImpl implements Test {

private static int frood;

public static void main(String[] args) {

System.out.println(++frood);

}

}

A: 0 B: 1 C: 42 D: 43 E: 编译失败. F: 运行时异常.

25. 运行结果是?()

A: 5 B: 10 C: 编译失败. D: 运行时异常.

26. 运行结果是:()

1) public class Test {

2) public static void main(String args[]) {

3) class Foo {

4) public int i = 3;

5) }

6) Object o = (Object)new Foo();

7) Foo foo = (Foo)o;

8) System.out.println("i = " + foo.i);

9) }

10) }

A: i = 3 C: 第6行抛出ClassCastException异常.

B: 编译失败. D: 第7行抛出ClassCastException异常.

27. 分析:

String s = "abcde";

Object ob = (Object)s;

if (ob.equals(s)) {

System.out.println("AAAA");

} else {

System.out.println("BBBB");

}

if (s.equals(ob)) {

System.out.println("CCCC");

} else {

System.out.println("DDDD");

}

输出哪两行? ( )

A:AAAA B:BBBB C:CCCC D:DDDD

二、简答题

1. 简述类与类之间的关系

2. 简述继承的基本概念及继承的过程

3. 简述方法重写以及方法重载与方法重写的区别

4. 简述super关键字的用法

5. 简述重写equals方法的步骤

6. 简述instanceof关键字的用法

7. 简述接口和抽象类的区别

8. 简述什么是多态

三、编程题

1. 设计一个学生类Student,包括的属性有姓名name,年龄age,学位degree。由学生类派生出本科生类Undergraduate和研究生类Graduate,本科生类包含的属性有专业specialty,研究生类包括的属性有研究方向studyDrection。每个类都有相关数据的输出方法。最后在一个测试类中对设计的类进行测试。

要求测试结果如下:

姓名:王军

年龄:23

学位:本科

专业:工业自动化

姓名:刘君

年龄:27

学位:硕士

研究方向:网络技术

2. 定义一组交通工具类,包括汽车类(AutoMobile)、飞机类(Plane)、船类(Ship),其中汽车类有坦克(Tank)、卡车(Truck)、小汽车(Car),飞机子类有客机(AirLiner)、战斗机(FighterPlane),船类有子类游艇(Yacht)、军舰(WarShip),坦克战斗机和军舰都具有攻击的功能,抽象并定义这些类,通过抽象类和接口以及对应的实现类实现多态和这些类的测试

最新文件仅供参考已改成word文本。方便更改如有侵权请联系网站删除

JAVA继承和多态实验报告

实验项目名称:继承和多态 (所属课程:Java语言程序设计) 院系:专业班级:姓名: 学号:实验地点:指导老师: 本实验项目成绩:教师签字:日期: 1.实验目的 (1)掌握类的继承机制。 (2)熟悉类中成员变量和方法的访问控制。 (3)熟悉方法或构造方法多态性。 2.实验内容 (1)模拟编写程序,理解类的继承、多态、继承和多态规则。 (2)独立编程,实现类的继承和多态。 3.实验作业 设计一个类Shape(图形)包含求面积和周长的area()方法和perimeter()方法以及设置颜色的方法SetColor(),并利用Java多态技术设计其子类Circle(圆形)类、Rectangle (矩形)类和Triangle(三角形)类,并分别实现相应的求面积和求周长的方法。每个类都要覆盖toString方法。 海伦公式:三角形的面积等于s(s-a)(s-b)(s-c)的开方,其中s=(a+b+c)/2 程序代码为: Class包 package Class; public class Shape { private String color = "while"; public Shape(String color){ this.color = color; } public void setColor(String color){ this.color = color; } public String getColor(){ return color;

} public double getArea(){ return 0; } public double getPerimeter(){ return 0; } public String toString(){ return"color:" + color; } } package Class; public class Circle extends Shape { private double radius; public Circle(String color,double radius) { super(color); this.radius = radius; } public void setRadius(double radius){ this.radius = radius; } public double getRadius(){ return radius; } public double getCircleArea(){ return 3.14*radius*radius; } public double getCirclePerimeter(){ return 3.14*2*radius; } public String toString(){

继承与多态习题

继承与多态习题 一.基本概念与基础知识自测题 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 关键字只对紧随其后的基类名起作用。

Java继承与多态实验报告

西安邮电大学 (计算机学院) 课内实验报告 实验名称:继承与多态 专业名称:计算机科学与技术 班级:计科1405班 学生姓名:高宏伟 学号:04141152 指导教师:刘霞林 实验日期:2016.10.13

一、实验目的 通过编程和上机实验理解Java 语言的继承和多态特性,掌握变量的隐藏、方法的覆盖、重载,掌握抽象类和接口的使用。 二、实验要求 1.编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序。 2.编写体现类的多态性(成员方法重载)的程序。 3.编写体现类的多态性(构造方法重载)的程序。 4.编写使用接口的程序。 三、实验内容 (一)类的继承 1.创建公共类Student. (1)编写程序文件Student.java,源代码如下: public class Student { protected String name; //具有保护修饰符的成员变量 protected int number; void setData(String m,int h) //设置数据的方法 { name =m; number= h; } public void print() //输出数据的方法 { System.out.println(name+", "+number); } } (2)编译Student.java,产生类文件Student.class。 2.创建继承的类Undergraduate

(1)程序功能:通过Student 类产生子类undergraduate,其不仅具有父类的成员变量name()、number(学号),还定义了新成员变量academy(学院)、department (系)。在程序中调用父类的print 方法。 (2)编写Undergraduate 程序: class Undergraduate extends Student { 【代码1】//定义成员变量academy 【代码2】//定义成员变量department public static void main(String args[]) { 【代码3】//创建一个学生对象s 【代码4】//用父类的setData方法初始化对象s 【代码5】//对象s调用print方法 【代码6】//创建一个大学生对象u 【代码7】//调用父类的成员方法setData初始化对象u 【代码8】//设置对象u的成员变量academy 【代码9】//设置对象u的成员变量department System.out.print(https://www.doczj.com/doc/2c12495750.html,+", "+u.number+", "+u.academy+", "+u.department); } } (3)编译并运行程序 注意:公共类Student 与undergraduate 类要在同一文件夹(路径)。 (二)方法的重载 (1)程序功能:对不同的数进行排序输出。在IntSort 类中定义3 个同名的方法sort。 (2)编写Sort.java 文件,源代码如下。 import java.awt.Graphics; import java.applet.Applet; class IntSort { public String sort(int a, int b) { if (a>b) return a+""+b; else return b+""+a; } public String sort(int a, int b, int c) { int swap; if (a

实验报告类的重载继承和多态

实验报告类的重载继承和多态 篇一:实验三_类的重载继承和多态_() 篇二:实验三_类的重载继承和多态 篇三:C++实验报告(类和对象重载与继承多态和模板异常和流) C++实验报告 目录 C++实验报告 ................................................ ................................................... (4) 实验一:类和对象 ................................................ ................................................... . (4) 1................................................. ................................................... . (4) 代码 ................................................

................................................... .. (4) 运行结果 ................................................ ................................................... (5) 2.................................................. ................................................... (5) 思路: .............................................. ................................................... . (5) 代码 ................................................ ................................................... (5) 运行结果 ................................................ ...................................................

第七章继承多态练习题

第七章继承多态 一、选择题: 1、分析: class A { A() { } } class B extends A { //系统自动生成的构造方法和类的访问权限一样 } 哪两种说法是正确的? ( ) A:类B的构造方法是public的. B:类B的构造方法包含对this()的调用. C:类B的构造方法没有参数. D:类B的构造方法包含对super()的调用. 2、运行结果是:() class Base { Base() { System.out.print("Base"); } } public class Alpha extends Base { public static void main( String[] args ) { new Alpha(); new Base(); } } A: Base B: BaseBase C: 编译失败. D: 没有输出. E: 运行时异常. 3. 程序的运行结果是?() A: 编译失败. B: hello from a C: hello from b D: hello from b E: hello from a hello from a hello from b

4. 运行结果是:() class TestSuper { TestSuper(int i) { } } class TestSub extends TestSuper{ } class TestAll { public static void main (String [] args) { new TestSub(); } } A: 编译失败. B: 程序运行没有异常. C: 第7行抛出异常. D: 第2行抛出异常. 5. 程序的运行结果是?() A: 0 B: 1 C: 2 D: 编译失败. 6. 对于语句"B is a D" 和"B has a C",一下哪两种说法是正确的? ( ) A:D是B. B:B是D. C:D是C. D:B是C. E:D继承B. F:B 继承D. 7. 运行结果是?()

第七章派生与继承2

第七章派生与继承2 /*7.4多继承与虚基类 7.4.1多继承中的二义性问题 解决方式 1<对象名>.<基类名>::<成员名> //数据成员 <对象名>.<基类名>::<成员名>(<参数名>) //成员函数 */ /*#include using namespace std; class Base1 { public: int date; void fun(){cout<<"Member of Base1"<<";base1="<

Scanner a1 = new Scanner(System.in); int a = a1.nextInt(); System.out.println("总共创建了" + a + "个圆\n请输入各个圆的半径:"); Shape[] circle = new Shape[a]; Scanner input2 = new Scanner(System.in); for (int i = 0; i < a; i++) { circle[i] = new Circle(input2.nextDouble()); } System.out.println("要创建几个矩形?:"); Scanner b2 = new Scanner(System.in); int b = b2.nextInt(); Shape[] rectangle = new Shape[b]; System.out.println("总共创建了" + b + "个矩形\n请依次输入各个矩形的长和宽:"); Scanner c3 = new Scanner(System.in); for (int i = 0; i < b; i++) { rectangle[i] = new Rectangle(c3.nextDouble(), c3.nextDouble()); } Shape.sort(circle); String str1 = ""; for (int i = 0; i < circle.length; i++) { str1 += String.valueOf(i + 1) + circle[i] + "\n"; } System.out.println("您所创建的圆按半径由小到大排序如下:\n" + str1); Shape.sort(rectangle); String str2 = ""; for (int i = 0; i < rectangle.length; i++) { str2 += String.valueOf(i + 1) + rectangle[i] + "\n"; } System.out.println("您所创建的矩形按面积由小到大排序如下:\n" + str2);

实验4 类的继承和多态机制

实验4 类的继承和多态机制 一、实验目的 1、掌握类的继承机制; 2、掌握子类对父类构造方法的调用; 3、掌握方法覆盖和方法重载的区别。 二、实验内容 1、定义点类Point、圆类Circle、圆柱体类Cylinder。实现继承关系。 2、定义交通工具类Vehicle,一个小车类Car。实现Car对Vehicle的继承。 三、实验步骤 1、定义点类Point、圆类Circle、圆柱体类Cylinder。实现继承关系。 设计一个表示二维平面上点的类Point,包括表示坐标位置的成员变量x和y,获取和设置x和y值的方法。 设计一个表示二维平面上圆的类Circle,它继承自类Point,还包括表示圆半径的成员变量r、获取和设置r值的方法、计算圆面积的方法。 设计一个表示圆柱体的类Cylinder,它继承自类Circle,还包括表示圆柱体高的成员h、获取和设置h的方法、计算圆柱体表面积的方法、计算圆柱体体积的方法。 建立若干个Cylinder对象,输出其轴心位置坐标、半径、高、表面积及其体积的值。 class Point{ int x; int y; ;public Point(int x,int y){ this.x =x; this.y=y; } public int getX(){ return x; } public int getY(){ return y; } } class Circle extends Point{ double r; final double PI=3.1416; public Circle(int x,int y,double m){ super(x,y); r=m; } public double getR(){ return r; } public double circlearea(){ return PI*r*r;

实验三 继承和多态

实验三继承和多态 一、实验目的 1.熟练掌握封装性,多态性的概念。 2.熟练掌握抽象类abstract的概念。 3.熟练掌握接口interface的概念。 4.熟练包package的概念以及编译运行的方法。 二、实验内容 1.编写一个Java Application程序,该程序有个点Point类,它包含横坐标x和纵坐标y 两个属性,再给Point定义两个构造方法和一个打印点坐标的方法Show。定义一个圆Circle 类,它继承Point类(它是一个点,圆心(Center)),除此之外,还有属性半径Radius,再给圆定义2个构造方法、一个打印圆的面积的方法PrintArea和一个打印圆中心、半径的方法Show(其中显示圆心可以用super.Show()的方式)。 编写一测试类,对其进行编译、运行。结果如何?如去掉语句“super.Show();”,再看看运行结果。理解程序中重载和多态性的运用。 2.完成以下步骤要求: (1)设计一个表示二维平面上点的类Point,包含有表示坐标位置的protected类型的成员变量x和y,获取和设置x和y值的public方法。 (2)设计一个表示二维平面上圆的类Circle,它继承自类Point,还包含有表示圆半径的protected类型的成员变量r,获取和设置r值的public方法、计算圆面积的public 方法。 (3)设计一个表示圆柱体的类Cylinder,它继承自类Circle,还包含有表示圆柱体高的protected类型的成员变量h、获取和设置h值的public方法、计算圆柱体体积的public 方法。 (4)建立若干个Cylinder对象,输出其轴心位置坐标、半径、高及其体积的值。 3.学校中有老师和学生两类人,而在职研究生既是老师又是学生,对学生的管理和对教师的管理在他们身上都有体现。 (1)设计两个信息管理接口StudentInterface和TeacherInterfaceo其中,StudentInterface接口包括setFee方法和getFee方法,分别用于设置和获取学生的学费;TeacherInterface接口包括setPay方法和getPay方法,分别用于设置和获取教师的工资。 (2)定义一个研究生类Graduate,实现StudentInterface接口和TeacherInterface 接口,它定义的成员变量有name(姓名)、sex(性别)、age(年龄)、fee(每学期学费)、pay(月工资)。 (3)创建一个姓名为"zhangsan"的研究生,统计他的年收入和学费,如果收入减去学费不足2000元,则输出“provide a loan”(需要贷款)信息。 1.编辑、编译、运行和调试以下程序,说明程序功能;改变变量n的初值,观察运行结果变化;若“for(i=1;i

2015.6.17--java第七章继承和多态章总结

第七章继承和多态 1.继承的作用: 它是面向对象的三大特征之一,可以解决编程代码冗余的问题,是实现代码重用的重要手段之一。继承是软件可重用性的一种表现,新类可以在不增加自身代码的情况下,通过从现有的类中继承其属性和方法,来充实自身内容,这种表现或行为就称为继承。这个时候新类称为子类,现有的类称为父类。它最基本的作用就是:使得代码可重用,增加软件的可扩充性。 2.继承的语法: [访问修饰符] class extends; a.通过extends实现继承subclass 是子类后者是父类。 b.如果访问修饰符是public,那么该类在整个项目可见。 不写访问修饰符,该类只在当前包可见。 c.子类可以从父类中继承,public和protected修饰的属性和方法,不论子类和父类是否在同一个包里。 d.子类还可以继承默认访问修饰符修饰的属性和方法,但是子类和父类必须在同一个包里。 E.子类无法继承父类的构造方法。

3.多重继承关系的初始化顺序: 父类属性>>父类构造方法>>子类属性>>子类构造方法。 4.实例化子类对象: A.创建该类的对象。 B.创建该类的子类的对象。 C.子类在实例化时,会首先执行父类的构造方法,然后才执行子类的构造方法。 5.子类继承父类时,构造方法的调用规则如下: a.如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法,则系统默认先调用父类的无参构造方法,在这种情况下是否写入super语句,效果是一样的。 b.如果子类的构造方法中通过super显式调用父类的有参构造方法,那么将执行父类相应的构造方法,而不执行父类的无参构造方法。 c.如果子类的构造方法中通过this显式调用自身的其他构造

实验8_继承和多态

实验08:继承与多态 实验学时:6 实验类型:验证、设计 实验要求:必修 一、实验目的 1.理解继承的概念,了解面向对象设计中继承和多态的合理性; 2.掌握派生类的构造与析构; 3.掌握在对象中使用类层次和继承思想进行设计、实现和测试; 4.区别运行时的多态性的实现,理解重载与同名覆盖的差异; 5.理解虚函数与多态性; 6.实现运行时多态性的程序设计。 二、实验内容 1.Difine a class called PartFileledArrayWMax that is a derived class of the class PartFilledArray. The class PartFilledArrayWMax has one additional member variable named max_value that holds the maximum value stored in the array. Define a member accessor function named get_max that returns the maximum value stored in the array. Redefine the member function add_value and define two constructors, one of which has an int argument for the maximum number of entries in the array. Also define a copy constructor, an overloaded assignment operator, and a destructor. (A real class would have more member functions, but these will do for an exercise.) 2.某公司雇员(employee)包括经理(Manager)、技术人员(Technician)和销售员(Saleman)。开发部经理(developermanager)既是经理也是技术人员,销售部经理(salesmanager)既是经理也是销售员。 以employee类为虚基类,派生出manager、technician和saleman类,再进一步派生出developermanager和salesmanager类。 Employee类的属性包括姓名、职工号、工资级别、月薪(实发基本工资加业绩工资);操作包括月薪计算函数pay(),该函数要求输入请假天数,扣除应扣工

20XX级java语言实验3指导(面向对象程序设计(继承、封装、多态))

20XX级java语言实验3指导(面向对象程序设计(继承、封装、多态)) 上机实验三:面向对象程序设计(继承、封装、多态) 类是面向对象程序设计的基础,是Java的核心和本质所在,在Java中,所有的语言元素都封装在类中。编写java 程序的过程就是从现实世界中抽象出java可实现的类,并用合适的语句定义它们的过程,本节将学习类的应用,以及如何创建类的实例,通过类的继承更有效的组织程序结构,明确类之间的关系。掌握本节所讲的内容后,读者就可以使用面向对象技术编写java程序了。 接口是特殊的抽象类,只包含常量和方法的定义,而没有方法的实现,也就是说接口是方法定义和常量值的集合。 包是Java语言中有效管理类的一个机制。通过关键字package声明包语句,package语句作为Java源文件的第一条语句,指明该源文件定义的类所在的包。使用import语句可以引入包中的类。 一、实验目的 1) 2) 3) 4) 5) 6) 7) 掌握类的定义和使用掌握对象的声明和使用 了解构造函数的概念和使用掌握类的继承关系和派生方法掌握多态的概念与使用掌握接口的定义和使用掌握

Java中包的应用 二、实验内容 1) 2) 3) 4) 5) 6) 7) 类的声明 定义类成员变量以及成员方法 实例化类、创建类对象以及类方法的调用类的继承 通过实例理解接口的定义通过实例熟悉接口的应用 正确应用Java中包和import语句 三、实验步骤 1) 类和类的实例化 一个类的实现包括两部分:类声明和类体。、类声明[public][abstract][final] class className [extends superclassName] [implements interfaceNameList] {……} 期中修饰符[public][abstract][final]说明类的属性className为类名 superclassName为父类的名字 interfaceNameList为类实现的接口列表、类体类体定义如下 class className { [public|protected|private] [static] [final] [transient] [volatile] Type variableName; //成员变量

C++习题3(继承和多态)

习题3 一、选择题 1.在C++中,类与类之间的继承关系具有( C ) A)自反性B)对称性C)传递性D)反对称性 2.在公有继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( B ) A)受限制B)保持不变C)受保护D)不受保护 3.按解释中的要求在下列程序划线处填入的正确语句是:( C ) #include class Base{ public: void fun(){cout<<"Base::fun"<fun(); 4.在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( C ) A)受限制B)保持不变C)受保护D)不受保护5.在哪种派生方式中,派生类可以访问基类中的protected 成员(B ) A)public和private B)public、protected和private C)protected和private D)仅protected 6.当一个派生类仅有protected继承一个基类时,基类中的所

有公有成员成为派生类的(C) A) public成员B) private成员C) protected成员 D) 友元 7.不论派生类以何种方法继承基类,都不能使用基类的(B ) A) public成员B) private成员C) protected成员D) public成员和protected成员 8下面叙述错误的是(S )。 A)基类的protected成员在派生类中仍然是protected的 B)基类的protected成员在public派生类中仍然是protected 的 C)基类的protected成员在private派生类中是private的 D)基类的protected成员不能被派生类的对象访问 9.下列说法中错误的是(S )。 A) 保护继承时基类中的public成员在派生类中仍是public 的 B)公有继承时基类中的private成员在派生类中仍是private 的 C)私有继承时基类中的public成员在派生类中是private的 D)保护继承时基类中的public成员在派生类中是protected 的 10下面叙述错误的是(C)。 A)派生类可以使用private派生 B)对基类成员的访问必须是无二义性的 C)基类成员的访问能力在派生类中维持不变 D)赋值兼容规则也适用于多继承的组合 11派生类的构造函数的成员初始化列表中,不能包含(C )。 A)基类的构造函数B)派生类中子对象的初始化 C)基类中子对象的初始化D)派生类中一般数据成员的初始化 12.下列虚基类的声明中,正确的是:( B ) A)class virtual B: public A B)class B: virtual public A

实验七、继承和多态

实验五继承和多态 一.实验目的 1.理解继承的含义,掌握派生类的定义方法和实现; 2.理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地访问继承层次中的各种类成员; 3.理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便派生类成员可以访问基类的部分非公开的成员;正确使用base关键字; 4.理解虚函数在类的继承层次中的作用,虚函数的引入对程序运行时的影响,能够对使用虚函数的简单程序写出程序结果。 二、实验内容 1.编写一个程序计算出球、圆柱和圆锥的表面积和体积。 要求: (1)定义一个基类圆,至少含有一个数据成员——半径;提供方法来计算其面积并输出其信息; (2)定义基类的派生类球、圆柱、圆锥,根据不同的形状为其添加必须的数据成员(如定义圆柱必须额外给出圆柱的高),并添加或改写其方法成 员,提供各形状求表面积和体积的成员函数,并能正确输出该类对象实 例的信息。 (3)定义主函数,求球、圆柱、圆锥的和体积并输出结果信息。 注意:派生类覆盖基类的同名方法时,如果不是虚方法,需要在前面加关键字new,否则会有警告信息。 public class Circle { private double radius; public Circle () { ……} public Circle (double radiusValue){ this.radius = radiusValue; } public double Radius { ……} public virtual double CircumFerence()//计算周长 { ……}

public virtual double Area()//基类中的面积计算方法 { ……} public override string ToString() { return "圆半径="+radius; } } public class Cylinder : Circle//圆柱继承自圆类 { private double height; public Cylinder() { } public Cylinder(double radiusValue, double heightValue) :base(。。。) { this. height = heightValue; } public override double Area() { … } 2.编写测试用例,对一组不同形状的物体调用其面积和体积的计算,并输出其结果。 提示:在Main方法中定义一个Circle 数组,赋予数组不同的对象(比如第一个元素为圆锥、第二个元素圆柱、第三个球等,然后遍历这个数组,去求取每

实验报告 继承、多态与接口

实验三继承、多态与接口 一、实验目的 1.掌握Ja v a的继承机制; 2.掌握对象引用的多态方法; 3.掌握接口的特点、结构和调用; 4.掌握接口和继承的混合使用。 二、实验要求 1.编写体现类的继承性(成员变量、成员方法、成员变量隐藏) 的程序。 2.编写体现类的多态性(成员方法重载、构造方法重载)的程 序。 3.编程使用系统接口的技术和创建自定义接口的方法。 三、实验内容 (一)类的继承性练习 1.理解继承的含义 新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。新类还可添加新的变量和方法。这种现象就称为类的继承。 当建立一个新类时,不必写出全部成员变量和成员方法。只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。被继承的类称为父类或超类 (su pe rc la ss),这个新类称为子类。 J a va 提供了一个庞大的类库让开发人员继承和使用。设计这些类是出于公用的目的,因此,很少有某个类恰恰满足你的需要。你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。所以,通常要对子类进行扩展,即添加新的属性和方法。这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。继承的意义就在于此。 2.创建公共类S Y3_1_P 编写程序文件S Y3_1_P.ja va,源代码如下:pu bl ic c la ss SY3_1_P{ pr ote c te d St ri ng x m; //具有保护修饰符的成员变量 pr ote c te d in t xh; vo id s et da ta(S tr in g m,in t h) { //设置数据的方法 xm =m; xh = h; } pu bl i c vo id p ri nt(){//输出数据的方法 Sy st em.o ut.pr i nt ln(x m+", "+xh); } }

实验五 继承与多态

实验五继承与多态 专业班级学号姓名 实验学时 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); } }

相关主题
文本预览
相关文档 最新文档