文档库 最新最全的文档下载
当前位置:文档库 › 实验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。

Java实验题目

Java实验题目 一、 (1).编写Java应用程序,定义byte、short、int、long、float、double、char和boolean 等类型的数据并用一个输出语句输出,要求每行输出一个数据。 (2).编写Java小应用程序,输出两行字符串:“Java很有趣。”和“努力学习Java 编程。”,输出的起点坐标是(20,20),行距是50像素。 (3).使用算术运算符得到一个4位十进制数的各位数字并输出,然后输出该数的逆序数和各位数字平方后相加的和。 (4).编写Java小应用程序,用三目条件运算符求程序中给定的4个double数的最大值和最小值并输出结果。 实验报告题:使用算术运算符得到一个4位十进制数的各位数字并输出,然后输出该数的逆序数和各位数字平方后相加的和。 二、 1、数据类型与表达式的使用 自己编写程序测试各种运算符的使用。例如,以下程序是测试Java的数据类型:public class UseVarible { public static void main(String args []) { boolean b = true; short si = 128; int i = -99; long l = 123456789L; char ch = 'J'; float f = 3.1415925F; double d = -1.04E-5; String s = "你好!"; System.out.println("布尔型变量b="+ b); System.out.println("短整型变量si="+ si); System.out.println("整型变量i="+ i); System.out.println("长整型变量l="+ l); System.out.println("字符型变量ch="+ ch); System.out.println("浮点型变量f="+ f); System.out.println("双精度型变量d="+ d); System.out.println("字符型对象s="+ s); } } 2、数组的创建与使用 编写并运行P.23例1-5,例1-6。 3、思考与上机练习 (1). 编写Java应用程序,其中定义一个int数组(数组元素任意指定),将数组

java实验指导书

实验一java开发环境及语言基础 实验目的 (1)确保正确配置java开发环境。 (2)了解javac和java命令的使用。 (3)熟悉java中的运算符。 (4)掌握条件语句和循环语句的使用。 (5)掌握通过命令行参数接受数据。 (6)掌握用Scanner类接受数据。 实验内容 (1)在控制台中输入java命令,查看输入结果。 (2)编写一个java程序,计算半径为3.0的圆周长和面积并输出结果。 (3)求a+aa+aaa+...+a...a(n个)的和,其中a为1~9之间的整数。例如,当a=3、n=4时,求3+33+333+3333的和。 (4)给定一个正整数m,统计其位数,分别打印每一位数字,再按照逆序打印出各位数字。(5)用Scanner类方法输入三角形三边求三角形面积。 实验要求 (1)JDK的安装及配置。 (2)在DOS及eclipse下编辑、编译运行第一个java程序:hello world。 (3)求圆周长和面积用方法实现,主函数调用。 (4)从命令行输入1~9之间的整数a,当所求的和大与106时,输出相应的a值及所求的和值。 (5)用Scanner类的方法输入正整数m,m的值不应该超过99999,否则给出错误信息。应引入包:import java.util.Scanner,然后在需要的方法中实例化对象:Scanner sc = new Scanner(System.in),最后调用对象的next方法,如int n=nextInt(),接受整数。 实验二数组 实验目的 (1)掌握数组的定义和使用方法。 (2)熟悉数组的排序、查找的方法。 (3)巩固循环的使用。 实验内容 (1)使用for循环,将二维数组的行与列互换,即完成矩阵的转置。 (2)编写数组的排序程序。 (3)编写杨辉三角。 实验要求 (1)编写一个界面1 选择排序2 冒泡排序3插入排序4 快速排序5 退出 当选择1、2、3、4、5的时候完成相应的功能。 (2)杨辉三角形状为等腰三角形 实验三字符串 实验目的 (1)掌握正则表达式的使用。 (2)熟悉java的字符串。

抽象类和接口的相同和异同点

