实验7 抽象类

合集下载

实验-抽象类和接口

实验-抽象类和接口

实验-抽象类和接⼝学⽣实验报告课程:实验指导教师:系别:班级:实验⽇期:年⽉⽇实验地点:姓名:学号:⼀、实验名称:抽象类和接⼝实验概述:【实验⽬的及要求】1 ⼦类的继承性2⼦类对象的创建过程3成员变量的继承和隐藏4⽅法的继承和重写【实验环境】(使⽤的软件)Eclipse实验内容:【实验过程】(实验步骤、记录、数据、分析)实验内容:⼀、有⼀个abstract类,类名为Employee。

Employee的⼦类有YearWorker,MonthWorker 和WeekWorker。

YearWorker对象按年领取薪⽔,MonthWorker对象按⽉领取薪⽔,WeekWorker对象按周领取薪⽔。

Employee类有⼀个抽象⽅法:public abstract double earnings( );⼦类必须重写⽗类的earnings⽅法,给出各⾃领取报酬的具体⽅式。

有⼀个Company类,该类⽤employee数组作为成员,employee数组的成员可以是YearWorker对象的上转型对象、MonthWorker对象的上转型对象或WeekWorker对象的上转型对象。

程序能够输出Company对象⼀年需要⽀付的薪⽔总额。

程序模板按模板要求,将【代码1】~【代码4】替换为Java程序代码。

