实验04 类的继承与多态

合集下载

第4章类的继承和多态

第4章类的继承和多态
掌握继承、多态的实现和使用 掌握Java的方法重写
掌握supBiblioteka r、final关键字的使用4.1类的继承
类的继承是面向对象编程的三大特征之一,是一种由已有 的类创建新类的机制,也是实现软件复用的重要手段, 它允许创建分等级层次的类。 在Java术语中,被继承的类叫父类(parent class)或超类 (super class),继承父类的类叫子类(subclass)或 派生类(derived class)。 Java语言只支持单继承,不支持多继承。
实例4-2继承关系中子类构造方法的定义(以Person类和 Student类为例)。 实例4-3继承关系中构造方法的调用次序。
4.super关键字 在Java中,“super”关键字代表父类对象。在子类中通过使用super关 键字可以在子类构造方法中调用父类的构造方法,以便初始化从父 类继承过来的属性;也可以使用super做前缀来访问父类的属性或 方法。 (1)使用super调用父类的构造方法。 (2)使用super调用父类中的属性或方法 在子类中可以隐藏父类的成员变量。只要子类中定义的成员变量和父 类中的成员变量同名时,子类就隐藏了父类的同名成员变量,即当 子类对象或方法操作该同名成员变量时操作的是子类中定义的成员 变量。这时如果想访问父类的同名成员变量,就要通过“super” 关键字来访问。访问格式为:super.父类中的属性名; 子类能继承父类的非私有方法,也可以隐藏已继承的方法。子类通过 方法重写来隐藏父类的同名方法。
2.继承原则 (1)子类继承父类的所有成员变量和成员方法(构造方 法除外),但子类不能直接使用父类的私有变量和私有方 法。 (2)子类不能删除父类的成员,但是可以增加新成员或 者重定义父类的成员。
3.子类对象的实例化 构造方法用于初始化实例的内存空间。但由于Java规定: 父类的构造方法不能被子类继承,所以子类不能直接调用 父类的构造方法。那么如何构造子类实例呢? 在Java中,父类和子类属性的初始化过程是各自完成的。 虽然子类不能继承父类的构造方法,但可以在子类的构造 方法中通过使用super关键字调用父类的构造方法,以便 初始化从父类继承的属性。

实验四 、类的继承与多态

实验四 、类的继承与多态

实验四类的继承与多态一、实验目的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. 编译运行程序,查看运行结果。

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

