JAVA课程第七章接口和包.ppt_第1页
JAVA课程第七章接口和包.ppt_第2页
JAVA课程第七章接口和包.ppt_第3页
JAVA课程第七章接口和包.ppt_第4页
JAVA课程第七章接口和包.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

方法的含义 举例:水仙花的例子 public class UseShuiXianHua static boolean shuixianhua (int i) / public static void main(String args) for (int i=100;i=999;i+) if (shuixianhua(i) System.out.println(i+“是一个水仙花“); public class UseShuiXianHua static boolean shuixianhua (int i) int x=i/100; /百位 int y=(i%100)/10;/十位 int z=i%10; /个位 if (x*x*x+y*y*y+z*z*z=i) return true; else return false; public static void main(String args) for (int i=100;i=999;i+) if (shuixianhua(i) System.out.println(i+“是一个水仙花“); 第7章 接口和包接口和包 Java实例抽象类 假设有若干个Circle,以及若干个Rectangle,希望计 算它们的总面积,直截了当的做法是将它们分别放 到两个数组中,用两个循环,加上一个加法,但这种 做法是不漂亮的 如果还有其它形状,triangle,ellipses等,上述方法显 得“累赘”,我们希望有一种统一的表示,例如用一个 数组shape,接受所有的形状,然后用 for (i=0;ishape.length;i+) area_total+=shapei.area(); 一、抽象类和方法 用abstract 修饰的类被称为抽象类。 所谓抽象类就是没有具体实例对象的类。 抽象类通常包括一个或多个抽象方法(只有方法说明 ,没有方法体),抽象类的子类必须完成父类定义的 每一个抽象方法,除非该子类也是抽象类。 它的主要用途是用来描述概念性的内容,这样可以提 高开发效率,更好地统一用户“接口”。 定义抽象类 abstract class 类名称 成员变量; 方法() ; /定义一般方法 abstract 方法(); /定义抽象方法 说明:抽象类中可以包含有一般方法,也可以包含有抽 象方法;对于抽象方法不用完成其代码实现,而在派生的 子类中实现所有抽象方法。 该方法没有 ,即没有方 法体 public class Circle extends Shape int r;/半径 Circle(int aR) this.r=aR; /覆盖父类的抽象方法 public double area() return 3.14*r*r; public class Rectangle extends Shape int x,y;/矩形的底边和高 Rectangle(int a,int b) this.x=a; this.y=b; public double area() return x*y; public abstract class Shape public abstract double area();/求面积的抽象方法 【例子7-1】 public class Triangle extends Shape int s,h;/三角形的底边和高 Triangle(int a,int b) this.s=a; this.h=b; public double area() return 0.5*s*h; 【例子7-1】 public class testShapes public static void main(String args) Circle c1=new Circle(5);/产生一个半径为5的圆 Triangle t1=new Triangle(2,3);/产生一个底边为2,高为3的三角形 Rectangle r1=new Rectangle (2,4);/产生一个边长为2和4的矩形 System.out.println(“圆面积为“+c1.area(); System.out.println(“三角形面积为“+t1.area(); System.out.println(“矩形面积为“+r1.area(); double totalArea=c1.area()+t1.area()+r1.area(); System.out.println(“总面积为“+totalArea); 圆面积为78.5 三角形面积为3.0 矩形面积为8.0 总面积为89.5 输出 【例子7-1】 public class testShapes1 public static void main(String args) Shape shapes=new Shape5; shapes0=new Circle(1); shapes1=new Circle(2); shapes2=new Rectangle(2,3); shapes3=new Triangle(3,5); shapes4=new Triangle(6,5); double totalArea=0; for (int i=0;i=4;i+) totalArea=totalArea+shapesi.area(); System.out.println(“第“+i+“个形状面积为“+shapesi.area(); System.out.println(“面积总和为“+totalArea); 第0个形状面积为3.14 第1个形状面积为12.56 第2个形状面积为6.0 第3个形状面积为7.5 第4个形状面积为15.0 面积总和为44.2 输出 【例子7-2】 总结抽象类 抽象类有三个最重要的特点 1 抽象类中,可以包含抽象方法,也可以不包含抽象方法 。但类体中包含抽象方法的类必须要申明为抽象类。 2 抽象类不能被实例化,即使抽象类中没有抽象方法,也 不能被实例化 3 抽象类的子类只有在覆盖父类的每一个抽象方法后,才能 创建子类对象。否则,子类也必须申明为抽象类,也不能被 实例化。 总结抽象类 抽象类不能生成实例对象。这个原因很简单,因 为一个抽象类里面包含了一个未实现的抽象方法 。如果可以生成对象的话,当用户要调用该对象 的抽象方法时却没有方法体,这是不对的。 所以抽象类不能产生自身类的对象,而抽象方法 实现的工作就交给继承这个抽象类的子类来完成 。 上机作业1 1 抽象类的练习 (1) 创建类Shape,定义抽象方法perimeter(),即求 周长的方法。 (2) 创建Circle类继承Shape类并添加新成员radius,实 现方法抽象方法perimeter()计算圆的周长 (3) 创建Square类继承Shape类,添加新成员length, 并实现方法perimeter()计算方形的周长 (4) 创建类ShowPerimeter,该类包含main方法,产生 一个圆和一个正方形,并分别计算和打印他们的周长。 二、接口 接口可以被用来实现类间多继承结构。 接口中的变量和方法默认都是public的。 接口的作用和抽象类类似,指定原型,不 直接定义方法的内容。 概念 单继承 水 果 梨 北京 鸭梨 武器 梨香蕉 进攻性 武器 交通工 具 汽车轮船 多继承 飞机 战斗机 坦克战舰 定义接口 访问权限 interface 接口名称 extends 父 接口名1,父接口名2,. /接口体程序 接口体中定义的方法都是抽象、公有的,常量 都是静态、公有的。 接口访问权限只有两种:public和缺省状态 。 特点 接口与类比较,有其特殊性。接口可以定义多继 承,如果是多继承可以通过使用extends后面的 多个父接口来定义。 接口中的成员变量是静态常量,默认为public static final。接口定义时修饰符可以省略。 接口中的方法都是抽象方法,默认为public abstract; 在接口中只给出方法名、返回值和参数表,而不能 定义方法体。 使用接口:接口的实现 接口定义完后必须在某个类中对这个接口的方法进行具体 化,重新定义接口的所有方法。 class 类名 implements 接口名1,接口名2 其中:在类中使用implements关键字实现接口,而且对 于一个类而言,可以实现多个接口。 一个类声明实现某个接口后必须实现该接口的所有抽象方 法 被实现的方法的访问控制符必须显式地使用public修饰 public class Student int no ; int grade; void exam() grade= (int)(Math.random()*100); int qeury() return grade; 一个类Student public interface PartTimeJob int salaryPerDay=50; int getSalary(int x); 一个接口PartTimeJob public class PtStudent extends Student implements PartTimeJob static int count=0; public PtStudent() count+; public int getSalary(int x) return salaryPerDay*x; 一个继承了类和接口的另一个类 【例子7-3】 public class Test public static void main(String args) PtStudent s1=new PtStudent(); s1.no=001; System.out.println(“s1得工资:“+s1.getSalary(10); s1.exam(); System.out.println(“s1考试得分:“+s1.qeury(); PtStudent s2=new PtStudent(); s2.no=002; System.out.println(“s2得工资:“+s2.getSalary(5); s2.exam(); System.out.println(“s2考试得分:“+s2.qeury(); System.out.println(“考试人数“+PtStudent.count); 使用PtStudent 的测试类【例子7-3】 s1得工资:500 s1考试得分:69 s2得工资:250 s2考试得分:31 考试人数2 上机作业2 2 接口与继承的综合练习 (1)编写一个Animal类,包含: 方法:public String toString()/返回动物类型的信息 方法:public void sound()/输出动物的叫声 (2)编写一个Flyable接口,包含: 方法:double flyspeed();/返回飞行的最大速度 (3)编写Glede(老鹰)类和Pigeon(鸽子)类,具有 属性private double flyspeed,并让Glede(老鹰)类和 Pigeon(鸽子)类分别继承Animal类并实现Flyable接口 。 (4)编写测试类,产生一个老鹰glede1和一个鸽子 pigeon1 ,打印出老鹰和鸽子的叫声和最大飞行速度。 三、包 包是一组相关的类 和接口的集合。 将类和接口分装在不 同的包中,可以避免 重名类的冲突,限定 包之间类的访问权限 ,更有效地管理众多 的类和接口。 包ch5 包的定义 包的定义通过关键字package来实现 的 ,若需将类放在包中,只需在程序的 第一行写上: package 包名; 在package语句前面只能有空白或注 释,不能有其他语句。 规定:包名使用小写字母表示。 存放位置 jdk原始环境: 如果程序中使用了package语句,则程序编译后的class文件会存放在当 前目录下的package指定的路径下。例如: package a.b; 则编译后的文件存放在源文件所在目录下的ab下,如果当前目录是 d:,则文件会存放在d:ab目录下。 Eclipse环境: 放在bin目录中对应的子目录中 包的引用 import的语法是: import pkg1.pkg2.pkg3.(类名| * ); 例如:import java.awt.*; 引入整个包时,可以方便的访问包中的每个类 。 但是引入所有的类会占用过多的内存。因此, 我们建议只引入需要的类。 使用import语句引入某个包中的所有类时并不 包括该包中的子包中的类。 Test.java中如何使用X1 X2类? B X1.javaX2.java test.java A 【例子7-4】 package A.B; public class X1 int a=90; package A.B; public class X2 int b=10; 说明类X2所在 的位置 package A; import A.B.*; public class test public stat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论