抽象类和接口的相同和异同点 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。 接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。 在编写对象的时候会对一些类的方法进行定义。但是并没有具体的实现。而是把它们放到子类中去实现,具有灵活性。在抽象类中可以有抽象方法,也可以没有抽象方法。但是有了抽象方法的类一定是抽象类。 抽象类和接口在JA V A中都是用来表述抽象类的。 在面向对象的概念,所以的对象都是通过类来描述的。但反之则不行。若是一个类中没有包含足够的信息描绘一个具体的对象,这个的类就是抽象类。 在JA V A中除了使用抽象类来实现一定程度的抽象外还可以定义一种特殊的抽象方法----接口(interface)。和抽象类的方法不一样,在抽象类中需要加上关键字abstract来表明某个方法是抽象的,但是在接口中则不需要。 相同点: 1.他们都能不能生成实例,都有抽象方法。 2接口是特殊的抽象类。 3.接口和抽象类的继承都使用的关键字是extends。 不同点: 1.接口的定义的变量默认是public static final型,且必须给其赋初值。所以在实现类中不能重新定义,也不能改变其值。而在抽象类中其值在子类中可以重新定义也可以重新赋值。 2.接口的方法默认的都是public abstract类型的。 3.抽象类中可以有构造器,但是接口中除了抽象方法什么都没有。 4.名字不同,接口写的是public interface Shape{}; 而抽象类写的是public abstract class Shape{}; 接口里全部都是抽象方法。而抽象类里可以有抽象方法也可以有其他的方法。接口里的属性都是静态的。但是抽象类的属性可以是任意的。 5.还可以从继承的角度看,接口可以多继承,一个接口可以继承多个接口。但是抽象类却不能,只能是继承一个父类,不能继承多个父类。要是能继承多个父类的话会在父类和子类的方法中有发生冲突。

抽象类&接口&内部类章节自测题

抽象类&接口&内部类章节自测题 一、选择 1、定义一个接口必须使用的关键字是(C) A. public B. class C. interface D. static 2、类B是一个抽象类,类C是类B的非抽象子类,下列创建对象x1的语句中正确的是(B C )。(多选) A. B x1= new B( ); B. B x1= new C( ); C. C x1=new C( ); D. C x1= new B( ); 3、下面说法正确的是( A BC D )。(多选) A. final 可修饰类、属性(变量)、方法。 B. abstract可修饰类、方法。 C. 抽象方法只有方法头,没有方法体。 D. 关键字final和abstract不能同时使用。 4、下面说法正确的是( A CD)。(多选) A.如果某公共接口被声明在一个源文件中,则接口必须与源文件具有相同名字。 B.如果源文件包含import语句,则该语句必须是除空行和注释行外的第一个语句行。 C.如果某源文件包含package语句,则该语句必须是第一个非空、非注释行。 D.接口中的方法必定是抽象方法,但可以不用关键字abstract修饰。 5、抽象方法:( C ) A.可以有方法体 B.可以出现在非抽象类中 C.是没有方法体的方法 D.抽象类中的方法都是抽象方法 6、关于接口哪个正确?(A ) A.实现一个接口必须实现接口的所有方法 B.一个类只能实现一个接口 C.接口间不能有继承关系 D.接口和抽象类是同一回事 7、下列哪个类的声明是正确的?(D)

A.abstract final class HI{} B.abstract private move(){} C.protected private number; D.public abstract class Car{} 8、关于类继承的说法,正确的是(B )。A.Java 类允许多重继承 B.Java接口允许多继承 C.接口和类都允许多继承 D.接口和类都不允许多继承 9、以下关于abstract的说法,正确的是( D )。A.abstract只能修饰类 B.abstract只能修饰方法 C.abstract类中必须有abstract方法D.abstarct方法所在的类必须用abstract修饰 10、下列哪个类声明是正确的?(D )A.abstract final class HI{} B.abstract private move(){} C.protected private number; D.public abstract class Car{}

Java程序设计(接口)期末单元测试与答案

一、单选题 1、下列关于抽象类和抽象方法,叙述错误的是()。 A.抽象类中的普通方法,可以不必实现 B.在类中没有方法体的方法,就是抽象方法 C.抽象类中的抽象方法必须被实现 D.如果一个子类没有实现父类中的抽象方法,则子类也成为了一个抽象方法 正确答案:D 2、下列关于抽象方法,不正确的是()。 A.如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类 B.抽象方法必须为public或者protected C.抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类 D.抽象类能直接实例化,需要依靠子类采用向上转型的方式处理 正确答案:D 3、已知关于抽象方法错误代码,正确修改是(): class Base{ abstract void hello(){ System.out.println("hello"); } }

A.final class Base{ abstract void hello();} B.public class Base{ abstract void hello();} C.abstract class Base{ abstract void hello();} D.class Base{ void hello();} 正确答案:C 4、下列关于抽象类和接口说法不正确的是()。 A.一个类可以继承多个抽象类,却只可以实现一个接口 B.接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法 C.抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的 D.抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法 正确答案:A 5、下面关于接口的说法不正确的是()。 A.子接口继承父接口,使用的关键字是implements B.接口中所有的方法都是抽象的 C.接口是Java中的特殊类,包含常量和抽象方法 D.接口中所有方法的访问权限都是public 正确答案:A 6、一个类通过()关键字声明自己实现一个或多个接口。

