实验4_继承与多态(1)(软工)
实验报告5 继承与多态

实验名称:继承与多态一.实验目的:((1)理解继承的含义,掌握派生类的定义方法和实现;(2)理解虚函数在类的继承层次中的作用,虚函数的引入对程序运行时的影响,能够对使用虚函数的简单程序写出程序结果。
(3)编写体现类的继承性(成员变量,成员方法,成员变量隐藏)的程序;(4)编写体现类多态性(成员方法重载,构造方法重载)的程序。
(5)理解接口和抽象类、抽象方法的定义和实现方法;(5)理解接口和抽象类的差别。
二.上机内容:(1)进行类的继承和基类构造方法的应用的练习;(2)进行类的多态性练习(3)进行抽象类和接口的练习(4)整理上机步骤,总结经验和体会。
(5)完成实验报告。
三.上机步骤:类的继承和基类构造方法的应用(1)编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。
要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师类数据操作类teacher的基类。
using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication2{class person{public string bh;//编号public string xm;//姓名public person(string bh, string xm){this.bh = bh;this.xm = xm;}public void show(){Console.WriteLine("姓名:{0}", xm);Console.WriteLine("编号:{0}", bh);}}class student : person{public string bj;//班级public int cj;//成绩public student(string sbh, string sxm, string sbj, int scj): base(sbh, sxm){bh = sbh;xm = sxm;bj = sbj;cj = scj;}public new void show(){Console.WriteLine("***student***");Console.WriteLine("姓名:{0}", xm);Console.WriteLine("编号:{0}", bh);Console.WriteLine("班级:{0}", bj);Console.WriteLine("成绩:{0}", cj);}}class teacher : person{public string zc;//职称public string bm;//部门public teacher(string tbh, string txm, string tzc, string tbm) : base(tbh, txm){bh = tbh;xm = txm;zc = tzc;bm = tbm;}public new void show(){Console.WriteLine("***teacher***");Console.WriteLine("姓名:{0}", xm);Console.WriteLine("编号:{0}", bh);Console.WriteLine("职称:{0}", zc);Console.WriteLine("部门:{0}", bm);}}class program{static void Main(string[] args){student st = new student("050013", "张三", "信管091", 91);st.show();teacher te = new teacher("046950", "范仲淹", "特级教师", "教务处"); te.show();Console.ReadLine();}}}运行结果:(2)将以上程序尝试改成通过调用基类构造方法的方式来初始化编号和姓名,并总结调用基类构造方法的应用要点。
实验四 、类的继承与多态

实验四类的继承与多态一、实验目的1.理解类的继承概念和类的继承规则。
根据实际需要正确的运用类的继承。
2.理解类的多态概念,掌握子类对父类方法的重新定义,理解方法的匹配调用原则。
二、实验内容1.模拟编写程序,理解类的继承、多态、继承和多态规则。
2. 独立编程,实现类的继承和多态。
三、实验过程(一)继承(1)模拟编写程序,理解类的继承,继承规则。
请编码实现动物世界的继承关系:(1)动物(Animal)具有行为:吃(eat)、睡觉(sleep)。
(2)动物包括:兔子(Rabbit),老虎(Tiger)。
(3)这些动物吃的行为各不相同(兔子吃草,老虎吃肉);但睡觉的行为是一致的。
请通过继承实现以上需求,并编写测试类AnimalTest进行测试。
1. 定义Animal类,代码如下:public class Animal {public void sleep(){System.out.println("我正睡觉呢!");}public void eat(){}}2. 定义Tiger类,代码如下:public class Tiger extends Animal {public void eat(){System.out.println("我喜欢吃肉!");}}3. 定义Rabbit类,代码如下:public class Rabbit extends Animal {public void eat(){System.out.println("我喜欢吃草和青菜!"); }}4、定义AnimalTest类,代码如下:public class AnimalTest {public static void main(String[] args) {Tiger tiger = new Tiger();tiger.sleep();tiger.eat();System.out.println();Rabbit rabbit = new Rabbit();rabbit.sleep();rabbit.eat();}}5. 编译运行程序,查看运行结果。
类的继承与多态性实验报告

类的继承与多态性实验报告目录1.介绍2.什么是多态3.多态在Java中的技术基础4.示例5.多态的好处6.总结介绍之前的文章介绍过类的封装性和继承性,现在是时候聊聊面向对象编程的三大特性之一的最后一个类的多态性了。
多态的基础是继承(包括了接口的实现)和方法的覆盖。
什么是多态多态对应的英文单词是polymorphism,百度翻译给出的翻译是:n.多型现象,多态性; 多机组合形式;按字面意思就是多种状态、形态、姿态等等,潜台词就是某个东西具有多种状态、形态、姿态等等。
那是什么东西呢?在面向对象的编程语言里面(当然就包括Java了)就是某个方法或函数。
那方法的多种状态、形态、姿态有是个什么意思呢?这其实是指同一个方法具有多个方法体,就是方法的实现。
而方法的相同与否是由方法签名决定的。
所以,多态其实本质上是指同一个类的同一个方法却具有不同的行为特征。
状态、形态、姿态指的就是行为特征。
多态在Java中的技术基础然而,在Java中,同一个类里面是不可能存在两个签名相同而实现不同的方法的,否则的话会导致无法判断该执行哪个方法,因此在编译时就会报错。
所以,肯定是在两个类中才有可能存在两个签名相同而实现不同的方法,一个实现在这个类,另一个实现在另一个类。
而如果这两个类毫无瓜葛,那么肯定就与多态的本质(同一个类的同一个方法却具有不同的行为特征)自相矛盾了。
所以,这两个类肯定是有某种联系的。
我们再想想,什么概念是能够让两个不同的类却又能称为同一个类的?答案就是类的继承/扩展,就是现实中的“某东西是某类东西”的概念,就是“具体和抽象”的思想。
比如,男人是人,女人也是人,男人类和女人类就借助于人类建立了某种联系,而人类具有的某个行为在男人类和女人类中是有着不同体现的,比如人类的吃饭这个行为,男人类的体现是狼吞虎咽,女人类的体现是细嚼慢咽。
例子不是很恰当,但意思就是这么个意思。
所以说,Java里面多态的技术基础就是方法的覆盖,当然,在Java中覆盖不仅仅发生在类的继承/扩展上,还可能发生在接口的实现上。
实验4 继承性和多态

实验四继承性和多态一、实验目的:熟悉JA V A中的继承性和多态性。
掌握子类的定义及用法,继承机制中的隐藏与覆盖。
子类的构造方法的用法,对象的上转型对象,抽象类与抽象方法等。
二、实验要求:1.根据下面的要求,编写Java应用程序实现:编写程序模拟中国人、美国人是人、北京人是中国人。
除主类外,程序中还有4个类:People、ChinaPeople、AmericanPeople和BeijingPeople类。
要求如下:●People类有权限是protected的double型成员变量height和weight,以及public voidspeakHello()、public void averageHeight()和public void averageWeight()方法。
●ChinaPeople类是People的子类,新增了public void chinaGongfu()方法。
要求ChinaPeople重写父类的public void speakHello()、public void averageHeight()和public void averageWeight()方法。
●AmericanPeople类是People的子类,新增public void americanBoxing()方法。
要求AmericanPeople重写父类的public void speakHello()、public void averageHeight()和public void averageWeight()方法。
●BeijingPeople类是ChinaPeople的子类,新增public void beijingOpera()方法。
要求ChinaPeople重写父类的public void speakHello()、public void averageHeight()和public void averageWeight()方法。
C++实验四继承多态

{
public:
Circle(double r):radius(r){} //结构函数
virtual double area() const
{return 3.14159*radius*radius;}; //定义虚函数
protected:
double radius; //半径
(4)在类体中声明成员函数,在类外定义成员函数。
(5)在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。
5.实验任务五
事先编写好程序,上机调试和运行程序,分析结果。
(1)声明Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱体)类。将类的定义部分分别作为3个头文件,对它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数中用#include命令把它们包含进来,形成一个完整的程序,并上机运行;
#define PI 3.1415926
using namespace std;
class Point //定义坐标点类
{public:
Point(){x=0;y=0;}
~Point();
Point(double x0,double y0) {x=x0; y=y0;}
double setxy(double x0,double y0){x=x0; y=y0;}
void Student::display()
{cout<<"num:"<<num<<endl;
实验名称 java类的继承和多态

实验名称 java类的继承和多态实验名称 Java类的继承和多态一、实验目的1、理解Java类的继承和多态的概念2、掌握类的继承机制的实现3、掌握方法的重载,以及多态的实现。
二、实验要求1、本实验属于验证型和设计型实验。
需要根据已给的源程序运行结果,并结合问题进行新的设计;2、对实验过程中提出的问题进行解答;3、完成实验报告。
三、实验内容与过程1、上机运行下面的程序,并回答下面的问题。
public class ClassOne{int num=100;public void compute(){num-=50;}public static void main(String args[]){ClassOne one=new ClassOne();ClassTwo two=new ClassTwo();System.out.println(“num of ClassTwo:”+two.num);System.out.println(“num of ClassOne:”+two.getNum());pute();System.out.println(“num of ClassTwo:”+two.num);System.out.println(“num of ClassOne:”+two.getNum());}}class ClassTwo extends ClassOne{int num=0;public void plus(){num+=50;}public int getNum(){return super.num;}}问题:(1) 请指出Java面向对象编程中三个主要特性。
(2) Java中的继承机制是什么,(3) 请指出程序中关键字super的作用。
2、运行下面的程序,回答问题。
class Monkey{private int age=10;void speak(){System.out.println("I am monkey.");}}class People extends Monkey{void computer(int a,int b){int c=a*b;System.out.println("I can computer "+a+"*"+b+"="+c);}void speak(){System.out.println("I am human.");}}public class Excise7_2{public static void main(String args[]){Monkey monkey=new People();monkey.speak();puter(10,12);People people=(People)monkey;puter(10,12);}}问题:1、上面的程序有一处错误,请改正使其能正确运行。
Java实验指导4继承与多态

-------------精选文档 -----------------《Java 程序设计》实验指导实验四继承与多态一、实验目的:1.掌握类的继承方法。
2.掌握变量的继承和覆盖。
3.掌握方法的继承、重载和覆盖。
4.了解接口的实现方法。
二、实验原理新类可从现有的类中产生,并保留现有类的成员变量和方法,并可根据需要对它们加以修改。
新类还可添加新的变量和方法。
这种现象就称为类的继承。
当建立一个新类时,不必写出全部成员变量和成员方法。
只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。
被继承的类称为父类或超类(superclass),这个新类称为子类。
Java 提供了一个庞大的类库让开发人员继承和使用。
设计这些类是出于公用的目的,因此,很少有某个类恰恰满足你的需要。
你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。
所以,通常要对子类进行扩展,即添加新的属性和方法。
这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。
继承的意义就在于此。
语法格式:类访问限定符子类名extends父类名{⋯⋯}三、实验内容及要求:1.定义一个接口( ShapeArea ),其中包含返回面积的方法(getArea )。
定义一个矩形类( Rectangle),派生出一个正方形类(Square ),再定义一个圆类(Circle ),三者都要求实现接口ShapeArea,自行扩充成员变量和方法。
在主方法中建一数组,数组中放入一些上述类型的对象,并计算它们的面积之和。
2.运行下面的程序,理解成员变量的继承与隐藏,方法的覆盖与重载。
class A{int sum,num1,num2;public A(){num1=10;num2=20;sum=0;}void sum1(){sum=num1+num2;System.out.println("sum="+num1+"+"+num2+"="+sum);}void sum2(int n){num1=n;sum=num1+num2;System.out.println("sum="+num1+"+"+num2+"="+sum);}}class B extends A{int num2;public B(){num2=200;}void sum2(){sum=num1+num2;System.out.println("sum="+num1+"+"+num2+"="+sum);}void sum2(int n){num1=n;sum=num1+num2;System.out.println("sum="+num1+"+"+num2+"="+sum);}void sum3(int n){super.sum2(n);System.out.println("sum="+num1+"+"+num2+"="+sum);}}public class test{public static void main (String arg[]){B m=new B();m.sum1();m.sum2();m.sum2(50);m.sum3(50);}}。
Java继承与多态实验报告.doc

Java继承与多态实验报告.doc
Java的继承与多态实验报告
本报告致力于分析Java继承与多态的概念、原理和作用,以及相关实验过程及其结果。
继承,又称为分类,是Java面向对象程序设计语言中定义类之间关系的重要技术。
它使一个类可以使用另一个基类中定义的方法和属性,在基类中已经定义了一些功能,子
类可以对基类功能进行拓展与定制。
《Java技术手册》得出结论,继承可以有效提高软件的复用性、可维护性和可重用性,使大型的、复杂的程序有条理层次。
多态是Java中一种特殊的程序结构,允许不同类的对象对相同的消息作出不同的响应,由程序的消息而不是对象的类型来决定对象的行为。
它是Java多态性的基础,使程
序能够在不同对象上进行操作,统一实现。
从实验中,可以明显看出Java继承与多态之间的联系:多态必须依赖于继承,当子
类被创建时,它继承了母类的方法以及特性,这样,它才能以逐渐上升的方式处理所有消息,而多态给了子类独特-->性的功能。
同时,多态也方便了代码重用,因为子类会继承
母类的方法和属性。
此外,结果表明,多态的优点使程序可以提高可重用性,它也减少了代码的重复编写,同时允许特定类之外的类可以得到适用。
它促进了软件不断更新,因为多态给开发人员提
供了以对象层次组织代码的方法。
本练习涉及到Java继承与多态概念的整体概述和实现细节,为完全理解多态的概念
打下了坚实的基础。
它提供了一个理解和使用这些概念的有用方式和指导。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验4 继承与多态性(1)
实验目的:
1.掌握子类的定义和使用方法
2.掌握子类的构造方法
实验内容:
一、编辑、编译和运行程序:
1.带参构造方法(RectExample.java)
class Rect
{ private int length,width;
Rect(int l,int w){ length=l; width=w; }
int GetArea(){ return length*width; }
}
class Rectangular extends Rect
{ private int height;
Rectangular(int l,int w, int h){ super(l,w); height=h;} int GetV(){ return GetArea()*height;}
}
public class RectExample
{ public static void main(String args[])
{ Rectangular r=new Rectangular(3,4,5);
System.out.println("长方体体积是:"+r.GetV());
}
}
2.无参构造方法(ConstructorTest.java)
class A
{ public A()
{ System.out.println(" String a"); }
}
class B extends A
{ public B()
{ super(); System.out.println(" String b"); }
}
class C extends B
{ public C()
{ super(); System.out.println(" String c"); }
}
public class ConstructorTest
{ public static void main(String args[])
{ C c = new C(); }
}
先运行上述程序,再省略super();后运行,比较结果。
二、用面向对象方法编程。
1. 设点类:
class Point
{ private int x, y;
Point ( int i, int j){ x=i; y=j;}
int getx(){ return x;}
int gety(){ return y;}
}
1) 设计点类Point的子类-园类Circle:定义成员变量:半径private int r ,定义构造方法初始化园心和半径,定义计算园面积的成员方法double area(),定义输出方法void output() 输出园心、半径和园面积。
在主类中测试。
2) 设计点类Point的子类-直线类Line:定义成员变量:直线的另一端点private int x,y ,定义构造方法初始化直线的两个端点,定义计算直线长度的成员方法double length(),定义用于输出的方法String toString()返回表示直线的两个端点和直线长度的字符串。
在主类中测试。
2.子类构造方法
教材第136页第14题。
( SubClassTest.java )。