实验七 抽象类、包与接口
- 格式:doc
- 大小:30.50 KB
- 文档页数:2
实验-抽象类和接⼝学⽣实验报告课程:实验指导教师:系别:班级:实验⽇期:年⽉⽇实验地点:姓名:学号:⼀、实验名称:抽象类和接⼝实验概述:【实验⽬的及要求】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。
实验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方法返回两个对象中较大的一个。
本文由我司收集整编,推荐下载,如有疑问,请与我司联系Java 的抽象和接口实验报告2016/09/09 1860 1、掌握抽象类和抽象方法的使用。
2、熟悉类中接口的定义和实现。
1、定义一个抽象类Shape,它包含一个抽象方法getArea(),从Shape 类派生出Rectangle 和Circle 类,这两个类都用getArea()方法计算对象的面积。
编写应用程序使用Rectangle 和Circle 类。
实验要求:定义Rectangle 和Circle 类的构造方法,初始化成员变量。
2、学校中有老师和学生两类人,而在职研究生既是老师又是学生。
(1)设计两个信息管理接口StudentInterface 和TeacherInterface,其中StudentInterface 接口包括setFee()方法和getFee()方法,分别用于设置和获取学生的学费,TeacherInterface 接口包括setPay()和getPay()方法,分别用于设置和获取老师的工资。
(2)定义一个研究生类Graduate,实现StudentInterface 接口和TeacherInterface 接口,它定义的成员变量有name(姓名),sex(性别),age(年龄),fee(每学期学费)pay(月工资)。
(3)创建一个姓名为“zhangsan”的研究生,统计他的年收入和学费,如果收入减去学费不足2000 元,则输出“You need a loan!”(需要贷款)的信息,否则输出“You income is enough!”信息。
实验要求:在Graduate 中实现各个接口声明的抽象方法。
四、实验结果(本实验源程序清单及运行结果或实验结论、实验设计图)第一题:package firsrpakeage;public class Test01 {public static void main(String[] args) {。
JA V A包、接口与抽象类【概述】包(Package)定义了软件单元,它能够独立发布,并能够与其它包组成应用程序,包的成员是一些相关联的类、接口,也可包含包中的类所使用的附加资源文件。
在Java程序的第一行代码,可以通过以下代码来申明源程序中所创建类型的包。
package 包名;如果某个Java程序源代码中没有上面的package 包名;那么这个源代码中定义的所有类型都属于一个默认包(default package)。
【包的主要作用】1.包将相互关联的接口和类结合成组。
2.包创建了命名空间来避免类型之间的命名冲突。
在一个包中的接口和类可以使用流行的公共名字来命名,而这些命名只在一个包内才有意义,在不同的包之间则可以有相同的命名。
3.包机制为开发应用提供了保护域。
包内的代码通过访问标志可以相互协作,而这些标志对外部代码是不可用的【包的命名约定】♦如果包名为c,那么相应的编译出的.class文件必须位于某个工作目录下的aaa\bbb\ccc目录里面或者某个Jar文件的aaa\bbb\ccc目录里面。
♦可以采用Internet域名反序,比如,可以将包命名为.zucc; 虽然这种命名模式使得包名变得很长,但却不容易重名。
【执行包中的类文件】对于包c中定义的某个类A,那么类文件A.class必定位于(1)工作目录下的aaa\bbb\ccc目录里面,或者(2)某个Jar文件中的aaa\bbb\ccc目录里面。
对于前一种情况,可以在命令提示符下,敲入java –cp 工作目录c.A 执行类A。
比如,如果工作目录是d:\test,那么可以键入java –cp d:\test c.A执行类A;如果命令提示符当前目录就是工作目录d:\test, 那么可以省去-cp d:\test, 而仅仅需要键入java c.A对于后一种情况,可以在命令提示符下,敲入下面命令可以执行类A;java –cp jar文件的路径文件名c.A比如,类文件A.class位于已经打包的jar文件abc.jar中,而abc.jar位于目录d:\test, 那么就可以键入如下命令来执行A.classjava –cp d:\test\abc.jar c.A【使用包成员(导入类型方式)】对于其它包中定义的类型,可以程序中使用类型的完全限定名(Fully qualified name, 即包名.类型名)来申明和使用类型;如果不想在程序中使用完全限定名(因为完全限定名比较长),而是希望通过简单的类型名来申明和使用其它包中的类型,那么可以通过import 语句将程序中使用到的类型(一般位于其它包)导入到当前程序中。
什么是抽象类什么是接⼝两者有什么区别?如何使⽤它⼀、抽象类:抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象⽅法,这是普通类所不能的。
抽象⽅法只能声明于抽象类中,且不包含任何实现,派⽣类必须覆盖它们。
另外,抽象类可以派⽣⾃⼀个抽象类,可以覆盖基类的抽象⽅法也可以不覆盖,如果不覆盖,则其派⽣类必须覆盖它们。
⼆、接⼝:接⼝是引⽤类型的,类似于类,和抽象类的相似之处有三点:1、不能实例化;2、包含未实现的⽅法声明;3、派⽣类必须实现未实现的⽅法,抽象类是抽象⽅法,接⼝则是所有成员(不仅是⽅法包括其他成员);另外,接⼝有如下特性:接⼝除了可以包含⽅法之外,还可以包含属性、索引器、事件,⽽且这些成员都被定义为公有的。
除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。
⼀个类可以直接继承多个接⼝,但只能直接继承⼀个类(包括抽象类)。
三、抽象类和接⼝的区别:1.类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.⽽接⼝只是⼀个⾏为的规范或规定,微软的⾃定义接⼝总是后带able字段,证明其是表述⼀类类“我能做。
”.抽象类更多的是定义在⼀系列紧密相关的类间,⽽接⼝⼤多数是关系疏松但都实现某⼀功能的类中.2.接⼝基本上不具备继承的任何具体特点,它仅仅承诺了能够调⽤的⽅法;3.⼀个类⼀次可以实现若⼲个接⼝,但是只能扩展⼀个⽗类4.接⼝可以⽤于⽀持回调,⽽继承并不具备这个特点.5.抽象类不能被密封。
6.抽象类实现的具体⽅法默认为虚的,但实现接⼝的类中的接⼝⽅法却默认为⾮虚的,当然您也可以声明为虚的.7.(接⼝)与⾮抽象类类似,抽象类也必须为在该类的基类列表中列出的接⼝的所有成员提供它⾃⼰的实现。
但是,允许抽象类将接⼝⽅法映射到抽象⽅法上。
8.抽象类实现了oop中的⼀个原则,把可变的与不可变的分离。
抽象类和接⼝就是定义为不可变的,⽽把可变的座位⼦类去实现。
抽象类、接口与包 5.5.1 抽象类假设我们要编写一个计算矩形、三角形和圆的面积与周长的程序,若按前面所学的方式编程,我们必须定义四个类:圆类、三角形类、矩形类和使用前三个类的公共类,它们之间没有继承关系,如图5.4所示。
程序写好后虽然能执行,但从程序的整体结构上看,三个类之间的许多共同属性和操作在程序中没有很好地被利用,致使重复编写代码,降低了程序的开发效率,且使出现错误的机会增加。
图5.4 具有相同特征却彼此独立的几个类 仔细分析上面例子中的三个类,可以看到这三个类都要计算面积与周长,虽然公式不同但目标相同。
因此,我们可以为这三个类抽象出一个父类,在父类里定义圆、三角形和矩形三个类共同的数据成员及成员方法。
把计算面积与周长的成员方法名放在父类给予说明,而具体的计算公式再在子类中实现。
如图5.5所示。
这样,我们通过父类就大概知道子类所要完成的任务,而且,这些方法还可以应用于求解平圆类 圆心座标半径 计算面积 计算周长三角形类底边长 高 计算面积 计算周长矩形类 长 宽 计算面积 计算周长行四边形、梯形等图形的周长与面积。
这种结构就是抽象类的概念。
图5.5 抽象类及其应用抽象类是它的所有子类的公共属性的集合,是包含一个或多个抽象方法的类。
使用抽象类的一大优点就是可以充分利用这些公共属性来提高开发和维护程序的效率。
对于抽象类与抽象方法的限制如下:(1) 凡是用abstract 修饰符修饰的类被称为抽象类。
凡是用abstract 修饰符修饰的成员方法被称为抽象方法。
(2) 抽象类中可以有零个或多个抽象方法,也可以包含非抽象的方法。
(3) 抽象类中可以没有抽象方法,但是,有抽象方法的类必须是抽象类。
(4) 对于抽象方法来说,在抽象类中只指定其方法名及其类型,而不书写其实现代码。
(5) 抽象类可以派生子类,在抽象类派生的子类中必须圆类 圆心座标 半径三角形类 底边长 高 计算面积 计算周长长宽抽象类梯形类抽象方法计算面积 计算周长矩形计算面积上、下底边 长高实现抽象类中定义的所有抽象方法。
UML 实验指导书目录实验一UML建模基础 (3)实验二用例图 (4)实验三UML类图 (8)实验四对象图 (10)实验五包图 (11)实验六状态图 (13)实验七活动图 (17)实验八时序图与协作图 (18)实验九组件图 (22)实验一UML建模基础[实验目的和要求]1、熟悉UML建模工具Rational Rose的基本菜单及操作。
2、掌握UML的三大组成部分及各部分作用。
3、掌握UML规则和相关机制。
4、掌握UML的可见性规则和构造型的作用。
[实验内容和步骤]1、练习使用建模工具建立各种UML图形,并对图形进行相应编辑和修改。
2、认识各种UML关系及可见性符号,并用工具表示出来。
[分析与讨论]1、总结UML在软件工程中的作用以及使用UML建模的必要性。
实验二用例图[实验目的和要求]1、掌握用例的概念。
2、掌握UML用例图的组成、作用以及使用场合。
3、掌握用例与用例之间的各种关系。
4、学习针对具体场景使用用例图进行分析说明的方法。
5、掌握用例描述的概念和基本结构,以及用例描述的作用。
[实验内容和步骤]1、什么是用例,什么是场景?用例和场景之间的关系是怎样的?2、用例图中有哪些组成元素?在UML中是如何表示的?3、用例与用例之间的包含关系、扩展关系和泛化关系各代表什么含义?它们之间有何区别?对以上三种关系各举一例,画出用例图,并进行说明。
4、为了满足物业中介行业的信息化要求,甲公司基于详尽的需求调研与分析,准备研发一套符合市场需要的、实用的信息管理系统。
主要将实现客户资料信息管理、客户委托(出租、出售、租赁、购买)信息管理、业务线索生成与管理、房源状态自动更新、权限管理、到期用户管理、房源组合查询等功能。
该公司小王,通过多次的与潜在客户的交流与沟通,完成了最初的用例模型的开发,下是一个用例模型的局部:修改房源信息小李认为该模型不符合“用例建模”的思想,存在明显的错误。
请用200字以内说明错误所在,并说明应该如何修改。
实验六:类的多态、抽象类、接口和包的使用一、实验目的熟练地掌握Java语言的掌握类的多态、抽象类、接口和包的使用的编程。
通过实验掌握编写程序的思想方法,体会编程的技巧,加深Java语言的应用能力。
二、实验环境硬件环境:微型计算机。
软件环境:Windows 2000或以上版本,JKD, Jcreator三、实验内容与要求用Java语言编程实现以下问题:1、利用多态编写程序,定义一个JuLi类,只包含两个方法distance(double x,double y)求出点(x,y)到原点之间的距离和distance(double x,double y,double z)求出点(x,y,z)到原点之间的距离。
再定义一个public类,用类名去创建两个对象,输出其两值。
提示:开平方根用Math.sqrt(9.0),注意所有的数据一定要用double类型程序:class JuLi{double distance(double x,double y){return Math.sqrt(x*x+y*y);}double distance(double x,double y,double z){return Math.sqrt(x*x+y*y+z*z);}}public class Distance_DuoTai{public static void main(String args[]){JuLi s=new JuLi();System.out.println("点(x,y)到原点之间的距离"+s.distance(3.0,4.0));System.out.println("点(x,y,z)到原点之间的距离"+s.distance(3.0,4.0,12.0));}}运行结果:2、声明一个抽象类Shape,有抽象成员方法circle_area和circle_girth。
再声明类Circle为Shape的子类,其中成员变量r以及一个构造方法还有成员方法circle_area和circle_girth,并具体实现了相应的抽象方法用来求圆的面积和圆的周长,再定义一个public类,写一个main()方法在这个方法中用类创建对象,并求出面积和周长并输出程序:abstract class Shape{abstract double circle_area();abstract double circle_girth();}class Circle extends Shape{final double PI=3.14;double r;Circle(double r1){r=r1;}double circle_area(){return PI*r*r;}double circle_girth(){return 2*PI*r;}}public class abstract_test{public static void main(String args[]){Circle a=new Circle(3.2);System.out.println("圆面积为:"+a.circle_area());System.out.println("圆面积为:"+a.circle_girth());}}运行结果:3、利用接口编写程序:定义一个重力ZhongLi这样一个接口,包含一个常量g为9.8和一个公有的抽象方法Li,再定义一个密度MiDu这样一个接口,包含一个公有的抽象方法Du。
实验六包、抽象、接口————————————————————————————————作者:————————————————————————————————日期:实验六包、抽象类、接口一、实验目的了解Java 中包(package)、抽象类及方法(abstract)、接口(interface)的作用,掌握抽象类、接口的设计方法。
二、实验要求1.了解Java 系统包的结构。
2.掌握创建自定义包的方法。
3.掌握使用抽象类及方法4.掌握使用系统接口的技术和创建自定义接口的方法。
三、实验内容1. 引入包中的类,编译并比较之(1)package cn.mybole;import java.io.File; //引入包中的类class Test{public static void main(String[] args){ Test t=new Test();File f;System.out.println("test!");}}(2)package cn.mybole;//import java.io.File;class Test{public static void main(String[] args){ Test t=new Test();java.io.File f;System.out.println("test!");}}(3)package cn.mybole;//import java.io.File;import java.io.*;class Test{public static void main(String[] args){ Test t=new Test();File f;System.out.println("test!");}}2 分别新建Test.java和Test2.java如下,编译之,查看错误原因,并改正之TestTest2package cn.mybole;import us.mybag.Test2; :改错1class Test{public static void main(String[] args){ Test2 t2=new Test2();}}package us.mybag;public class Test2 :改错2{}3 final的使用:编译,查看错误TestTest2package cn.mybole;public class Test extends us.mybag.Test2{ public static void main(String[] args){ us.mybag.Test2 t2=new us.mybag.Test2();}}package us.mybag;public final class Test2 改错:去掉final,因为final修饰的类不能被继承。
实验71. 编一个程序,包含以下文件。
(1)Shape.java文件,在该文件中定义接口Shape,该接口在shape包中。
属性:PI。
方法:求面积的方法area()。
(2)Circle.java文件,在该文件中定义圆类Circle,该类在circle包中,实现Shape接口。
属性:圆半径radius。
方法:构造方法;实现接口中求面积方法area();求周长方法perimeter()。
(3)“Cylinder.java”文件,在该文件中定义圆柱体类Cylinder,该类口在cylinder包中,继承圆类。
属性:圆柱体高度height。
方法:构造方法;求表面积方法area();求体积方法volume()。
(4)X5_3_6.java文件,在该文件中定义主类X5_3_6,该类在默认包中,其中包含主方法main(),在主方法中创建两个圆类对象cir1和cir2,具体尺寸自己确定,并显示圆的面积和周长;再创建两个圆柱体类的对象cy1和cy2,具体尺寸自己确定,然后分别显示圆柱体cy1和cy2的底圆的面积和周长以及它们各自的体积和表面积。
【编程分析】本题主要考察接口、包、继承、封装等问题。
编程步骤如下:第一步:首先创建p1包,在其中创建Shape接口// Shape.java文件package p1; // 创建p1包public interface Shape{ // 定义Shape接口…}第二步:创建Circle类和Cylinder类,它们都定义在p2包中。
// Circle.java文件package p2; // 创建p2包import p1.*;public class Circle implements Shape{ // 定义实现Shape接口的Circle类…}// Cylinder.java文件package p2;public class Cylinder extends Circle{ // 创建继承Circle类的Cylinder类…}第三步:创建主类,在其中的main()方法中创建对象,实现相应的功能。
抽象类方法和接口首先,抽象类方法和接口都可以包含抽象方法,即没有具体实现的方法。
这些抽象方法必须在子类中被实现。
然而,在抽象类中可以定义具有具体实现的方法,而接口中只能定义抽象方法。
另一个不同之处是,一个类只能继承一个抽象类,但是可以实现多个接口。
这意味着接口在多继承方面比抽象类更加灵活。
通过实现多个接口,一个类可以实现不同接口所定义的不同规范,从而实现多样化的功能。
此外,抽象类可以有构造方法,而接口不能有构造方法。
这是因为抽象类可以被继承,那么它的构造方法就可以用来进行初始化操作。
然而,接口不能被实例化,所以没有必要定义构造方法。
另一个区别是,抽象类可以包含成员变量,而接口不能。
抽象类可以定义和使用成员变量,这些成员变量可以被继承和重写。
但是,接口只能定义静态常量,不能定义成员变量。
此外,抽象类可以有非抽象方法,而接口只能有抽象方法。
这意味着接口中的所有方法都是抽象的,没有具体实现。
抽象类可以有非抽象方法,这些方法可以提供通用的实现,被子类继承或重写。
在使用上,抽象类用于定义具有共同特征的类的通用方法和属性。
它提供了一种抽象的方式来组织和管理相关的类。
而接口用于定义不同类之间的共同行为,它提供了一种标准的规范,使得类可以实现多样化的功能。
综上所述,抽象类方法和接口在定义方法规范方面有很多共同点,但也有一些不同之处。
抽象类方法适用于具有共同特征的类的继承关系,而接口适用于不同类之间的多实现关系。
在实际应用中,根据需要选择合适的方式来定义和组织代码。
实验五抽象类、接口与包一、实验目的1、熟练掌握抽象类abstract的概念。
2、熟练掌握接口interface的概念。
3、熟练包package的概念以及编译运行的方法。
4、熟练掌握内部类inner class的概念。
5、熟练掌握递归的概念。
6、理解面向对象的程序设计方法。
二、实验内容与要求1.编写求解几何图形(如三角形,矩型,圆,多边型)的周长、面积的应用程序,要求用到继承、多态、抽象类、接口、内部类等面向对象程序设计技术的特点。
2、重写上面的程序,要求三角形,矩型,圆,多边型的类放到不同的包中,用包的技术组织程序的设计。
同时要求程序能从键盘上接受数据以便求解不同的几何图形的周长面积。
提示:从键盘上输入双精度数的一种方法(程序片段)……public static void main(String args[]) throws IOException{BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in));String x;x=keyin.readLine();double a=Double.parseDouble(x);……3.练习ng.Class类的使用,通过一个对象返回一个Class对象,如何获取一个类的名称,如何使用class生成一个类的对象。
获取类的描述信息。
4、编写一个应用程序,实现以下功能:①声明一个接口(Calculability),接口中包含一个方法area()。
②声明一个三角形类继承该接口,类名为Triangle,类中包含两个变量、一个带参数的构造方法和一个计算三角形面积的方法:三角形的底边长w三角形的高h构造方法Triangle(double width,double height)。
计算三角形面积的方法area(),该方法覆盖接口(Calculability)的同名方法,计算三角形的面积(w*h/2)。
第4章接口、抽象类与包构造Java语言程序有两大基本构件:类和接口。
事实上,程序设计的任务就是构建各种类和接口,并由它们组装出程序。
接口由常量和抽象方法构成。
一个接口可以扩展多个接口,一个接口也可以被多个接口所继承。
在Java中,抽象类可以用来表示那些不能或不需要实例化的抽象概念,抽象需要被继承,在抽象类中包含了一些子类共有的属性和行为。
抽象类中可以包含抽象方法,抽象类的非抽象的继承类需要实现抽象方法。
在Java语言中可以把一组相关类和接口存放在一个“包”中,构成一个“类库”,然后供多个场合重复使用,这种机制称为类复用。
类复用体现了面向对象编程的优点之一。
每个Java包也为类和接口提供了一个不同的命名空间,一个包中的类和接口可以和其它包中的类和接口重名。
4.1接口在Java语言中,接口是一个特殊的语法结构,其中可以包含一组方法声明(没有实现的方法)和一些常量。
接口和类构成Java的两个基本类型,但接口和类有着不同的目的,它可用于在树形层次结构上毫不相关的类之间进行交互。
一个Java类可以实现多个Java接口,这也解决了Java类不支持多重继承带来的弱点。
4.1.1接口定义Java接口的定义方式与类基本相同,不过接口定义使用的关键字是interface,其格式如下:public interface InterfaceName extends I1,...,Ik //接口声明{//接口体,其中可以包含方法声明和常量...}接口定义由接口声明和接口体两部分组成。
具有public访问控制符的接口,允许任何类使用;没有指定为public的接口,其访问将局限于所属的包。
在接口定义中,InterfaceName指定接口名。
在接口定义中,还可以包含关键词extends,表明接口的继承关系,接口继承没有唯一性限制,一个接口可以继承多个接口。
位于extends关键字后面的I1、…、Ik就是被继承的接口,接口InterfaceName叫I1、…、Ik的子接口(subinterface),I1、…、Ik叫InterfaceName的父接口(superinterface)。
实验七抽象类、接口与包
一、实验目的
1、熟练掌握抽象类abstract的概念。
2、熟练掌握接口interface的概念。
3、熟练包package的概念以及编译运行的方法。
二、实验内容与要求
1.编写求解几何图形(如三角形,矩型,圆,多边型)的周长、面积的应用程序,要求用到继承、多态、抽象类、接口、内部类等面向对象程序设计技术的特点。
2、重写上面的程序,要求三角形,矩型,圆,多边型的类放到不同的包中,用包的技术组织程序的设计。
同时要求程序能从键盘上接受数据以便求解不同的几何图形的周长面积。
提示:从键盘上输入双精度数的一种方法(程序片段)
……
public static void main(String args[]) throws IOException
{
BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in));
String x;
x=keyin.readLine();
double a=Double.parseDouble(x);
……
3.练习ng.Class类的使用,通过一个对象返回一个Class对象,如何获取一个类的名称,如何使用class生成一个类的对象。
获取类的描述信息。
4.从命令行输入一个正整数,用递归的方法求出每位数字上的累加和
5、编写一个应用程序,实现以下功能:
①声明一个接口(Calculability),接口中包含一个方法area()。
②声明一个三角形类继承该接口,类名为Triangle,类中包含两个变量、一个带参数年的构造方法和一个计算三角形面积的方法:
三角形的底边长w
三角形的高h
构造方法Triangle(double width,double height)。
计算三角形面积的方法area(),该方法覆盖接口(Calculability)的同名方法,计算三角形的面积(w*h/2)。
③声明一个锥体类(Taper),包含一个接口对象bottom(锥体的底)和一个变量(锥体的高)height,一个带参数的构造方法,一个换底方法getbottom(),一个锥体体积的计算方法volume()。
④声明一个主类Exp6_1,在主方法中声明接口和锥体类的对象,输出锥体的底面积和锥体的体积(bottom*height/3)。
三、思考题
1.定义一个矩形类Rectangle,再定义接口InterfaceRec,其中包含方法getArea ();由矩形类派生出一个正方形类,自行扩充成员变量和方法,并实现此接口InterfaceRec中的方法。
2. 内部类inner class和外部类的区别?
3.抽象类和接口的区别?。