抽象类和接口习题.doc

、易错概念题 1.以下方法错误的是(A D) A覆盖方法包括成员方法的覆盖和成员变量的覆盖 B成员方法的覆盖是多态的一种表现形式 C子类可以调用父类中被覆盖的方法 D任何方法都可以被覆盖 分析:在子类中调用父类方法使用super关键字。super, a0就可以调用父类的 a方法。 在类继承或者接口实现过程中就会涉及到成员属性以及成员函数的重写,需要注意的是,成员函数的重写是直接覆盖父类的(继承中),但是成员变量重写是不会进行覆盖的。 如果子类本身没有定义使用this关键字可以去访问父类的成员变量。 最后final修饰的方法不能被覆盖覆盖即重写和重载一起都是多态的表现形式。 (重载、重写和覆盖) override-〉重写(=覆盖)、overload-〉重载、polymorphism -> 多态 override是重写(覆盖)了一个方法,以实现不同的功能。一般是用于子类在 继承父类时,重写(重新实现)父类中的方法。 重写(覆盖)的规则: 1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载. 2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符 (public>protected>default>private)。 3、重写的方法的返回值类型必须和被重写的方法的返回一致; 4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类; 5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法, 并没有对其进行重写。 6、静态方法不能被重写为非静态的方法(会编译出错)。 overload是重载,一般是用于在一个类内实现若干重载的方法,这些方法的名 称相同而参数形式不同。 重载的规则: 1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样); 2、不能通过访问权限、返回类型、抛出的异常进行重载; 3、方法的异常类型和数目不会对重载造成影响; 对比:如果用重载,则在父类里要对应每一个子类都重载一个取得边数的方法;

接口与实现实验报告

xxxxxxxx 实验报告 xoxtmxr 赧 皆 囲 g 四、 实验方法 五、 实验记录及数据处理 六、 误差分析及讨论 系部计算机系 班级 XXXX 班 课程 Java 语言程序设计 项目 接口与实现一一评价成绩 1•相关知识点 接口体中只有常量的声明(没有变量)和抽象方法的声明。而且接口体中所 有的常量的访问权限一定都是public (允许省略public 、final 修饰符),所有 的抽象方法的访问权限一定都是public (允许省略public 、final 修饰符)。 接口由类去实现以便绑定接口中的方法。一个类可以实现多个接口,类通过 使用关键字implements 声明自己实现一个或多个接口。如果一个非抽象类实现 了某个接口,那么这个类必须重写该接口的所有方法。 2. 实验目的 本实验的LI 的是让学生掌握类怎样实现接口。 3. 实验要求 体操比赛计算选手成绩的办法是去掉一个最高分和最低分后再计算平均 分,而学校考察一个班级的某科LI 的考试情况时,是讣算全班同学的平均成绩。 Gymnastics 类和School 类都实现了 Comput er Average 接口,但实现的方式不同。 4. 程序源代码 interface ComputerAverage public duble average(double x[]); } 一、 实验目的 二、 实验原理 三、 实验仪器及材料 姓名XXXX 学号 2XXXXX 日期 ___________

class Gymnastics implements ComputerAverage { public double average(double x[]); { int count=x・length; double aver=0, temp=0; for (int i二0;i2) aver=aver/ (count-2); else aver=0; return aver; } } class School implements ComputerAverage

接口和抽象类的区别

