第6章_抽象、封装与类剖析_第1页
第6章_抽象、封装与类剖析_第2页
第6章_抽象、封装与类剖析_第3页
第6章_抽象、封装与类剖析_第4页
第6章_抽象、封装与类剖析_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

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

文档简介

1、2233抽象与封装抽象与封装44抽象与封装抽象与封装55抽象与封装抽象与封装66抽象与封装抽象与封装778899Java的类的类汽车设计图汽车设计图第第1辆辆第第2辆辆第第3辆辆1010Java的类的类说明:说明:系统类虽然实现了许多常见的功能,但是用户程序仍系统类虽然实现了许多常见的功能,但是用户程序仍然需要针对特定问题的特定逻辑来定义自己的类。然需要针对特定问题的特定逻辑来定义自己的类。11Java的类的类piradiusheightarea()volume ()成员变量成员变量成员方法成员方法121213Java的类的类class Cylinder /定义圆柱体类定义圆柱体类Cylind

2、er double radius; /声明成员变量声明成员变量radius int height; /声明成员变量声明成员变量height double pi=3.14; /声明数据成员声明数据成员pi并赋初值并赋初值 void volume( ) /定义成员方法定义成员方法volume (),计算体积,计算体积 System.out.println(圆柱体体积圆柱体体积=+(pi*radius* radius)*height); 14 类修饰符类修饰符 class 类名称类名称extends 父类名称父类名称 /声明成员变量声明成员变量 修饰符修饰符 数据类型数据类型 变量名;变量名; /声

3、明成员方法声明成员方法 修饰符修饰符 返回值类型返回值类型 方法名(参数表)方法名(参数表) Java的类的类15class Cylinder /定义圆柱体类定义圆柱体类Cylinder double radius; /声明成员变量声明成员变量radius int height; /声明成员变量声明成员变量height double pi=3.14; /声明数据成员声明数据成员pi并赋初值并赋初值 void area( ) System.out.println(圆柱底面积圆柱底面积=+ pi*radius* radius); void volume( ) System.out.println(

4、圆柱体体积圆柱体体积=+(pi*radius* radius)*height); 1616类的修饰符类的修饰符类的修饰字类的修饰字 class 类名称类名称 extends 父类名称父类名称 . public, abstract, final,缺省缺省1717类的修饰符类的修饰符答案很明显,没有答案很明显,没有“鸟鸟”仅仅作为一个抽象的概念存在着,它代表所有鸟的仅仅作为一个抽象的概念存在着,它代表所有鸟的共同属共同属性性任何一只具体的鸟儿都同时是由任何一只具体的鸟儿都同时是由“鸟鸟”经过特殊化形成的某个子经过特殊化形成的某个子类的对象类的对象这样的类就是这样的类就是Java中的中的abstra

5、ct类类1818类的修饰符类的修饰符这是一种经过优化的概念组织方式:这是一种经过优化的概念组织方式:把所有鸟的共同特点抽象出来,把所有鸟的共同特点抽象出来,概括形成概括形成“鸟鸟”的概念的概念其后在描述和处理某一种具体的鸟时,只需简单地描述出它与其他其后在描述和处理某一种具体的鸟时,只需简单地描述出它与其他鸟类所不同的特殊之处,而不必再重复它与其他鸟类相同的特点鸟类所不同的特殊之处,而不必再重复它与其他鸟类相同的特点1919class Circle public int r; Circle (int r) this.r=r; /this指指这个对象的这个对象的 public int area(

6、) return 3*r*r; /取近似取近似class Rectange public int width,height; /这里不需这里不需this Rectangle (int w, int h) width=w,height=h; public int area() return width*height; 类的修饰符类的修饰符2020类的修饰符类的修饰符2121abstract class Shape abstract float area();class Circle extends Shape public int r; Circle(int r) this.r = r; pub

