Java程序设计实训教程课件4类与对象_第1页
Java程序设计实训教程课件4类与对象_第2页
Java程序设计实训教程课件4类与对象_第3页
Java程序设计实训教程课件4类与对象_第4页
Java程序设计实训教程课件4类与对象_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

本章内容

类的修饰符方法访问控制abstract类和abstract方法P129抽象类不能被实例化,只能作为基类或父类存在

abstract方法,只允许声明,不允许实现,不能用final修饰如果一个类是一个abstract类的子类,必须实现父类的abstract方法(abstract类除外)

如果一个类中含有abstract方法,这个类必须用abstract修饰

abstract类也可以没有abstract方法一个abstract类只关心它的子类是否具有某种功能,并不关心功能的具体行为,功能的具体行为由子类负责实现。abstractclassPeople{

publicabstractvoidSpeak();}classChineseextendsPeople{

publicvoidSpeak(){System.out.println("欢迎来到北京");}}classEnglishextendsPeople{

publicvoidSpeak(){System.out.println("WelcometoEngland");}}修饰符final——最终类不能被继承

publicfinalclassTest{……}声明类时abstract和

final不能同时使用。

方法

与函数类似(实例方法)返回数据类型方法名称(形式参数){方法体;}例如:doubleComputeArea(){return(3.14*r*r);}voidSetHeight(doubleh){height=h;}classCone{doubler,h;voidSetRH(doublerr,doublehh){r=rr;h=hh;}doubleComputeArea(){return(3.14*r*r);}

doubleComputeVolume(){return(ComputeArea(

)*h/3.0);}}实例方法可以调用该类中的其他方法(除构造方法)修饰符static——类方法不用实例化,类名即可访问;

classLess{publicstaticvoidtest(){……}}classLess_test{publicstaticvoidmain(String[]args){Less.test();}}不能操纵实例变量,只能处理static属性变量。P79publicclassTakecare{inta=90;staticfloatb=10.98f;publicstaticvoidmain(Stringargs[]){floatc=a+b;System.out.println(“c=“+c);}//main}//TakecareclassA{staticintCount=0;booleanb1=true;A(){Count++;}

staticvoidShowCount(){System.out.println("Countis:"+Count

);System.out.println(b1);}

}

修饰符abstract——抽象方法只有方法头,没有方法实现;abstract方法只能定义在abstract类或接口中;abstract方法必须在子类中实现。是否有错误?

classLess1{publicabstractvoidtest();

}classLess2extendsLess1{

publicvoidtest(){……}}abstractclassLess3extendsLess1{

publicabstractvoidresult();}classLess4extendsLess3{

publicvoidresult(){……}}

修饰符final不能更改的最终方法,不能被子类重新定义。

classLess1{publicfinalvoidtest(){System.out.println(“Test1”);}}classLess2extendsLess1{publicvoidtest(){×System.out.println(“Test2”);}}示例1——抽象类目的在于为它所有的子类提供“共同的接口”;如果子类不是abstract类,则必须实现所有abstract方法;抽象类中可以有一般类具有的属性和方法。

abstract图形类abstractfloatArea()abstractvoidOutput()圆形floatArea()voidOutput()直角三角形floatArea()voidOutput()矩形floatArea()voidOutput()抽象类(部分代码)

abstractclass图形{publicabstractfloatArea();publicabstractvoidOutput();}class圆形extends图形{……

publicfloatArea(){return(float)(3.14*r*r);}publicvoidOutput(){System.out.println("圆形面积"+Area());}}

class直角三角形extends图形{……

publicfloatArea(){return(float)(0.5*a*b);}publicvoidOutput(){System.out.println("三角形面积"+Area());}}

class矩形extends图形{……

publicfloatArea(){returna*b;}publicvoidOutput(){System.out.println("矩形面积"+Area());}}

publicclass面积{publicstaticvoidmain(String[]args){

圆形a=new圆形(1.0f);a.Output();}}示例2——抽象类

如有若干Circle,若干Rectangle,希望计算它们的总面积,普通做法是将它们分别放到两个数组中,用两个循环,一个加法,这种做法是不漂亮的问题:

如还有其它形状:Triangle,Elliptical等,上述方法显得“累赘”。希望有统一表示,例如用一个数组s[],接受所有形状,然后用:for(i=0;i<s.length;i++){area_total+=s[i].area();}abstractclassShape{abstractdoublearea();}classRectangleextendsShape{publicdoublewidth,height;Rectangle(doublew,doubleh){width=w;height=h;}publicdoublearea(){returnwidth*height;}}classCircleextendsShape{publicdoubler;Circle(doubler){this.r=r;}publicdoublearea(){return3.14*r*r;}}

声明一个抽象类Shape,包括一个抽象方法area();

参照上述说明和代码,编写执行类程序,求得一个数组元素面积和,数组定义如下:

Shapes[]=newShape[5];s[0]=newCircle(1.0);s[1]=newCircle(2.0);s[2]=newCircle(3.0);s[3]=newRectangle(1.0,1.0);s[4]=newRectangle(2.0,3.0);

公共访问控制符public

public

classLessextendsXXXX{}

对所有类可见;默认访问控制符(friendly)

classLessextendsXXXX{}同包中类可访问,其他包内类无权访问。访问控制P90公共访问控制符publicpackagea;

public

classPeople{

publicStringname="“;

publicStringgetName(){ returnname;}}packageb;importa.People;classLess1{publicstaticvoidmain(String[]args){Peoplep=newPeople();

=“Tom”;System.out.println(p.getName());System.out.println();}}尽可能只将需要公开的方法声明为public,对属性尽可能声明为private。

缺省访问权限(friendly)包权限只能被同一包内的类访问。

packagefriently_;

classPeople{

Stringname=“name”;StringgetName(){return“getName”;}}

packagefriently_;

publicclassLess2{publicstaticvoidmain(String[]args){Peoplep=newPeople();System.out.println(p.getName());System.out.println();}}保护访问权限protected

只能被类本身及其子类访问

packageprotected_;

publicclassPeople{

protectedStringname=“name”;

protectedStringgetName(){return“getName”;}}

packageprotected_.a;

importprotected_.*;publicclassLessextendsPeople{publicvoidtest(){

温馨提示

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

评论

0/150

提交评论