实验4 类的继承和多态机制
2、在子类中不能使用父类的构造方法的名字进行调用。
3、覆盖表现为父类与子类之间方法的多态性;重载表现为同一个类中方法的多态性。
4、与实例方法一样,静态方法能够被继承,但是静态方法不能被重写。
5、如果父类和子类都定义了相同的静态方法,那么父类中的方法将会被隐藏。
已有一个交通工具类Vehicle,其中属性包括:速度speed、类别kind、颜色color;方法包括设置速度、设置类别、设置颜色、取得速度、取得类别、取得颜色。
设计一个小车类Car、一个公共汽车类Bus,继承自Vehicle,Car、Bus中增加了属性:座位数passenger,增加了设置和获取座位数的方法。
}
void setKind(String kind){
this.kind=kind;
}
void setColor(String color){
this.color=color;
}
public double getSpeed(){
return speed;
}
public String getKind(){
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){
return kind;
}
public String getColor(){

实验04类的继承与多态

实验04类的继承与多态

实验04类的继承与多态实验四类的继承与多态一、实验目的1.掌握构造方法和成员方法重载的应用。

2.理解类的继承性的作用3.领会面向对象编程的多态性。

二、实验内容与要求基本概念1.进一步理解继承的含义新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。

新类还可添加新的变量和方法。

这种现象就称为类的继承。

当建立一个新类时,不必写出全部成员变量和成员方法。

只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。

被继承的类称为父类或超类(superclass),这个新类称为子类。

Java 提供了一个庞大的类库让开发人员继承和使用。

设计这些类是出于公用的目的,因此,很少有某个类恰恰满足你的需要。

你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。

所以,通常要对子类进行扩展,即添加新的属性和方法。

这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。

继承的意义就在于此。

2.了解成员变量的隐藏方式所谓隐藏是指子类重新定义了父类中的同名变量,在子类L ine 中重新定义了x为x1,y 为y1,隐藏了父类Point 中的两个成员变量x 和y。

子类执行自己的方法时,操作的是子类的变量,子类执行父类的方法时,操作的是父类的变量。

在子类中要特别注意成员变量的命名,防止无意中隐藏了父类的关键成员变量,这有可能给程序带来麻烦。

3.了解成员方法的覆盖方式(1)方法覆盖的定义与作用通过继承子类可以继承父类中所有可以被子类访问的成员方法,但如果子类的方法与父类方法同名,则不能继承,此时称子类的方法覆盖了父类的方法,简称为方法覆盖(override)。

方法覆盖为子类提供了修改父类成员方法的能力。

4.理解类的多态性类的继承发生在多个类之间,而类的多态只发生在同一个类上。

在一个类中,可以定义多个同名的方法,只要确定它们的参数个数和类型不同。

这种现象称为类的多态。

类的继承与多态性实验报告

类的继承与多态性实验报告

类的继承与多态性实验报告类的继承与多态性实验报告目录1.介绍2.什么是多态3.多态在Java中的技术基础4.示例5.多态的好处6.总结介绍之前的文章介绍过类的封装性和继承性,现在是时候聊聊面向对象编程的三大特性之一的最后一个类的多态性了。

多态的基础是继承(包括了接口的实现)和方法的覆盖。

什么是多态多态对应的英文单词是polymorphism ,百度翻译给出的翻译是:n.多型现象,多态性;多机组合形式;按字面意思就是多种状态、形态、姿态等等,潜台词就是某个东西具有多种状态、形态、姿态等等。

那是什么东西呢?在面向对象的编程语言里面(当然就包括Java 了)就是某个方法或函数。

那方法的多种状态、形态、姿态有是个什么意思呢?这其实是指同一个方法具有多个方法体,就是方法的实现。

而方法的相同与否是由方法签名决定的。

所以,多态其实本质上是指同一个类的同一个方法却具有不同的行为特征。

状态、形态、姿态指的就是行为特征。

多态在Java中的技术基础然而,在Java中,同一个类里面是不可能存在两个签名相同而实现不同的方法的,否则的话会导致无法判断该执行哪个方法,因此在编译时就会报错。

所以,肯定是在两个类中才有可能存在两个签名相同而实现不同的方法,一个实现在这个类,另一个实现在另一个类。

而如果这两个类毫无瓜葛,那么肯定就与多态的本质(同一个类的同一个方法却具有不同的行为特征)自相矛盾了。

所以,这两个类肯定是有某种联系的。

我们再想想,什么概念是能够让两个不同的类却又能称为同一个类的? 答案就是类的继承/扩展,就是现实中的“某东西是某类东西”的概念,就是“具体和抽象”的思想。

比如,男人是人,女人也是人,男人类和女人类就借助于人类建立了某种联系,而人类具有的某个行为在男人类和女人类中是有着不同体现的,比如人类的吃饭这个行为,男人类的体现是狼吞虎咽,女人类的体现是细嚼慢咽。

例子不是很恰当,但意思就是这么个意思。

所以说,Java里面多态的技术基础就是方法的覆盖,当然,在Java中覆盖不仅仅发生在类的继承/扩展上,还可能发生在接口的实现上。

实验4 继承性和多态

实验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++实验四继承多态

C++实验四继承多态
class Circle:public Shape
{
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程序设计模块四---类的继承和多态
stu.setAge(30) ;//从Person继承而来
stu.setSchool("清华大学") ;//自己定义的方法
System.out.println("姓名:" + stu.getName()) ;
System.out.println("年龄:" + stu.getAge()) ;
System.out.println("学校:" + stu.getSchool()) ;
int sno;
String department;
}
public class TestStudent {
public static void main(String[] args) {
Student st=new Student();
="张三";
st.age=18;
st.sex='男';
StudentA obj2 =new StudentA("张三",18,1); //调用有参构造方法创建对象
obj1.pprint(); //调用父类的成员方法
obj1.sprint(); //调用子类的成员方法
obj2.pprint(); //调用父类的成员方法
obj2.sprint(); //调用子类的成员方法
class Student{
System.out.println("class:Person:"+" Name:"++" age:"+this.age);
}
}
class StudentA extends PersonA {
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四类的继承与多态
一、实验目的
1.掌握构造方法和成员方法重载的应用。

2.理解类的继承性的作用
3.领会面向对象编程的多态性。

二、实验内容与要求
基本概念
1.进一步理解继承的含义
新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。

新类还可添加新的变量和方法。

这种现象就称为类的继承。

当建立一个新类时,不必写出全部成员变量和成员方法。

只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。

被继承的类称为父类或超类(superclass),这个新类称为子类。

Java 提供了一个庞大的类库让开发人员继承和使用。

设计这些类是出于公用的目的,因此,很少
有某个类恰恰满足你的需要。

你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。

所以,通常要对子类进行扩展,即添加新的属性和方法。

这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。

继承的意义就在于此。

2.了解成员变量的隐藏方式
所谓隐藏是指子类重新定义了父类中的同名变量,在子类L ine 中重新定义了x为x1,y 为y1,隐藏了父类Point 中的两个成员变量x 和y。

子类执行自己的方法时,操作的是子类的变量,子类执行父类的方法时,操作的是父类的变量。

在子类中要特别注意成员变量的命名,防止无意中隐藏了父类的关键成员变量,这有可能给程序带来麻烦。

3.了解成员方法的覆盖方式
(1)方法覆盖的定义与作用通过继承子类可以继承父类中所有可以被子类访问的成员方法,但如果子类的方法与父类方法同名,则不能继承,此时称子类的方法覆盖了父类的方法,简称为方法覆盖(override)。

方法覆盖为子类提供了修改父类成员方法的能力。

4.理解类的多态性类的继承发生在多个类之间,而类的多态只发生在同一个类上。

在一个类中,可以定义多个同名的方法,只要确定它们的参数个数和类型不同。

这种现象称为类的多态。

多态使程序简洁,为程序员带来很大便利。

在O OP 中,当程序要实现多个相近的功能时,就给相应的方法起一个共同的名字,用不同的参数代表不同的功能。

这样,在使用方法时不论传递什么参数,只要能被程序识别就可以得到确定的结果。

类的多态性体现在方法的重载(overload)上,包括成员方法和构造方法的重载。

实践应用
1、定义一个圆类Circle,成员变量:半径radius;
成员方法:构造方法、get和set半径的方法、计算面积和周长的方法。

定义圆柱和圆锥类,定义相应的变量成员和成员方法。

使用以上类编程,输出圆柱和圆锥面积和体积。

2、声明一个类MyClass,包含一个整型变量data和封装这个变量的两个方法getData()和setData()。

声明一个该类的子类SubClass,包含一个整型变量Mydata和封装这个变量的两个方法getMydata()和setMydata(),编写主程序检查SubClass类中的所有变量与方法(包括继承自父类的变量和方法。

3、下面给出一个根据雇员类型利用多态性完成工资单计算的程序。

定义一个类Employee 作为超类,Employee的子类有Boss(每星期发给他固定工资,而不计工作时间)、PieceWorker (按其生产的产品数发放工资)、HourlyWorker(根据工作时间长短发放工资)。

对所有雇员类型都使用earnings()方法完成其工资单的计算,但每个人挣的工资按他所属的雇员类计算,所有雇员类都是从超类Employee派出生的。

所以在超类中声明earnings()方法,该方法没有实质性工作,而是在每个子类都提供恰当的earnings()方法的重写。

为了计算雇员的工资,程序仅使用雇员对象的一个超类引导并调用earnings()方法。

三、思考题
1、如何继承一个类?
2、同名的不同方法共存的情况称为什么?如何区分这些同名方法?
3.子类重新定义与父类方法的方法头完全相同的方法,这种情况称为什么?。

相关文档
最新文档