7、lic float area() return 3.14*r*r; class Rectangle extends Shape public int width,height; Rectangle (int w, int h) width = w,height = h; public float area() return width*height; 类的修饰符类的修饰符2222电话卡及其子类的层次关系树电话卡及其子类的层次关系树这里这里IC卡、卡、200卡都是叶卡都是叶结点。所以,结点。所以,final类一定类一定是没有子类的叶结点是没有子类的叶结点(不过不过叶结点却不一定是叶结点却不一定是

8、final类类)。类的修饰符类的修饰符2323类的修饰符类的修饰符2424类的修饰符类的修饰符252526Java的类的类 类修饰符类修饰符 class 类名称类名称extends 父类名称父类名称 /声明成员变量声明成员变量 修饰符修饰符 数据类型数据类型 变量名;变量名; /声明成员方法声明成员方法 修饰符修饰符 返回值类型返回值类型 方法名(参数表)方法名(参数表) 2727域域修饰符修饰符 变量类型变量类型 变量名变量名 =初值初值;public、private、protected、缺省、缺省、 final、 static、transient、volatile2828域域2929cla

9、ss PhoneCard200 static String connectNumber = 200; static double additoryFee; long cardNumber ; int password; boolean connected; double balance; 域域30301: public class TestStaticField2: 3: public static void main(String args)4: 5: PhoneCard200 my200-1 = new PhoneCard200( );6: PhoneCard200 my200-2 = n

10、ew PhoneCard200( );7: my200-1.additoryFee = 0.1;8: System.out.println(第二张第二张200卡的附加费:卡的附加费:+my200-2.additoryFee);9: System.out.println(200卡类的附加费:卡类的附加费:+PhoneCard200.additoryFee);10: 11:域域class PhoneCard200 static String connectNumber = 200; static double additoryFee; long cardNumber ; int password;

11、 boolean connected; double balance; 3131域域3232域域3333域域34343535方法方法36 类修饰符类修饰符 class 类名称类名称extends 父类名称父类名称 /声明成员变量声明成员变量 修饰符修饰符 数据类型数据类型 变量名;变量名; /声明成员方法声明成员方法 修饰符修饰符 返回值类型返回值类型 方法名(参数表)方法名(参数表) 修饰符修饰符 返回值的数据类型返回值的数据类型 方法名方法名(参数列表参数列表) 语句序列;语句序列; return 表达式表达式; public、private、protected、缺省、缺省、abstrac

12、t、final、static、synchronized、native方法方法3737方法方法38abstract class Shape abstract float area();class Circle extends Shape public int r; Circle(int r) this.r = r; public float area() return 3.14*r*r; class Rectangle extends Shape public int width,height; Rectangle (int w, int h) width = w,height = h; pub

13、lic float area() return width*height; 方法方法3939方法方法4040方法方法class PhoneCard200 static String connectNumber = 200; static double additoryFee; long cardNumber ; int password; boolean connected; double balance; static void setAdditory ( double newAdd) if(newAdd 0) additoryFee = newAdd;4141class StaticErr

14、or String mystring=“hello”; public static void main(String args) System.out.println(mystring);方法方法class StaticError static String mystring=“hello”; public static void main(String args) System.out.println(mystring);42421: public class PerfectNum2: 3: public static void main(String args)4: 5: int coun

