收藏 分销(赏)

第8章--接口和包(全).ppt

上传人:s4****5z 文档编号:13990402 上传时间:2026-05-23 格式:PPT 页数:50 大小:199.50KB 下载积分:10 金币
下载 相关 举报
第8章--接口和包(全).ppt_第1页
第1页 / 共50页
第8章--接口和包(全).ppt_第2页
第2页 / 共50页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第八章,接口和包,8.1,抽象类和方法,8.2,接口,8.3,包,8.1,抽象类和方法,抽象类是供子类继承、却不能创建实例的类。,抽象类中声明只有方法头、没有方法体的抽象方法。抽象类用于描述抽象的概念,其中的抽象方法约定了多个子类共用的方法头,每个子类可以根据自身实际情况,给出抽象方法的具体实现。,抽象类的子类必须完成父类定义的每一个抽象方法,除非该子类也是抽象类。它的主要用途是用来描述概念性的内容,这样可以提高开发效率,更好地统一用户“接口”。,声明抽象方法,权限修饰符,abstract,返回值类型,方法名(参数表);,例如,计算图形面积的抽象方法,area(),可采用如下的声明:,public abstract area(),;,声明抽象类,权限修饰符,abstract class,类名,成员变量,;,abstract,方法名,();/,定义抽象方法,说明:抽象类中也可以定义非抽象方法。,Java,实例,利用抽象类表示多类图书,科技书类,页码,折扣,价格,显示图书种类,计算图书价格,计算折扣,文艺书类,页码,折扣,价格,显示图书种类,计算图书价格,计算折扣,教材类,页码,折扣,价格,显示图书种类,计算图书价格,计算折扣,图8-1,各类图书的属性和行为,定义抽象类,abstract class Book,int bookPage,;/,图书页码,float discount;/,图书折扣,double price;,/,图书价格,public Book(,int,bookPage,float discount),this.,bookPage,=,bookPage,;,this.discount=discount;,abstract void show_kind();/,显示图书种类,abstract double,getPrice,(,int,bookPage,float discount);/,计算价格,public void show_price()/,显示价格,System.out.,println,(This books price is+price);,将抽象类作为父类,分别定义各子类,class Science_book extends Book /,定义科技书类,public Science_book(,int,bookPage,float discount),super(,bookPage,discount);/,引用父类的构造方法,public void show_kind()/,实现抽象方法,System.out.,println,(The books kind is science);,public double,getPrice,(,int,bookPage,float discount)/,实现抽象类方法,return bookPage*0.1*discount;,class Literature_book extends Book /,定义文艺书类,public Literature_book(,int,bookPage,float discount),super(,bookPage,discount);,public void show_kind(),System.out.,println,(The books kind is literature);,public double,getPrice,(,int,bookPage,float discount),return bookPage*0.08*discount;,class Teaching_book extends Book /,定义教材类,public Teaching_book(,int,bookPage,float discount),super(,bookPage,discount);,public void show_kind(),System.out.,println,(The books kind is teaching book);,public double,getPrice,(,int,bookPage,float discount),return bookPage*0.05*discount;,创建科技书类、文艺书类和教材类对象,调用其方法:,public class,Booksell,public static void main(String,args,),Science_book,sb,=new Science_book(530,0.7f);/,创建科技书类对象,sb,.price=,sb,.,getPrice,(530,0.7f);/,引用科技书类方法,计算图书价格,sb,.show_kind();/,显示图书种类,sb,.show_price();/,引用父类方法,显示图书价格,Literature_book lb=new Literature_book(530,0.7f);/,创建文艺书类对象,lb.price=lb.,getPrice,(530,0.7f);,lb.show_kind();,lb.show_price();,Teaching_book,tb,=new Teaching_book(530,0.7f);/,创建教材类对象,tb,.price=,tb,.,getPrice,(530,0.7f);,tb,.show_kind();,tb,.show_price();,程序运行结果:,The books kind is science,This books price is 37.0,The books kind is literature,This books price is 29.0,The books kind is teaching book,This books price is 18.0,8.2,接口,接口(,interface),可以被用来实现类间多继承结构。接口内部只能定义,public,的抽象方法和静态的、公有常量。所有的方法需要在实现接口的类中实现。,接口提供了方法声明与实现相分离的机制,使实现接口的多个类表现出相同的行为模式。每个实现接口的类可以根据各自要求,给出抽象方法的具体实现。,1,接口声明,访问权限,interface,接口名,extends,父接口名,接口体,接口访问权限只有两种:,public,和缺省,。,接口体中定义的方法都是抽象、公有的,,public,和,abstract,可以省略。,成员变量只能是静态、公有的常量,,public,、,static,和,final,都可以省略。,以下是一个接口声明:,public interface Shape1,public static final PI=3.14159;,public abstract double area();,public abstract double volume(double x);,public abstract void show();,2,接口实现,class,类名,extends,父类名,implements,接口名,列表,类体,一个类可以实现多个接口。,接口的特点:,接口不存在最高层,与类的最高层为,Object,类是不同的。,接口中的方法只能被声明为,public,和,abstract,,如果不声明,则默认为,public abstract;,接口中的成员变量只能用,public、static,和,final,来声明,如果不声明,则默认为,public static final。,接口中只给出方法名、返回值和参数表,而不能定义方法体。,Java,实例,实现接口,public interface Shape1,public static final double PI=3.14159;,public abstract double area();/,计算图形面积,public abstract double volume(double x);/,计算图形体积,public abstract void show_height();/,显示图形高度,public class Circle1 implements Shape1,double radius;,public Circle1(double r),radius=r;,public double area(),return PI*radius*radius;,public double volume(double x),return 0;,public void show_height(),public static void main(String,args,),Circle1 circle=new Circle1(3);,System.out.,println,(Radius=+circle.radius+Area=+circle.area();,程序运行结果如下:,Radius=3.0 Area=28.274309999999996,实现接口并继承类举例,右图给出了本例中用到的接口、类及其实现和继承关系。可以看到,,Little_car,、,Big_car,及,Jeep,类实现,Automobile,接口,,Microbus,和,Bus,类继承对,Big_car,类。,源程序,Car.java,的内容如下:,interface Automobile,int,i=5;/public,、,static,和,final,可以省略,void,accelent,();/public,和,abstract,可以省略,void maintain();,String forward();,String reverse();,class Little_car implements Automobile,public void,accelent,(),System.out.,println,(Little_car.,accelent,();,public void maintain(),public String forward()return Little_car forward;,public String reverse()return Little_car reverse;,class Big_car implements Automobile,public void,accelent,(),System.out.,println,(Big_car.,accelent,();,public void maintain(),public String forward()return Big_car forward;,public String reverse()return Big_car reverse;,class Jeep implements Automobile,public void,accelent,(),System.out.,println,(Jeep.,accelent,();,public void maintain(),public String forward()return Jeep forward;,public String reverse()return Jeep reverse;,class Microbus extends Big_car,public void,accelent,(),System.out.,println,(Microbus.,accelent,();,public void maintain(),System.out.,println,(Microbus.maintain();,class Bus extends Big_car,public String forward()return Bus forward;,public String reverse()return Bus reverse;,public class Car,public static void main(String,args,),Automobile cars=new Automobile5;,int,i=0;,carsi+=new Little_car();,carsi+=new Big_car();,carsi+=new Jeep();,carsi+=new Microbus();,carsi+=new Bus();,for(i=0;icars.length;i+),carsi.,accelent,();,程序运行结果如下:,Little_car.,accelent,(),Big_car.,accelent,(),Jeep.,accelent,(),Microbus.,accelent,(),Big_car.,accelent,(),8.3 包,包是一组相关的类和接口的集合。将类和接口分装在不同的包中,可以避免重名类的冲突,限定包之间类的访问权限,更有效地管理众多的类和接口。,包的声明,使用包机制,首先要建立与包名相同的文件夹;再声明类或接口所在的包,并且包中所包含的所有类或接口的字节码文件存放于与包同名的文件夹中;再在程序中导入包中包含的类或接口。,包的定义通过关键字,package,来实现的,,,package,语句的一般形式,:,package,包名,;,若需将类放在包中,只需在程序的第一行写上:,package,包名,;,说明:,package,是关键字,包名是用户自定义的标识符。,如果要声明类或接口位于一个子包中,子包和其父包及祖先包名之间用“,.”,隔开。,package,语句必须位于程序中的第,1,行。一个源程序文件中只能有,1条,package,语句,在该源程序文件中所定义的所有类和接口,都属于,package,语句所声明的包。,包名与文件夹名大小写要完全一致。,例如,声明,CPoint,类和,CCircle,类属于,mypackage,包的程序结构如下:,package,mypackage,public,CPoint,CPoint,类体,class,CCircle,CCircle,类体,声明,Person,接口和,Teacher,类属于,subpack,包(是,mypackage,的子包)的程序结构如下:,package,mypackage,.,subpack,public interface Person,Person,接口体,class Teacher,Teacher,类体,引用包中的类,一个类如果需要引用其他包中的类或接口,可以采用如下方法:,包名,.,类名,或,包名,.,接口名,例如,,CLine,类要继承位于,mypackage,包中的,CPoint,类,其声明格式如下:,public class,CLine,extends,mypackage,.,CPoint,Graduate,类实现,mypackage,.,subpack,中接口,Person,的声明格式如下:,public class Graduate implements,mypackage,.,subpack,.Person,声明,CPoint,类对象,point,的格式如下:,mypackage,.,CPoint,point,实例化,Cpoint,类的格式如下:,point=new,mypackage,.,CPoint,(,参数表,),导入包中的类,导入一个包中类或接口的语句格式如下:,import,包名,.,类名,或,import,包名,.,接口名,或,import,包名,.*,如果导入位于一个子包中的类或接口,子包和其父包及祖先包名之间用,“,.”,隔开;“,*,”表示导入包中所有的类和接口;,import,语句在源程序中必须位于其它类或接口声明之前。,可以采用以下程序段引用,mypackage,包中的,CPoint,类:,import,mypackage,.,CPoint,;,public,CLine,extends,CPoint,;,CPoint,point,;,point=new,CPoint,(,参数表,);,例-,包的建立和使用,package pack1;,/,声明所在包是,pack1,public class Point,protected,int,x,y;,public Point(),setPoint,(0,0);,public Point(,int,a,int,b),setPoint,(a,b);,在文件,Point.java,中定义,Point,类,并声明所在包为,pack1。,public void,setPoint,(,int,a,int,b),x=a;,y=b;,public,int,getX,()return x;,public,int,getY,()return y;,public String,toString,(),return +x+,+y+;,在当前文件夹下建立子文件夹,pack1,,,并将,Point.class,存放于文件夹,pack1,。,在文件,PTest,.java,中定义,PTest,类,并引入包,pack1,中的,Point,类。,import pack1.Point;,/,导入,pack1,包中的,Point,类,public class,PTest,public static void main(String,args,),Point p=new Point(72,115);,String output;,output=x1=+p.,getX,()+,y1=+p.,getY,();,System.out.,println,(output);,p.,setPoint,(10,10);,output=x2=+p.,getX,()+,y2=+p.,getY,();,System.out.,println,(output);,编译源程序,PTest,.java,,,产生,PTest,.class,字节码文件,并存放在当前文件夹中。运行,PTest,类文件,运行结果如下:,x1=72,y1=115,x2=10,y2=10,例-,一个包中包含多个类,在,X1.java,文件中定义,bag,包中的,X1,类。,package bag;/,声明所在包为,bag,public class X1,int,x,y;,public X1(,int,i,int,j),x=i;,y=j;,System.out.,println,(x=+x+y=+y);,public void show(),System.out.,println,(This class is X1);,在,X2.java,文件中定义,bag,包中的,X2,类。,package bag;/,声明所在包为,bag,public class X2,int,m,n;,public X2(,int,i,int,j),m=i;,n=j;,System.out.,println,(m=+m+n=+n);,public void show(),System.out.,println,(This class is X2);,编译,bag,包中的,X1,和,X2,类,键入下列命令,分别对,X1,和,X2,类编译:,javac,X1.java,javac,X2.java,由于,X1.java,和,X2.java,中指定,X1,和,X2,类属于,bag,包,所以编译时,系统自动在当前文件夹下生成子文件夹,bag,,,并将生成的,X1.class,和,X2.class,放在当前文件夹的子文件夹,bag,中。,import bag.X1;/,导入,bag,包中的,X1,类,import bag.X2;/,导入,bag,包中的,X2,类,public class,PImport,public static void main(String,args,),X1,aa,=new X1(4,5);,aa,.show();,X2 bb=new X2(10,20);,bb.show();,在,PImport,.java,文件中,引用,bag,包的,X1,和,X2,类。,编译,PImport,类。,键入下列命令,对,PImport,类进行编译:,javac,PImport,.java,编译生成的,PImport,.class,存放于当前文件夹中。,运行,PImport,类。,键入下列命令,运行,PImport,类,java,PImport,程序运行结果:,x=4 y=5,This class is X1,m=10 n=20,This class is X2,包中类及其成员的访问权限,包中类及其接口只有,public,和缺省,2,种访问权限,具体规定如下:,public,权限的类能够被所有包中的类访问,与所在的包无关。,缺省权限的类只能被其所在包中的类访问,不能在其包外访问。,类中成员的访问权限有,4种,具体规定如下:,类中的,public,权限成员,能够被所有包中的类访问,与所在的包无关。,类中的,private,权限成员,只能被本类访问,在类外不能访问。,类中的缺省权限成员,能够被所在包中的所有类访问,不能在其包外访问。,类中的,protected,权限成员,能够被所在包中的所有类访问,也能够被其它包中的子类访问。,Java,源程序结构,Java,的源程序文件(,.,java,文件)中可以包含以下类型的成分:,package,包名,/,声明所在包,,0-1,句,import,包名,.,类名,|,包名,.,接口名,/,导入其它包中的类或接口,,0-,多句,“,|”,表示,2,者选,1,public class|interface,/,声明类或接口,,1-,多句,说明:,一个源程序文件中,最多只能有一条,package,语句,并且必须是第,1,条语句。,一个源程序文件中,可以有多条,import,语句,并且必须位于其它类或接口声明之前。,一个源程序文件中,可以定义多个类或接口,但只能定义一个,public,权限类或,public,权限接口,并且该类或接口名与文件名相同。,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服