文档详情

Java语言程序设计实用教程( 第三版) 高职软件专业 赵从军 第6章 接口与内部类.ppt

发布:2017-08-16约6.28千字共34页下载文档
文本预览下载声明
尚辅网 尚辅网 Java语言程序设计实用教程 第6章 接口与内部类 6.1 接口-抽象类 抽象类 用abstract 修饰的类被称为抽象类。所谓抽象类就是没有具体实例对象的类。 抽象类通常包括一个或多个抽象方法(只有方法说明,没有方法体),抽象类的子类必须完成父类定义的每一个抽象方法,除非该子类也是抽象类。 抽象类的主要用途是用来描述概念性的内容,这样可以提高开发效率,更好地统一用户“接口”。 定义一个抽象类 abstract class 类名称 { 成员变量; 方法(); //定义一般方法 abstract 方法(); //定义抽象方法 } 说明:抽象类中可以包含有一般方法,也可以包含有抽象方法;对于抽象方法不用完成其代码实现,而在派生的子类中实现所有抽象方法。 抽象类实现的例子 如前所述你可能对抽象类的概念有点模糊,下面举一个具体实例来作说明。 假设想设计一个形状(shape)的父类CShape,由此类可派生出圆形(circle),长方形(rectangle)于三角形(triangle)等几何形状的类。则父类于子类的派生关系描绘成如下图所示。 需求假设 假设这些几何形状均具有“颜色”(color)这个属性,因此可以把color这个数据成员,以及赋值color的方法均设计在父类里,让它继承给各个形状的子类较为方便,如此就不用在每一个几何形状的子类里,设计相同的程序代码来处理“颜色”这个属性的问题。 另外,如果想为每一个几何形状的类设计一个area() 方法,用来显示几何形状的面积,因每种几何形状的面积计算方式并不相同,所以把area() 方法的处理方式设计在父类里并不恰当,但每一个由CShape父类所派生出的子类又都需要用到这一个方法,因此可以在父类里只声明area() 方法,而把area() 方法处理的方法留在子类里来定义,也就是说,把area() 声明成抽象方法即可解决这个问题。根据上述的概念,可编写出如下的父类程序代码: abstract class CShape //定义抽象类 { protected String color; //数据成员 public void setColor(String str) { color=str; //一般的方法,用来赋值几何形状的颜色 } abstract void area();//抽象类内的抽象方法 } class CRectangle extends CShape { int width,height; public CRectangle (int w,int h) { width=w; height=h; } public void area() { System.out.print(“color=“+color+”, “); System.out.print(“area=“+width*height); } } Public class app10-1{ public static void main (String args[]){ CRetangle rect=new CRectangle(5,10); rect.setColor(“yellow”); rect.area(); CCircle cir=new CCircle(2.0) cir.setColor(“Green”); cir.area(); } } 6.1 接口-接口 接口的使用 接口(interface)是Java所提供的另一种重要功能,它的结构和抽象类非常相似。接口本身也具有数据成员与抽象方法,但它与抽象类有下列两点不同 接口的数据成员必须初始化。 接口里的方法必须全部都声明成abstract(默认),也就是说,接口不能像抽象类一样保有一般的方法,而必须全部是“抽象方法 为什么要使用接口? 类继承对于重用超类中的代码很有用,而Java只支持单继承,在遇到需要多继承的情况,可以通过接口来帮助实现。(多态性) 接口的方法可以不是继承链上的类中实现,从而为相互没有关系的类能实现同样功能的一组方法提供一种有效手段 接口的定义 接口的实现 6.2 内部类 内部类 在一个类(称为”外部类”)里定义另一个类是完全可以的,这称为“内部类”。使用内部类可以非常方便地编写事件驱动程序,例如图形用户界面程序 内部类是一种非常有价值的特性,它能让你在逻辑上将相互从属的类组织起来,并且在类的内部控制访问权限。 内部类作为外部类的成员之一,可以直接
显示全部
相似文档