.Net提供了接口,这个不同于Class或者Struct的类型定义。接口有些情况,看似和抽象类一样,因此有些人认为在.Net可以完全用接口来替换抽象类。其实不然,接口和抽象类各有长处和缺陷,因此往往在应用当中,两者要结合来使用,从而互补长短。 接下来先说说抽象类和接口的区别。 区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系;而接口是定义行为标准,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。这些听起来有些虚,举个例子。例如,狗是对于所有狗类动物的统称,京哈是狗,牧羊犬是狗,那么狗的一般特性,都会在京哈,牧羊犬中找到,那么狗相对于京哈和牧羊犬来说,就属于这类事物的抽象类型;而对于“叫”这个动作来说,狗可以叫,鸟也可以叫。很明显,前者相当于所说的是抽象类,而后者指的就是接口。 区别二,抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。 例如: public abstract class AbsTest { public virtual void Test() { Debug.WriteLine( "Test" ); } public abstract void NewTest(); } public interface ITest {

void Test(); void NewTest(); } 区别三,继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。 区别四,在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。 知道了两者的区别,再来说说,接口相对于抽象类的优势。 好处一,接口不光可以作用于引用类型,也可以作用于值类型。而抽象类来说,只能作用于引用类型。 好处二,.Net的类型继承只能是单继承的,也就是说一个类型只能继承一个类型,而可以继承多个接口。其实,我对于这一点也比较赞同,多继承会使继承树变的混乱。 好处三,由于接口只是定义属性和方法,而与真正实现的类型没有太大的关系,因此接口可以被多个类型重用。相对于此,抽象类与继承类的关系更紧密些。 好处四,通过接口,可以减少类型暴露的属性和方法,从而便于保护类型对象。当一个实现接口的类型,可能包含其他方法或者属性,但是方法返回的时候,可以返回接口对象,这样调用端,只能通过接口提供的方法或者属性,访问对象的相关元素,这样可以有效保护对象的其他元素。

简述抽象类和接口的区别