HardWork.javaabstract class Employee{public abstract double earnings( );}class YearWorker extends Employee{【代码1】// 重写earnings( )⽅法}class MonthWorker extends Employee{【代码2】// 重写earnings( )⽅法}class WeekWorker extends Employee{【代码3】// 重写earnings( )⽅法}class Company{Employee[ ] employee;double salaries=0;Company(Employee[ ] employee){this.employee=employee;}public double salariesPay( ){salaries=0;【代码4】// 计算salariesreturn salaries;}}public class HardWork{public static void main(String args[ ]){Employee[ ] employee=new Employee[20]; for(int i=0;i{if(i%3==0)employee[i]=new WeekWorker( );else if(i%3==1)employee[i]=new MonthWorker( );else if(i%3==2)employee[i]=new YearWorker( );}Company company=new Company(employee);System.out.println("公司年⼯资总额:"+company.salariesPay( ) );}}问题:1、⼦类YearWorker如果不重写⽗类的earnings( )⽅法,程序编译时会提⽰怎样的错误?⼆、有⼀个ComputeTotalSales接⼝,该接⼝中有⼀个⽅法:public double totalSalesByYear( );有三个实现该接⼝的类:Television、Computer和Mobile。

Java实验7抽象类和接口

Java实验7抽象类和接口

实验6抽象类与接口一、实验目的:1、学习掌握抽象类的概念与使用方法。

2、学习掌握接口的概念与定义接口的方法。

3、学习使用Cloneable接口与clone方法进行对象内容的复制。

4、理解浅复制与深复制的概念,掌握覆盖clone方法进行对象内容深复制的技术。

二、实验任务:1、学习掌握抽象类的概念与使用方法。

程序要求:(1)首先创建一个类家族,其中抽象类几何图形类GeometricObject为父类,圆类Circle与矩形类Rectangle为子类。

几何图形类GeometricObject中定义保护型字符串变量color,表示图形的颜色;该类要具备构造方法与两个抽象方法findArea与findPerimeter,抽象方法findArea求图形面积,抽象方法findPerimeter求图形周长。

(2)Circle类与Rectangle类就是GeometricObject类的子类,其中应实现父类的抽象方法。

(3)程序主方法中创建两个几何对象,一个圆与一个矩形,并用GeometricObject类的引用变量引用它们,调用抽象方法。

2、学习接口的概念与利用接口实现多态的方法。

程序要求如下:(1)首先创建圆类Circle与圆柱体类Cylinder,其中Circle类就是父类,Cylinder类就是子类;(2)创建接口Comparable,其中包含一个抽象方法compareTo,用来比较对象的大小。

抽象方法compareTo的形式如下:public int compareTo(Object o);(3)创建类ComparableCircle,该类为Circle类的子类,并实现Comparable接口。

(4)创建类ComparableCylinder,该类为Cylinder类的子类,并实现Comparable接口。

(5)创建通用类Max,其中包含通用方法max,只要类实现了Comparable 接口,就可以使用max方法返回两个对象中较大的一个。

抽象类的使用实验报告

抽象类的使用实验报告

抽象类的使用实验报告计算机0903班胡笑梅学号:********抽象类的使用一、实验目的(1).在Visual C++6.0的开发环境下定义抽象类,并进一步派生最终形成一个类族。

二、实验任务使用Visual C++建立标准C++程序。

编写一个程序计算正方形、球体和圆柱体的表面积和体积。

三、实验步骤1.启动Visual C++6.0开发环境。

从“开始”菜单里选择“程序”|Microsoft Visual Studio 6.0 | Microsoft Visual C++ 6.0 ,显示Visual C++ 6.0开发环境主窗口。

2.创建一个项目。

单击File菜单中的New选项,进行新建。

选择Win32控制台应用程序。

在文本框里输入项目名称“lab1”,单击ok按钮。

3.建立C++源程序文件。

4.编辑C++源程序文件内容。

5.程序源代码为:#include<iostream>using namespace std;class CCt //定义抽象类CContaineer{protected:float radius; //公共的数据成员radiusdouble area,volume; //表面积area,体积volumepublic:virtual void Area()=0; //求表面积的纯虚函数virtual void V olume()=0; //求体积的纯虚函数CCt(float a,double b,double c) {radius=a;area=b;volume=c;} //基类的构造函数};class Square:public CCt //派生类Square{public:Square(float a,double b,double c): CCt (a,b,c) { }void Area() //虚函数Area() {area=6*radius*radius;cout<<"Square's area="<<area<<endl;}void V olume() //虚函数V olume (){volume=radius*radius*radius;cout<<" Square's volume="<<volume<<endl;}};class circle:public CCt //派生类circle{public:circle(float a,double b,double c): CCt (a,b,c){} //派生类circle构造函数void Area(){area=4*3.14*radius*radius;cout<<"circle's area="<<area<<endl;}void V olume(){volume=3.14*radius*radius*radius*4/3;cout<<" circle's volume="<<volume<<endl;}};class CCtlinder:public CCt//派生类CCtlinder{float high;public:CCtlinder(float h,float r,double a,double v): CCt (r,a,v) {high=h;}void Area() //派生类CCtlinder的虚函数定义{area=2*3.14*radius*radius+2*3.14*radius*high;cout<<" CCt linder's area="<<area<<endl;}void V olume(){volume=3.14*radius*radius*high;cout<<" CCt 's volume="<<volume<<endl;}};void Areafun(CCt *p)//根据p所指向的对象不同,调用不同的派生类Area{p->Area();}void V olumefun(CCt *p) //根据p所指向的对象不同,调用不同的派生类V olume{p->V olume();}void main(){Square r1(5,0,0);// Square的对象r1circle c1(8,0,0); // circle的对象c1CCtlinder cc2(2,14,0,0); // CCt linde的对象cc2Areafun(&r1);//调用的将是派生类Square的Area虚函数V olumefun(&r1);// 调用的将是派生类Square的V olume虚函数Areafun(&c1);V olumefun(&c1);Areafun(&cc2);V olumefun(&cc2);}6.程序运行结果四、实验总结通过实验进一步熟练的使用VC。

抽象类详解——精选推荐

抽象类详解——精选推荐

抽象类详解
抽象类
说明
当⽗类的⼀些⽅法不确定时,可以⽤abstract关键字来修饰该⽅法,这个⽅法就是抽象⽅法,⽤abstract来修饰该类就是抽象类所谓抽象⽅法就是没有实现的⽅法
所谓没有实现就是指没法⽅法体
当⼀个类中存在抽象⽅法时,需要将该类声明为抽象类
⼀般来说,抽象类会被继承,由其⼦类实现程序⽅法
介绍
1. ⽤abstract关键字来修饰⼀个类时,这个类就叫抽象类
访问修饰符 abstract 类名{
}
2. ⽤abstract关键字来修饰⼀个⽅法时,这个⽅法就是抽象⽅法
访问修饰符 abstract 返回类型⽅法名(参数列表);
3. 抽象类的价值更多作⽤是在于设计,是设计者设计好后,让⼦类继承并实现抽象类
4. 抽象类在框架和设计模式使⽤较多
注意事项
抽象类不能被实例化
抽象类不⼀定要包含abstract⽅法,也就是说,抽象类可以没有abstract⽅法
⼀旦类包含了abstract⽅法,则这个类必须声明为abstract
abstract只能修饰类和⽅法,不能修饰属性和其他的
抽象类可以有任意成员,⽐如⾮抽象⽅法,构造器,静态属性,本质还是类
抽象⽅法不能有主体
如果⼀个类继承了抽象类,则它必须实现抽象类的所有抽象⽅法,除⾮它⾃⼰也声明为abstract类
抽象⽅法不能使⽤private final 和static来修饰,因为这些关键字都是和重写相互违背的。

JAVA--抽象类的定义和使用实验报告

JAVA--抽象类的定义和使用实验报告

实验报告题目类定义与类的继承姓名学号B09050124时间2011.04.12 地点实验B楼1.实验内容要求定义Student类和Graduate类,Graduate类从Student类派生。

2.实验要求(1) 设计一个学生类,学生类包括私有访问类型的学号、姓名、性别、成绩等数据成员和设置成绩、求总成绩、平均成绩、构造函数等方法成员。

(2)设计一个研究生类,添加导师数据成员,研究生类从学生类派生;(3)写出测试代码。

3.试验步骤源代码:public class StudentClass {public static void main(String args[]){Student st1 = new Student();Student st2 = new Student("b09050429","sjc","man",(byte)60,(byte)80,(byte)80);Student st3 = new Student(st2);Graduate gst = new Graduate();System.out.println("st1:");st1.print();System.out.println("st2:");st2.print();System.out.println("st3:");st3.print();System.out.println("修改成绩后:");st3.SetScore((byte)60,(byte)60,(byte)60);st3.print();System.out.println("Graduate:");gst.print();System.out.println("修改成绩后:");gst.SetScore((byte)100,(byte)100,(byte)100);gst.print();}}class Student{ //学生类String no;String name;String sex;byte chinese;byte math;byte java;Student(){ //默认构造函数no = "00";name = "000";sex = "man";chinese = (byte)20;math = (byte)20;java = (byte)20;}Student(String no,String name,String sex,byte chinese,byte math,byte java){this.no = no; = name;this.sex = sex;this.chinese = chinese;this.math = math;this.java = java;}Student(Student st){ //拷贝构造函数this(st.no,,st.sex,st.chinese,st.math,st.java);}void SetScore(byte ch,byte ma,byte ja){ //设置成绩chinese = ch;math = ma;java = ja;}short GetTotalScore(){ //得到总成绩return (short)(chinese+math+java);}float GetAverageScore(){ //得到平均成绩return (float)(GetTotalScore()/3.0);}void print(){ //显示学生信息System.out.println("学生信息: "+" 学号:"+no+" 姓名:"+name+" 性别:"+sex);System.out.println("成绩: "+"语文 "+chinese+" 数学:"+math+" Java:"+java);System.out.print("\n");}}class Graduate extends Student{String supervisor;Graduate() {super("钱森","nb74110","Man",(byte)99,(byte)99,(byte)99);supervisor="爱因斯坦";}}实验结果:st1:学生信息: 学号:00 姓名:000 性别:man成绩: 语文 20 数学:20 Java:20st2:学生信息: 学号:b09050410 姓名:zjl 性别:man成绩: 语文 60 数学:80 Java:80st3:学生信息: 学号:b09050429 姓名:zjl性别:man成绩: 语文 60 数学:80 Java:80修改成绩后:学生信息: 学号:b09050429 姓名:zjl 性别:man成绩: 语文 60 数学:60 Java:60Graduate:学生信息: 学号:钱森姓名:nb74110 性别:Man成绩: 语文 99 数学:99 Java:99修改成绩后:学生信息: 学号:钱森姓名:nb74110 性别:Man成绩: 语文 100 数学:100 Java:100。

实验7 多态性、抽象类和接口

实验7 多态性、抽象类和接口

实验7 多态性、抽象类和接口
实验目的:熟练掌握面向对象的多态性,理解抽象类和接口的用法。

实验步骤:
(1)编写两个类:Circle和Trapezium,要求实现下面的接口。

(GetShapeArea.java)
interface Shape{
double getArea( );
}
……
(2)创建一个抽象类Cycle,它具有两个抽象方法:ride( )方法和balance( )方法。

该类有三个子类Unicycle,Bicycle和Tricycle。

创建一个TestCycle类,并在此类的main( )方法中创建一个Cycle类型的数组,创建三种类型的对象并存放在此数组中,数组中的每一个元素都尝试调用balance ( )方法和ride ( )方法。

作业:
(1)多态性是指父类的某个方法被子类重写时,可以产生自己的功能行为。

如:猫和狗都具有动物的行为:“喊叫”。

当狗“喊叫”时产生的声音是“汪汪……”,而猫“喊叫”时产生的声音是“喵喵……”。

请编程实现这一过程。

// TestPoly.java
class Animal{
void cry( ){}
};
……。

抽象类的用途

抽象类的用途

抽象类的用途抽象类是面向对象编程中的一个重要概念,用于表示一类具有相似特征和行为的对象。

它一般位于类继承的最顶层,不能被实例化,只能作为其他具体类的父类。

抽象类的设计目的是为了提供一种模板或为子类提供一组共同的特性和行为。

下面我将详细讨论抽象类的用途,包括代码复用、代码设计和代码的多态性。

首先,一个抽象类可以用来实现代码复用。

在面向对象编程中,我们经常会遇到一些具有相似特征和行为的对象。

通过定义一个抽象类,我们可以将这些相似的特征和行为抽象出来,并在抽象类中进行实现。

然后,可以通过继承这个抽象类的方式,使得子类可以继承抽象类中的代码,从而实现代码的复用。

这样可以大大减少代码的冗余,提高代码的可维护性和可重用性。

其次,抽象类可以用来实现代码设计。

通过定义抽象类,可以指导子类的设计和实现。

抽象类中定义了一组抽象方法和具体方法。

抽象方法是没有具体实现的方法,而是只有方法声明。

子类在继承抽象类时,必须实现抽象类中的抽象方法,这样可以约束子类必须具有一定的功能和行为。

同时,抽象类中的具体方法提供了一些通用的实现,可以减轻子类的负担,提供一些默认的行为。

通过合理设计抽象类中的抽象方法和具体方法,可以使得子类的设计更加合理和清晰。

再次,抽象类可以用来实现代码的多态性。

多态是面向对象编程中的一个重要特性,通过多态可以实现面向对象编程的一个主要目标——封装性。

抽象类通过定义抽象方法来实现多态。

抽象方法是没有具体实现的方法,而是只有方法声明。

通过继承抽象类并实现这些抽象方法,不同的子类可以根据自身的实际情况来实现这些方法,从而表现出不同的行为。

这样,不同的子类可以通过同样的方式来调用这些抽象方法,并且可以根据子类的不同实现来执行不同的操作。

这种多态性可以提高代码的灵活性和可扩展性,使得程序更加易于维护和扩展。

此外,抽象类还可以作为接口的一种补充。

接口是一种特殊的抽象类,它只包含抽象方法和常量,没有具体实现。

接口主要用于规范类的行为和实现,通过实现接口可以使得类满足特定的行为规范。

实验7 抽象类和接口

实验7  抽象类和接口

抽象类和接口一、实验目的1、掌握抽象类的定义和子类的继承;2、掌握方法覆盖的应用;3、掌握接口的定义和实现方法。

二、实验内容1、定义图形类及其子类,分别用抽象类和接口实现。

2、定义在职研究生类,继承学生类和教师类。

三、实验步骤说明:请将第2题代码写入实验报告实验步骤处。

1、定义图形类及其子类,分别用抽象类和接口实现。

定义图形类,包含常量PI、用于计算面积的方法getArea()、用于计算体积的方法getV olume()。

定义子类Circle,Rectangle、Cylinder,根据需要设置属性,使用getArea()方法和getArea()方法分别实现面积的计算和体积的计算。

2、定义在职研究生类,继承学生类和教师类。

学校中有教师和学生两类人,而在职研究生既是教师又是学生。

设计两个接口StudentInterface和TeacherInterface。

其中,StudentInterface接口包括setFee()和getFee()方法,分别用于设置和获取学生的学费;TeacherInterface接口包括setPay()和getPay()方法,分别用于设置和获取教师的工资。

定义一个研究生类Graduate,实现StudentInterface接口和TeacherInterface接口,它的成员变量有fee(每学期学费)和pay(月工资)。

创建一个研究生“zhangsan”,统计他的年收入和学费,如果收入减去学费不足2000元,则输出“You need a loan!”(需要贷款),否则输入“Your pay is enough!”四、实验记录与分析(可自拟或选择)1、抽象方法没有方法体。

2、含有一个或多个抽象方法的类必须声明成抽象类。

3、抽象类不能创建对象。

4、所有抽象类的子类必须实现抽象方法,或者自己也声明成抽象类。

5、接口可实现类间多重继承。

6、接口中的所有方法的修饰符都是public abstract。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
当每月工作的小时数超过196小时时,超出的部分按每小时200元。基本工资+(工作的小时-196)*200。
6)在main函数中生成
一个公司对象;
一个小时工的对象,每小时工资10,工作200小时;
一个小时工的对象,每小时工资10,工作230小时;
一个销售员工的对象,基本工资1000,销售额5000;
一个销售员工的对象,基本工资1000,销售额200000;
实验
一、实验目的
掌握抽象类的定义,理解抽象类与一般类的区别。进一步理解多态性的概念。
二、实验要求
1.掌握抽象类的定义,理解抽象方法。
2.掌握抽象类的使用。
三、实验内容
1)制作一个销售首饰的公司类。
属性:
一个保存员工的数组(也可采用Vector类来保存员工)。
方法:
1,添加一个员工。
2,通过员工的名字来删除员工。
3,通过员工的名字来显示员工的工资。
4,输出所有员工的工资和。
2)定义一个抽象员工类
属性:姓名,基本工资
抽象方法:计算工资。
3)子类:小时工类
属性:
工作的小时,每小时工资。
方法:
1.设置工作的小时
2.设置每小时的工资。
3.重写计算工资方法:
小时工没有基本工资,他的工资就是工作的小时*每小时工资。
4)子类:销售员工类
属性:
销售的总金额
方法
1.设置销售的总金额
2.重写计算工资方法:
基本工资+提成。
提成的计算:
当销售额再10000以下时,则提成10%,
等销售额再10000-100000之间是,则提成15%。
再100000以上是,提成18%。
5)子类:普通员工类
属性:
工作的小时
方法:
1.设置工作的小时
2.重写计算工资的方法:
一个普通员工对象,基本工资1200,工作小时205小时。
(注:员工的姓名可自行拟定。)
将以上员工对象加入公司对象中,然后调用输出所有员工工资和的方法,查看该公司该月应
该发的工资总和。
7)随着该公司的业务扩展,该公司决定自己生产首饰,该公司多了一种新的类型的员工,
首饰工人。
定义首饰工人类:
属性
生产首饰的数量
方法
1设置生产首饰的数量
2重写计算工资的方法
工main函数中多生成一个首饰工人对象,生产首饰的数量30;
将该对象加入公司对象中,
然后调用输出所有员工工资和的方法,查看该公司该月应该发的工资总和。
四、思考题
继承,多态对于程序的可维护,可扩展带来的好处。
相关文档
最新文档