15、t = 1;6: for(int i =1; i1000; i+)7: 8: if( isPerfect(i) )9: 10: System.out.print(i + String.valueOf(t);11: count+;12: 13: if(count%3 = 0)14: System.out.println( );15: 16: 17: static boolean isPerfect(int x)18: 19: int y=0;20:21: for(int i=1;ix;i+)22: if(x % i = 0)23: y += i;24: if(y = x)25: return t

16、rue;26: else27: return false;28: 29: 方法方法v注意,静态方法是类的方法注意,静态方法是类的方法434444方法方法v注意,所有已被注意,所有已被private限定的私有方法及所有限定的私有方法及所有包含在包含在final类类中的方法,都被缺省地认为是中的方法,都被缺省地认为是final的的4545方法方法4646方法方法4747class Test char data; static int share_data; class Demo Test a,b,c,dobject bchar dataobject cchar dataObject dchar d

17、atastatic intshare_dataobject achar data方法方法484849Cylinder volu = new Cylinder(); /声明并创建新的对象,并让声明并创建新的对象,并让volu指向该对象指向该对象vnew是为新建对象开辟内存空间的算符是为新建对象开辟内存空间的算符v与变量相比,对象占用的内存空间要大得多,对象是与变量相比,对象占用的内存空间要大得多,对象是以以类为模板创建的具体实例类为模板创建的具体实例5050某某个个方方法法的的栈栈空空间间volunew Cylinder()产生的对象产生的对象堆内存堆内存栈内存栈内存0 x7000(对象首地址对

18、象首地址)radius0?0 x7000 515253class Cylinder /定义定义Cylinder类类 double radius; /定义成员变量定义成员变量radius int height; /定义成员变量定义成员变量height double pi=3.14; void area() System.out.println(底面积底面积=+pi* radius* radius); double volume () /定义返回值为定义返回值为double型的方法型的方法volume (),计算体积,计算体积 return (pi* radius* radius)*height;

19、 public class App6_1 /定义公共类定义公共类 public static void main(String args) /程序执行的起始点程序执行的起始点 Cylinder volu; volu=new Cylinder(); volu.radius=2.8; volu.height=5; System.out.println(底圆半径底圆半径=+volu.radius); System.out.println(圆柱的高圆柱的高=+volu.height); System.out.print(圆柱圆柱); volu.area(); System.out.println(圆柱

20、体体积圆柱体体积=+volu.volume(); v运行结果运行结果底圆半径底圆半径=2.8圆柱的高圆柱的高=5圆柱底面积圆柱底面积=24.6176圆柱体体积圆柱体体积=123.088v当程序运行到调用方法语句时,程序当程序运行到调用方法语句时,程序会暂时跳到该方法中运行,等到该方会暂时跳到该方法中运行,等到该方法运行结束后,才又返回到主方法法运行结束后,才又返回到主方法main()中继续运行。中继续运行。54class Cylinder double radius; int height; double pi=3.14; void area() System.out.println(底面积底

21、面积=+pi* radius* radius); double volume() return (pi* radius* radius)*height; public class App6_2 /定义公共类定义公共类 public static void main(String args) Cylinder volu1,volu2; /声明指向对象的变量声明指向对象的变量volu1和和volu2 volu1=new Cylinder(); /创建对象圆柱创建对象圆柱1:volu1 volu2=new Cylinder(); /创建对象圆柱创建对象圆柱2:volu2 volu1.radius=

22、volu2.radius=2.5; volu2.pi=3; /修改修改volu2的的pi值值 System.out.println(圆柱圆柱1底半径底半径=+volu1.radius); System.out.println(圆柱圆柱2底半径底半径=+volu2.radius); System.out.println(圆柱圆柱1的的pi值值=+volu1.pi); System.out.println(圆柱圆柱2的的pi值值=+volu2.pi); System.out.print(圆柱圆柱1); volu1.area(); System.out.print(圆柱圆柱2); volu2.are

23、a(); v运行结果运行结果圆柱圆柱1底半径底半径=2.5圆柱圆柱2底半径底半径=2.5圆柱圆柱1的的pi值值=3.14圆柱圆柱2的的pi值值=3.0圆柱圆柱1底面积底面积=19.625圆柱圆柱2底面积底面积=18.75v用用new运算符创建两个对象运算符创建两个对象volu1和和volu2,由于这两个对象的成员是分配,由于这两个对象的成员是分配在不同的内存块中,因此若修改了其在不同的内存块中,因此若修改了其中一个对象的中一个对象的pi值,另一个对象的值,另一个对象的pi值值将不受影响。将不受影响。55class Cylinder /定义定义Cylinder类类 double radius;

24、int height; double pi=3.14; double area() return pi* radius* radius; double volume() return area()*height; /在类内调用在类内调用area()方法方法 56 double volume() return this.area()*this.height; 在类的定义内调用本类的其他在类的定义内调用本类的其他成员,可在该成员前加成员,可在该成员前加this,则则this代表调用该成员的对象代表调用该成员的对象。56575758585960class Cylinder double radius

25、; int height; double pi; void setCylinder( double r, int h, double p) pi=p; radius=r; height=h; double area() return pi* radius* radius; double volume() return area()*height; public class App6_4 /定义公共类定义公共类 public static void main(String args) Cylinder volu=new Cylinder(); volu.setCylinder(2.5, 5,3.

26、14); System.out.println(底圆半径底圆半径=+volu.radius); System.out.println(圆柱的高圆柱的高=+volu.height); System.out.println(圆周率圆周率pi=+volu.pi); System.out.print(圆柱圆柱); System.out.println(底面积底面积=+volu.area(); System.out.println(圆柱体体积圆柱体体积=+volu.volume(); r、h、p为局部变量为局部变量61Class Cylinder double radius; void SetCylin

27、der( double radius) radius = radius; this. radius = radius;v同名时,在成员变量前加同名时,在成员变量前加this进行表示。进行表示。6262域域public class TransByValue private static int a; public static void main(String args) int a=0; modify(a); System.out.println(a); int b=new int1; modify(b); System.out.println(b0); public static void

28、modify( int a1) a1+; public static void modify(int b1) b10+; b1=new int5; v运行结果运行结果01636364646566public class App6_5 /定义主类定义主类 public static void main(String args) int a=8,3,7,88,9,23; /定义一维数组定义一维数组a LeastNumb minNumber=new LeastNumb (); minNumber.least(a); /将一维数组将一维数组a传入传入least()方法方法 class LeastNum

29、b /定义另一个类定义另一个类 public void least( int array) /参数参数array接收一维整型数组接收一维整型数组 int temp=array0; for (int i=1;iarrayi) temp=arrayi; System.out.println(最小的数为:最小的数为:+temp); 67public class App6_6 public static void main(String args) int a=1,2,3,4,5,6,7,8,9; /定义二维数组定义二维数组 int b=new int 33; Trans pose=new Trans

30、(); /创建创建Trans类的对象类的对象pose b=pose.transpose(a); /用数组用数组a调用方法,返回值赋给数组调用方法,返回值赋给数组b for (int i=0;ib.length;i+) /输出数组的内容输出数组的内容 for (int j=0;jbi.length;j+) System.out.print(bij+ ); System.out.print(n); /每输出数组的一行后换行每输出数组的一行后换行 class Trans int temp; int transpose(int array) /返回值和参数均为二维整型数组的方法返回值和参数均为二维整型

31、数组的方法 for (int i=0;iarray.length;i+) /将矩阵转置将矩阵转置 for(int j=i+1;jarrayi.length;j+) temp=arrayij; arrayij=arrayji; arrayji=temp; return array; /返回二维数组返回二维数组 68686970717172import java.util.*;public class Exercises5_4 public static void main(String args) Scanner buf = new Scanner (System.in); int nums=n

32、ew int45; int i=0,j=0,min,max,row1=0,row2=0,col1=0,col2=0; System.out.print(输出一个四行五列的矩阵输出一个四行五列的矩阵:); System.out.println(); for(i=0;i4;i+) for(j=0;j5;j+) numsij=buf.nextInt(); for(i=0;i4;i+) for(j=0;j5;j+) System.out.print( +numsij); System.out.println(); min=Integer.MAX_VALUE; max=Integer.MIN_VALUE

33、; /教材教材P24 for(i=0;i4;i+) for(j=0;j5;j+) if(numsijmax) max=numsij; row2=i; col2=j; System.out.print(最小数是最小数是+min); System.out.println(,在【在【+(row1+1)+】行【】行【+(col1+1)+】列】列); System.out.print(最大数是最大数是+max); System.out.println(,在【在【+(row2+1)+】行【】行【+(col2+1)+】列】列); 73749 98 85 54 42 20 0初初态态8 8 8 8 89 5

34、5 5 55 9 4 4 44 4 9 2 22 2 2 9 00 0 0 0 9第一趟第一趟5 5 5 58 4 4 4 4 8 2 2 2 2 8 0 0 0 0 8 9 9 9 9第二趟第二趟 4 4 4 5 2 2 2 5 0 0 0 5 8 8 8 9 9 9第三趟第三趟2 24 00 45 58 89 9第四趟第四趟024589第五趟第五趟比较比较5次次比较比较4次次比较比较3次次比较比较2次次比较比较1次次75public class Exercises5_5 public static void main(String args) int num=new int8; int t

35、emp; System.out.println(产生的随机数为:产生的随机数为:); for(int i=0;inum.length;i+) numi=(int)(100*Math.random(); System.out.print( +numi); for(int i=0;inum.length-1;i+) for(int j=i+1;jnumj) temp=numi; numi=numj; numj=temp; System.out.println(n排序后:排序后:); for(int i=0;inum.length;i+) System.out.print( +numi); vMath类提供的都是类提供的都是static的类方法,所以在使的类方法,所以在使用时不需要创建用时不需要创建Math类的对象,而直接用类名做类的对象,而直接用类名做前缀,就可以很方便地调用这些方法前缀,就可以很方便地调用这些方法76import java.util.*;public class Exercises5

温馨提示

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

评论

0/150

提交评论