简述抽象类和接口的区别 抽象类 抽象类是用来捕捉子类的通用特性的。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。以JDK中的GenericServlet为例: public abstract class GenericServlet implements Servlet, ServletConfig, Serializable { // abstract method abstract void serviceServletRequest req, ServletResponse res; void init { // Its implementation } // other method related to Servlet } 当HttpServlet类继承GenericServlet时,它提供了service方法的实现: public class HttpServlet extends GenericServlet { void serviceServletRequest req, ServletResponse res { // implementation } protected void doGetHttpServletRequest req, HttpServletResponse resp { // Implementation } protected void doPostHttpServletRequest req, HttpServletResponse resp { // Implementation } // some other methods related to HttpServlet

python 接口实例

python 接口实例 ## Python 接口实例 Python 中的接口是一种抽象概念,它定义了一组方法的签名,而无需指定其实现。接口允许您指定对象的行为,而无需具体实现这些行为。通过定义和使用接口,您可以创建更灵活和可扩展的代码。 创建接口 要创建接口,请使用 `abc` 模块中的 `ABCMeta` 元类: ```python import abc class IShape(metaclass=abc.ABCMeta): @abc.abstractmethod

def draw(self): pass ``` 此代码创建了一个名为 `IShape` 的接口,它定义了一个名为`draw` 的抽象方法。抽象方法必须由实现该接口的任何类实现。 实现接口 要实现接口,类必须包含接口中定义的所有抽象方法的实现: ```python class Circle(IShape): def draw(self): print("Drawing a circle") ```

此代码创建一个名为 `Circle` 的类,它实现了 `IShape` 接口。 使用接口 接口可用于多种目的,包括: 抽象类:接口可以用来定义抽象类的行为,而无需指定其实现。 鸭子类型:接口可以用来检查对象是否具有特定行为,而无需 考虑其类型。 多态性:接口可以用来实现多态性,允许对实现了相同接口的 不同对象进行统一操作。 示例: 以下示例演示如何使用接口来实现多态性: ```python

from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def draw(self): pass class Rectangle(Shape): def draw(self): print("Drawing a rectangle") class Circle(Shape): def draw(self): print("Drawing a circle")

抽象类不能实例化(直接创建对象)

final+变量: 当final 修饰变量的时候,这个变量的值不能变了,但是这个变量不是常量。 常量:固定不变的量。 企业开发中:极其常有,当前的项目,所有固定的参数。 定义的方法:final static 数据类型常量名 一般的常量的首字母大写。常量一定要放到一个类中,放在main方法中会出现错误。企业一般都是先指定一个类,这个类专门 用来保存固定不变的参数。 final +方法:用final 修饰的方法:“最终的,不能 注final 修饰的方法不能重写 final +对象: 用final 修饰的对象,不能再赋值,但是对象里面的属性可以任意改变。 final C c=new C(); //c=null;//c不可以再被赋值,因为final修饰 c.num=10; final 修饰的类是最终的类,没有子类可以去继承这个类。

抽象类: 企业开发当中:开发人员分成两大类型:一种设计人员,一种是编码人员。 设计人员:项目经理,项目组长。编码人员写代码的,比较累 这个抽象类:设计人员,设计好一个类,但是这个类没有实现的方法(就是没有方法体的方法),让编码人员来实现这些方法 概念: 抽象方法:没有方法体的方法,这个方法没有实现, 抽象类:含有抽象方法的类叫抽象类。 abstract :抽象的,凡是用abstract 修饰的类全是抽象类。 抽象类可以声明对象,但不能实例化对象,必须靠子类将方法实现,(只有子类才可以实例化对象) 通过子类把这些方法实现,通过子类实例化。 重点:抽象类与一般类的区别: 抽象类,也是类,但是,跟其他类有一点不同,含有抽象方法,可以有任何属性。 抽象类可以声明对象,但是不能实例化对象 抽象类当中的方法,不管有没有方法体,必须要依靠子类去实现其方法,才可以实例化--创建对象(new 构造方法)但 抽象类让final 修饰的话,还有子类能继承这个抽象类吗?没有任何的子类可以去继承该抽象类了,所以不能使用final修饰抽象类。 boolean 返回类型issex(){}; public boolean isSex() { return sex;

抽象类、接口和包作业

抽象类、接口和包——作业 Question 1 Given: 11.public interface Status { 12./* insert code here */ int MY_VALUE = 10; 13.} Which three are valid on line 12? (Choose three.) A.final B.static C.native D.public E.private F.abstract G.protected Question 2 Given: 10.interface Foo {} 11.class Alpha implements Foo { } 12.class Beta extends Alpha {} 13.class Delta extends Beta { 14.public static void main( String[] args) { 15.Beta x = new Beta(); 16.// insert code here 17.} 18.} Which code, inserted at line 16, will cause a https://www.wendangku.net/doc/bb19130043.html,ng.ClassCastException? A. Alpha a = x; B. Foo f= (Delta)x; C. Foo f= (Alpha)x; D. Beta b = (Beta)(Alpha)x; Question 3 Given: 10.package com.sun.scjp; 11.public class Geodetics { 12.public static final double DIAMETER = 12756.32; // kilometers 13.} Which two correctly access the DIAMETER member of the Geodetics class? (Choose two.) A. import com.sun.scjp.Geodetics; public class TerraCarta {

实验7面向对象编程

利用面向抽象的编程思想,计算各种柱体的体积。 右图为该程序的 UML 类图。编写测 试类 PillarTest,输出底为圆形、长方形、 三角形的柱体体积。(在实验 3 的基础上 修改) public abstract class Geometry { private double r; Geometry(double r){ this.r=r; } //计算圆的面积 public double getArea(); } /** *创建一个面向抽象类的的Pillar类 * */ public class Pillar{ private Geometry geometry; private double height; Pillar(Geometry geometry,double height){ this.geometry=geometry; this.height=height; } public double getVolumn(){ return geometry.getArea()*height; } } /** *创建一个Geometry的子类Rectangle * */ public class Rectangle extends Geometry{ double width; double height; Rectangle(double width,double height){ this.width=width; this.height=height; } @Override public double getArea(){ return width*height; } }

实验七 虚函数及应用

实验七虚函数及应用 一、实验目的 1.理解虚函数与运行时(动态)多态性之间的关系,掌握虚函数的定义及应用; 2.理解纯虚函数与抽象类的概念,掌握抽象类的定义及应用; 3.理解虚析构函数的概念及作用。 二、实验学时 课内实验:2课时课外练习:2课时 三本实验涉及的新知识 ㈠虚函数与动态多态性 在C++中,如果将基类与派生类的同名成员函数定义为虚函数,就可以定义一个基类指针,当基类指针指向基类对象时访问基类的成员函数,当基类指针指向派生类对象时访问派生类的成员函数,实现在运行时根据基类指针所指向的对象动态调用成员函数,实现动态多态性。换句话说,虚函数与派生类相结合,使C++能支持运行时(动态)多态性,实现在基类中定义派生类所拥有的通用“接口”,而在派生类中定义具体的实现方法,即“一个接口,多种方法”。 ㈡虚函数的定义 1.在基类中定义 在定义函数的前面加上“virtual ”。即: virtual 返回类型函数名(参数表) { …… } 2.在派生类中定义 函数的返回类型、函数名、参数的个数、参数类型及顺序必须与基类中的原型完全相同。 3.说明: ⑴在派生类中定义虚函数时,可用“virtual”也可不用“virtual”(最好都使用)。 ⑵虚函数在派生类中重新定义时,其原型必须与基类中相同。 ⑶必须用基类指针访问虚函数才能实现运行时(动态)多态性;当用普通成员函数的调用方法(即用圆点运算符)调用虚函数时,为静态调用; ⑷虚函数在自身类中必须声明为成员函数(不能为友元函数或静态成员函数),但在另一个类中可以声明为友元函数。 ⑸虚函数可以公有继承多次,其虚函数的特性不变。 ⑹构造函数不能定义为虚函数,但析构函数可以定义为虚函数。 ⑺虚函数与重载函数的关系 ①普通函数重载是通过参数类型或参数的个数不同实现的;重载一个虚函数时,其函数原型(返回类型、参数个数、类型及顺序)完全相同。 ②当重载的虚函数只有返回类型不同时,系统将给出错误信息;如果定义的虚函数只有函数名相同,而参数个数或类型不同时,则为普通函数重载。 ㈢纯虚函数与抽象类 1.纯虚函数定义 格式:

-c#实验报告7

实验报告 实验七:类的继承和抽象类 实验目的 掌握面向对象的设计,类的定义和对象的使用 一、实验内容 1.建立三个类:居民、成人、官员。居民包含身份证号、姓名、出生日期,而成人继承自居民,多包含学历、职业两项数据;官员则继承自成人,多包含党派、职务两项数据。要求每个类中都提供数据输出的功能 2.编写一个控制台应用程序,完成下列功能,并写出运行程序后输出的结果。 1)创建一个类A,在A中编写一个可以被重写的带int类型参数的方法MyMethod,并在该方法中输出传递的整型值后加10后的结果。 2)再创建一个类B,使其继承自类A,然后重写A中的MyMethod方法,将A中接收的整型值加50,并输出结果。 3)在Main方法中分别创建A和类B的对象,并分别调用MyMethod方法。 3.要求:编写一个shape类,实现2个虚方法cirle()和 area(). 编写一个triangle(三角形)类该类继承自shape类,该类中有分别定义三角形的三条边,通过构造函数给各个边初始化,重写父类的circle()和area()方法,分写输出三角形的周长和面积 编写一个rectangle(矩形类)类该类继承自shape类,该类中有分别定义矩形的宽和高,通过构造函数给各个边初始化,重写父类的circle()和area()方法,分写输出矩形的周长和面积 编写一个circular(圆形)类该类继承自shape类,该类中有分别定义半径,通过构造函数给各个边初始化,重写父类的circle()和area()方法,分写输出圆形的周长和面积 提高性练习,在上述代码基础上定义operation类,在该类中定义一个以shape 类对象作为参数的方法, 实现类的多态性。 实验环境 1.硬件:学生用微机、局域网环境 2.软件:Windows XP中文操作系统vs2008及以上版本 二、实验调试与结果分析 (附上代码,以及运行结果的截图)

Java程序设计实验指导书(新版)

第Ⅰ部分:实验指导 实验1:Java开发环境J2SE 一、实验目的 (1)学习从网络上下载并安装J2SE开发工具。 (2)学习编写简单的Java Application程序. (3)了解Java源代码、字节码文件,掌握Java程序的编辑、编译和运行过程。 二、实验设备要求 JDK 6.0、JCreator和NetBeans 6.9 三、实验内容 1.安装J2SE开发工具 Sun公司为所有的java程序员提供了一套免费的java开发和运行环境,取名为Java 2 SDK,可以从https://www.wendangku.net/doc/bb19130043.html,上进行下载。安装的时候可以选择安装到任意的硬盘驱动器上,例如安装到C:\j2sdk1.6.0_21目录下。教师通过大屏幕演示J2SE的安装过程,以及在Windows98/2000/2003下环境变量的设置方法。 2.安装J2SE源代码编辑工具Edit Plus 教师通过大屏幕演示Edit Plus的安装过程,以及在Windows98/2000/2003操作系统环境下编辑Java 原程序的常用命令的用法。 3.编写并编译、运行一个Java Application程序。 创建一个名为HelloWorldApp的java Application程序,在屏幕上简单的显示一句话"老师,你好!"。

4.编译并运行下面的Java Application程序,写出运行结果。 1:public class MyClass { 2:private int day; 3:private int month; 4:private int year; 5:public MyClass() { 6:day = 1; 7:month = 1; 8:year = 1900; 9:} 10:public MyClass(int d,int m,int y) { 11:day = d; 12:month = m; 13:year = y; 14:} 15:public void display(){ 16:System.out.println(day + "-" + month + "-" + year); 17:} 18:public static void main(String args[ ]) { 19:MyClass m1 = new MyClass(); 20:MyClass m2 = new MyClass(25,12,2001); 21:m1.display(); 22:m2.display(); 23:} 24:}

相关文档
相关文档 最新文档