版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java语言主要由以下五种元素组成:标识符、关键字、文字、运算符和分隔符。这五种元素有着不同的语法含义和组成规则,它们互相配合,共同完成Java语言的语意表达。 1标识符 变量,以及我们后面将要讲到的类和方法都需要一定的名称,我们将这种名称叫做标识符。佬是一个有效的标识符呢?在Java中,所有的标识符都必须以一个字母、下划线或美元符¥作开头。后面的字符包括数字(0-9),所有从A-Z的大写字母和a-z的小写字母,以及所有在十六进制0xc0前的ASCII码。以上只是标识符命名的基本规则,以下是一个正误对照表,通过它会对标识符的命名规则有一个具体的了解: 合法标识符非法标识符try try#gro
2、up_7 7groupopendooropen-doorboolean_1 boolean 表4-11注:boolean 为关键字 2关键字 关键字是Java语言本身使用的标识符,它有其特定的语法含义。所有的Java关键字将不能被用作标识符,如:for、while、boolean等都是Java语言的关键字。本书后附有Java语言关键字列表。 3文字 文字,其实就是我们通常所说的数据。文字的不同表现形式,也就是不同的数据类型,Java的数据类型有:整型、浮点型、布尔型、字符型、字符串型。整型数据是最普通的数据类型,它的表现方式有:十进制、十六进制和八进制。基数为10的十进制是我们最熟悉的。基娄为
3、16的十六进制表示法,也是程序设计中常常用到的,在十六进制中,每一位数字相当于4个二进制0和1的组合。十六进制整数用0-9的10个数字和字母A-F代表10-15这些整数,十六进制整数必须以0X作为开头。每一个整型数据占有32位的存储空间,即四个字节。这意味着整型数据所表示,的范围在-2,147,483,648和2,147,483,648之间,假如由于某些原因,你必须表示一个更大的数,64位的长整型应该是足够的。如果你想把一个整数强制存为一个长型(long),你可以在数字后面加字母l。浮点数据用来代表一个带小数的十进制数。例如1.5或43.7。它父或者是标准形式,或者是用科学计数法的形式,下面是
4、一些例子:3.1415 0.1 .6 .02243 2.997E8标准的浮点数叫做单精度浮点数,它的存储空间为32位,也就是四个字节。也有64位的双精度浮点数。你可以用D后缀确定你想使用这种双精度浮点数。布尔类型是最简单的一种数据类型,布尔数据只有两种状态:真和假,通常用关键字true和false来表示这两种状态。字符型数据是由一对单引号括起来的单个字符。它可以是字符集中的任意一个字符,如:a,b。字符串数据类型是用一对双引号括起来的字符序列,字符串数据实际上是由String类所实现(类这个概念我们将在后续章节中详细讲解),而不是语言中所用的字符数组。每一个字符串数据将产生一个String类的
5、新的实例,读者不必对字符串与类这个概念发生关系而感到担心,由于类的特性,你不必担心如何去实现它们,它们会自己照顾好自己,需要说明的是字符串在Java里作为类只是出于安全的考虑。表4-2给出了几个字符串的例子。字符串描述对应值 Lets goLets goTwoTwoLines表 4-2 几个例子注:在这里表示回车换行。 4运算符 任何语言都有自己的运算符,Java语言也不例外,如、等都是运算符,运算符的作用是与一定的运算数据组成表达式来完成相应的运算。对不同的数据类型,有着不同的运算符,我们将在下一节中对不同类型的运算符分别讨论。 5分隔符 分隔符用来使编译器确认代码在何处分隔。;:都是Jav
6、a语言的分隔符。 为了在Java中存储一个数据,必须将它容纳在一个变量之中。定义一个变量的两个基本要素是:类型和标识符,通常你可以用如下语法去说明变量:type identifer,identifer; 该语句告诉编译器用“type”的类型和以“identifer”为名字建立一个变量,这里的分号将告诉编译器这是一个说明语句的结束;方格中的逗号和标识符表示你可以把几个类型相同的变量放在同一语句进行说明,变量名中间用逗号分隔。在你创建了一个变量以后,你可以给它赋值,或者用运算符对它进行一些运算。如同上一节内容中所提到的一样,类型将决定变量所代表的不同种类的数据,在Java语言中有两种变量。最基本的
7、是简单类型变量,他们不建立在任何其他类型上,整数、浮点、布尔和字符类型都是这类型;另外Java可以定义构造另一种变量类型:类,这些类型建立在简单类型之上,它包括数值、变量和方法,是一种数据与代码相结合的复合结构。 1 整型变量的说明 整型变量按所占内存大小的不同可分为四种不同的类型,最短的整型是byte,它只有八位长,然后是短整型short,它有16位,int类型有32位,长整型long是64位,下面是这些整型变量的说明示例。byte a;short row;int numberOfSportor;long treeCount;int x,y,z; 2浮点变量的说明 浮点类型可用关键字floa
8、t或double来说明,float型的浮点变量用来表示一个32位的单精度浮点数,而double型的浮点变量用来表示一个64位的双精度浮点数。double型所表示的浮点数比float型更精确。float alpha;double speed; 3字符变量说明 Java使用16位的Unicode字符集。因此Java字符是一个16位的无符号整数,字符变量用来存放单个字符,它不是完整的字符串。示例如下:char a;a=c; 4 布尔变量说明 布尔型有真和假两个逻辑值,另外,逻辑运算符也将返回布尔类型的值,示例如下:boolean mouseOn;mouseOn=true;布尔型是一个独立的类型,它不
9、像C语言中的布尔型代表0和1两个整数,由于这个原因,Java中的布尔类型不能转换成数字。 5 变量的使用范围 当你说明了一个变量后,它将被引入到一个范围当中,也就是说,该名字只能在程序的特定范围内使用。变量的使用范围是从它被说明的地方到它所在那个块的结束处,块是由两个大括号所定义的,例如:class Example public static void main(String args) int i;. public void function() char c;.整型变量i在方法main中说明,因为main的块不包括function块,所以任何在function块中对i的引用都是错误的。对字
10、符型变量c也同样如此。在某一个特定情形中,变量能被别的变量所隐藏,如:在一个块中说明一个变量,而在这个块中建立一个新块并且在其中定义相同名字的变量,这样在第二个块中,程序对该变量的使用均是指第二次定义的那个变量。这样我们说,第一个变量被隐藏了。变量隐藏的示例如下:class Example public static void main(String args) int i; /* * * boolean try=true; while(try) int i;/以下对变量i的引用均指这里定义的i. /以下对变量i的引用均指* * *处定义的i. 当你定义一个变量时,首先必须明确它的活动范围,并
11、根据它的实际功能来命名,此外还应尽量使用详细的注释,这些办法可以使你能够清晰地区分变量,变量被隐藏的问题也会大大减少。 6 类型转换 系统方法System.in.read返回一个整型数值,但你却常常想要把它当作一个字符来使用。现在的问题是,当有一个整数而你需要把变成一个字符时应当去做些什么呢?你需要去做一个类型转换为一个字符。从一种类型转换到另一种类型可以使用下面的语句:int a;char b;a=(int)b;加括号的int告诉编译器你想把字符变成整型并把它放在a里,另一方面,如果你想做相反的转换,你可以使用:b=(char)a;记住整型和字符型变量位长不同是非常重要的,整型是32位长,字
12、符型是16长,所以当你从整型转换到字符型可能会丢失信息。同样,当你把64位的长整型数转换为整型时,由于长整型可能有比32位更多的信息,你也很可能会丢失信息。即使两个量具有相同的位数,比如整和浮点型(都是32位),你在转换小数时也会丢失信息,Java不象c/c+那样允许自动类型转换,当你进行类型转换要注意使目标类型能够容纳原类型的所有信息,不会丢失信息的类型转换有:原始类型目标类型byteshort,char,int,long,float,doubleshort int,long,float,doublecharint,long,float,doubleint long,float,double
13、longfloat,doublefloat double 表3-3不会丢失信息的类型转换列表需要说明的是,当你执行一个这里并未列出的类型转换时可能并不总会丢失信息,不过进行这样一个理论上并不安全的转换总是很危险的。 1 类的基本概念 Java程序的基本单位是类。类的定义可以看作是建立对象的原形。你建立类之后,就可用它来建立许多你需要的对象。Java把每一个可执行的成分都变成类,使面向对象发展到极点。类的基本定义成员函数如下:class name /Class information在类定义的开始与结束处必须使用花括号。你也许想建立一个矩形类,那么可以用如下代码:public class Rec
14、tangle . 2 类的基本组成一个类中通常都包含数据与函数两种类型的元素,我们一般把它叫作属性和成员函数,在很多时候我们也把成员函数称为方法(method)。将数据与代码通过类紧密结合在一起,就形成了现在非常流行的封装的概念。自然,类的定义也要包括以上两个部分。class 3 类的实例创建 矩形类Rectangle中,也许你想把矩形的相关信息写入类,如:int width,height;当然你还可以写入其它信息,但或许长和宽对简单的矩形来说已足够了。现在,类的定义如下所示:public class Retangleint width,height;当你创建了自己的类之后,通常需要使用它来完
15、成某种工作。你可以通过定义类的实例对象来实现这种需求。new运算符可以用来创建对象,实现成员函数如下:Rectangle myrect=new Rectangle;当然,此时对象myrect并没有做任何什么事;它只保存了矩形的长和宽的信息。有了对象以后,我们怎样使用对象内部的数据呢?下面是几个例子:myrect.width=10;myrect.height=20;同样,类的成员函数也是用“.”运算符来被引用的。 在你定义了的变量之后,通常都要对变量赋值、改变变量的值和使用变量进行计算,这都是运算符的作用。 1优先级 表3-4按从高到低的优先级列出了运算符。同一行中的运算符优先级相同。.() +
16、- ! * / %+ - = =!= & & | ?: =表3-4 运算符的优先级优先级是指同一式子中多个运算符被执行和次序,同一级里的操作符具有相同的优先级,例如对于表达式:a=b+c*d/(cd)Java处理时将会按照表3-4从最高优先级到最低的次序进行,在本例中,因为括号优先级最高,所以先计算cd,接着是c*d,然后除以cd,最后,把上述结果与b的和存储到变量a中,不论任何时候,当你一时无法确定某种计算的执行次序时,可以使用加括号的方法明确为编译器指定运算顺序,这也是提高程序可读性的一个重要方法。 2 整型运算符 整型运算符按操作数的多少可分为一元和二元两类,一元运算符一次对一个变量进行
17、操作,二元运算符一次对两个变量进行操作。对于运算来说,如果有一个变量或操作数是长整型的,那么结果就肯定是长整型的,否则即使操作数还没有确定是字节型、短整型或字符型,运算结果都是整型,表3-5是一元运算符的列表。运算符实际操作例子 - 改变整型数符号 -i 位运算:非i + 加1 i+ - 减1 i-表3-5一元运算符列表注:一元取反运算符()用来改变整数的正负号,逐位求反把所变量所有是1的位变成0,是0的位变成1,加加和减减(,)把变量的值加1或减1。以下是一个具体例子:int i=0;int j=1=;for (i=1;i10;i+) j-; System.out.println(i+j+)
18、;这个程序的一行执行加运算,另一行执行减运算,注意“”和“”的使用,每次遇到“”或“”的时候,系统就把操作数的值相应地加1或减1,一元运算符执行的方式是改变它们所作用的变量的值,对一元取反和逐位求反来说,变量的值并不改变,而对加和减运算(,)来说,就量的值被改变了,下面的代码给出了这种工作方式的一个例子:int i=10,j=10,k=10,l=10;System.out.println(i+j+k+l+);j+;i-;k;-l;System.out.println(i+j+k+l+);注意j和i被改变并打印出它们的新值,可是k和l仍然为原来的数值,当在复合表达式中使用一元取反和逐位求余运算时
19、,你实际上是在用一个临时存贮操作数的新值。和既是前置运算符也是后置运算符,这就是说,它们既可以放在操作数前面(x),也可以放在后面(x),如果它们被用在复合语句中如:i=x+; 或 i=+x;那么第一个语句中x把值赋给i以后再加1,而第二个语句先把x加1,再把新的x值赋给i。整型运算符的第二种类型是二元运算符,这种运算并不改变操作数的值,而是返回一个必须赋给变量的值,表3-6列出了二元运算符。运算符实际操作例子+ 加运算a+b- 减运算a-b* 乘运算a*b/ 除运算a/b% 取模运算a%b& 与运算a&b| 或运算a|b 异或运算ab左移a右移ab 右移ab 表3-6 二元运算符列表注意:与
20、的基本功能都是右移,但是用符号位来填充右移后所留下的空位,而则是用零来填充右移后所留下的空位。还有一类运算,它们形如:j-=i,这里-=是二元运算-和赋值运算=的复合运算,它等价于j=j-i,这种复合方式适用于所有的二元运算符。这里有几点关于整型运算进一步说明,首先,整数除法向靠近0的方向取整;其次,如果你除以0或者对0取模,程序就会在运行时被强行中止,如果你的运算结果超出最小极限,或者说是下溢,结果将为0,如果超出了最大极限,就将会导致结果的回绕。 3 布尔运算符 另外还有一些运算符能产生布尔类型的结果,我们把它们称为布尔运算符,表4-7列出了这些运算符。运算符实际操作例子 小于a 大于ab
21、=小于等于a 大于等于a=b=等于a=b!=不等于a!=b 表3-7产生布尔类型结果的运算符在这里要指出的是相等运算符=可能会给你带来许多麻烦,很多人在比较两个值时往往错用了等号=,以致于变成了赋值操作,所以在编程中一定要注意你在比较数值时用的是=。布尔类型本身还有几个逻辑运算符,它们可以对布尔类型的数据进行运算:!,&,/其实如果你把布尔类型的值true等效地看成1,false看成0,那么对于相同的运算符,整型运算的法则对布尔类型也是适用的。布尔运算符中还有一种三元运算符,它的格式如下:Operand ? Statement1:Statement2在这个式子中,先计算Operand的真假,若
22、为真,则执行Statement1,若为假,则执行Statement2。下面的代码给出了这种运算的一个例子:(ab)?a:b;这个表达式将返回a和b中较大的那个数值。 4 浮点型运算符 传统的浮点型二元运算除了赋值运算符(+=,-=.*=./)取模(%)和取模赋值(%=0)使浮点数值等价于整数除法,同样,+和-使变量的值增加或减小1。同整型变量相似,结果被放在最大长度的类型里,如果运算包括两个浮点类型,结果也是个浮点类型,如果有一个或几个是双精度浮点型,结果就是双精度浮点型,当你使用关系运算符:、=、=、=和!=时,注意浮点变量与整型的不同,只有a=b成立并不能说明ab不成立,这是因为浮点类型数
23、值次序同整型不同,当你写程序,对浮点型数值进行假设时要小心,浮点型数值也包括inf,代表无穷大,溢出产生无穷大inf,下溢产生0。 5 字符串运算符 +运算符可以把字符串并置起来,如果哪一个操作数不是字符串,在并置之前它会被转换成字符串,另外,+=运算符把两个字符串并置的结果放进第一个字符串里,在前面的例子里,当你想把几项打印在同一行里时使用的是+运算符,试着在解释器里用System.out.println和+运算符来造成不同的组合输出。1 成员函数相当于C或C+中的函数。你应该用如下的方式说明一个成员函数:Type name (Parameter)/function body注意:每一个成员
24、函数必须返回一个值或声明返回为空(void)。它返回类型的说明告诉编译器它将返回什么类型的值。在某些情况下,成员函数需要表示它是否成功的完成了它的工作,此时返回类型通常为布尔型的。参数表是用逗号分开的一组变量,它将为成员函数提供所需信息。下面例子中定义了一个成员函数。通过它,你的矩形类可以计算自己的面积了:int getArea(int w,int h) int a; a=w*h; return a;当成员函数被调用时,它将返回矩形的面积值。另外,矩形还需要对自己进行描绘,因此它需要成员函数drawRect(),此时,你的矩形类的定义将如下所示:public class Rectangle i
25、nt width,height; private int getArea(int w,int h) int a;a=w*h;return a; public void drawRect() for(int i=width;i0;i-) System.out.print(#);System.out.print();for (i=height-2;i0;i=) System.out.print(#); for(int j=width-2;i0;i-) System.out.print(); System.out.print(#);for(int i=width;i0;i-) System.out.
26、print(#);System.out.print();上例中最后一个“#”号后面还有一个System.out.print()这是由于这个成员函数在上一行没有结束而且缓冲区没有溢出时将不把输出结果写屏。若你使用print成员函数,却没有得到输出,这时仔细确认一下你是否以来结束你的输出流。2不同类型的成员函数在上例的成员函数声明中你需要注意两点:getArea()定义为private型,drawRect()定义为public型。public型意味着任何类都可以调用它。private型,它只能被所声明的类内部调用。这些说明类型同样适用于数据变量。若有人想改变一个私有变量,通常要引用下面的成员函数:
27、public void setWidth(int w)width=w;在C+中,还有一种类型被黍为protected,它意味着成员函数或数据只能被所在类和子类引用。在一些Java资料中,也对此作了说明,但实际上,在Java的1.0,1.01和1.02版本中均没有protected的相应功能,而只是保留了该关键字,希望读者注意。 3 成员函数的重载假如你必须在不同情况下发送不同的信息给同一个成员函数的话,该怎么办呢?你可以通过对此成员函数说明多个版本(version)的方法来实现重载。重载的本质是创建了一个新的成员函数:你只需给它一个不同的参数列表(parameterlist),如下例所示:vo
28、id get Area(int w,int h);void get Area(float w,float h);在第二种情况下,成员函数get Area()接受两个浮点变量作为它的参数,编译器根据调用时的不同参数来决定该调用哪一种成员函数,假如你把两个整数提供给成员函数,你就调用第一个成员函数;假如你把两个浮点数提供给成员函数,第二个成员函数就被调用。 4静态成员除了public、private和protected以外,你还可以把成员说明为static(静态)。static修饰符表明一个变量或成员函数对所有类的实例都是相同的,你也许想使用一个所有Rectangle类都可以使用的变量,来说明该类
29、的版本(version),假如你把它说明成一个static,那么该变量将对该类的所有实例都是一样的,如: static int version=1;静态成员函数和静态变量的优点就在于他们能在没有创建类的任何一个实例的情况下被引用,引用时在“.”域前,可直接使用类名而无须使用对象名。例如,drawRect成员函数使用了System.out.println成员函数,但实际上你却未曾创建一个某个System类的对象,这正是因为out是System类的一个静态变量,所以你可以直接使用这个成员函数而无须定义一个System对象。 5构造和析构成员函数类有一个特殊的成员函数叫做构造成员函数,它通常用于初始
30、化类的数据成员。在创建对象时,会自动调用类的构造成员函数。Java中的构造成员函数必须与该类具有相同的名字,另外,构造成员函数一般都应用public类型来说明,这样才能在程序任意的位置创建类的实例对象。下面是一个Rectangle类的构造成员函数,它带有两个参数,分别表示矩形的长和宽:public Rectangle(int w,int h) width=w; height=h; area=getArea(w,h);除了构造成员函数以外,类还提供了析构成员函数,当对象被从内存中删除时,该成员函数将会被自动调用。通常,在析构成员函数内,你可以填写用来回收对象内部的动态空间的代码。 1, Java
31、的普通应用程序中,必须含有一个可被外界(通常是java解释器)所直接调用的类,我们可以把这个类称为该应用程序的主类,而这个主类必须含有main成员函数,整个应用程序就是从这个成员函数开始执行的,这与C程序有一定的类似之处。 main成员函数的说明如下: public static void main(String args); 2 命令行参数 我们把main成员函数的参数args称为命令行参数,args可以用来接收外界传给Java应用程序的参数,下面我们举一个例子来看看参数传递的具体过程:class doRect public static void main(String args) int
32、 w=Integer.valueOf(args0).intValue();int h=Integer.valueOf(args1).intValue();Rectangle myrect=new Rectangle(w,h);myrect.drawRect(); class Rectangle int width,height,area; public Rectangle(int w,int h) width=w;height=h;area=getArea(w,h); protected int getArea(int w,int h) int a;a=w*h;return a; public
33、 void drawRect() int i,j;for(i=width;i0;i-) System.out.print(#);System.out.print()for(i=height-2;i0;i-)System.out.print(#);for(j=width-2;i0;j-) System.out.print();System.out.print(#);for(i=width;i0;i-) System.out.print(#);System.out.print(); 用Javac编译该程序后,可以用java解释器来执行它,具体过程如下: javac doRect.java java
34、 doRect 10 15注意这里的“10 15”就是命令行参数,它将被赋给doRect的main成员函数的args变量。其中args0的值为“10”,args1的值为“15”,Integer.valueOf(Stringstring).intValue的功能是把string中的数字转化为一个整型值。 1 理解包(package)的基本概念 一旦你创建了一个类,并想重复地使用它,那么把它放在一个包中将是非常有效的,包(package)是一组类的集合,例如,Java本身提供了许多包,如java.jo和java.lang,它们存放了一些基本类,如System和String。你可以为自己的几个相关的
35、类创建一个包。 把类放入一个包内后,对包的引用可以替代对类的引用。此外,包这个概念也为使用类的数据与成员函数提供了许多方便。没有被public、private修饰的类成员也可以被同一个包中的其它类所使用。这就使得相似的类能够访问彼此的数据和成员函数,而不用专门去做一些说明。下表列出了Java自带的一些常用包:包名称 包的内容描述基本语言类为Java语言的基本结构(如字符串类、数组类)提供了基本的类描述实用类提供了一些诸如编码、解码、哈西表、向量、堆栈之类的实用例程I/O类 提供了标准的输入/输出及文件例程applet类提供了与支持Java的浏览器进行交互的例程另一个窗口AWT提供了一些诸如字体
36、、控制、按钮、滚动条工具集类(AWT类) 之类的图形接口网络类为通过诸如telnet、ftp、www之类的协议访问网络提供了例程表Java基本包一览 2 定义一个包 你可以用下机的成员函数去说明一个包: package PackageName;比如,你可以把Rectangle类放入一个名为shapes的包中: package shapes 此后,当你用javac来编译这个文件时,将会在当前路径下得到一个字节代码文件Rectangle.class。但你还需要将它移至java类库所在路径的shapes子目录下(在此之前,你必须建立一个名为shapes的子目录),这样以后才能应用shapes包中的R
37、ectangle类。当然你可以用-d选项来直接指定文件的目的路径,这样就无需编译后再移动。包的名称将决定它应放的不同路径。例如用下面的方式来构造一个包。 package myclass.Shapes; 归入该包的类的字节代码文件应放在java的类库所在路径的myclass子目录下。现在包的相对位置已经决定了,但java类库的路径还是不定的。事实上,java可以有多个存放类库的目录,其中的缺省路径为java目录下的lib子目录,你可以通过使用classpath选项来确定你当前想选择的类库路径,具体成员函数可参考第三章的内容。除此之外,你还可以在CLASSPATH环境变量中设置类库路径。 3 引用
38、已定义过的包 为了使用已定义过的包,你必须使用引用命令import,你可以用以下三种方式引用包中的一个类: 1.在每一个类名前给出个包名: Shapes.Rectangle REET=new Shapes.Rectangle(10,20) 2.引用类本身: import Shapes.Reckargle; 3.引用整外包: import Shapes; 1 在Java中使用继承 也许在面向对象的程序设计中最为强大的工具是类的继承,类的继承允许你在一个已经存在的类之上编写新的程序,例如,你想建立一个可在屏幕上显示并能填充它的矩形类,你可以从头开始或者利用旧的矩形类,下面的部分将向你介绍如何继承已
39、存在的Rectangle类,而不需重写其中的代码。 使用extands关键字让Java程序员能够继承已有类的成员函数,为了告诉编译器和解释器你正在继承Rectangle类,你必须引用旧的Rectangle类,并且在新类的说明中引用它: import Shapes.Rectangle; class fillRect extands Rectangle /new code here 这样,fillRect类将可以使用Rectangle类中所有已定义的数据和成员函数,如:width、height等数据和getArea等成员函数。 2 成员函数的重载 在继承之后有所提高,这是人类进步的一个重要方式。
40、那么,如何使fillRect类比Rectangle类有所提高呢?我们可以用如下代码来实现一个新的drawRect成员函数,它将大大缩短代码,并能填充矩形,而不是仅仅画出矩形的轮廓:private String makeString(chr ch,int num) StringBuffer str=new StringBuffer(); for(int i=num;i0;i-) str.append(ch); return str.toString(); public void drawRect() for(int i=height;i0;i-) System.out.println(makeS
41、tring(#,width); 注意这里我们使用了StringBuffer类。之所以使用StringBuffer是因为String只能产生一个静态类型它的大小是不能改变的,而StringBuffer能够产生一个可变长度的字符串类型。 在这里,drawRect成员函数被重载了,通过使用相同的成员函数名字,你可以用新的成员函数来代替旧的成员函数。不过,那些被说明为final的成员函数是不能被重载的。 注意,你不必在新的类中包含那些与被继承类相同的代码,而只需要加入你想要的东西,但你必须建立一个新的构造成员函数,以区分这两个不同的类。新类的全貌如下所示,你可以发现通过继承Rectangle类,代码变
42、得非常简单明了。class fillRect extands Rectangle public fillRect(int w,int h) supper(w,h); private String makeString(char ch,int num) StringBuffer str=new StringBuffer();for(int i=num;i0;i-) str.append(ch);return str.toString();public void drawRect()for(int i=height;i0;i-) System.out.printlm(makeString(#,width); 3 使用接口 Java可以创建一种称作接口(interface)的类,在这个类中,所有的成员函数都是抽象的,也就是说它们都只有说明没有定义,你可以如下所示来说明一个接口。 public interface interfaceName /成员函数说明 接口中成员函数的缺省引用类型是private,接口(interface)的内部变量是不可更改的,并且总是static和final。 通过使用关键字implement,你可以在定义
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信息保密知识竞赛试卷(附答案)
- 北师大版七年级下册第2节 食物的消化和营养物质的吸收第1课时教学设计及反思
- 第一节 免疫系统识别“自己”和“非己”教学设计高中生物浙科版2019选择性必修1 稳态与调节-浙科版2019
- 北京理工版教学设计-2025-2026学年中职中职专业课纺织服装类68 轻工纺织大类
- 第一节 生物群落由不同的种群组成教学设计高中生物沪教版2019选择性必修2 生物与环境-沪教版2019
- 初中青岛版2.3 用计算器求锐角三角比教学设计
- 2026四川泸州古蔺县人民医院招聘22人笔试备考试题及答案解析
- 2026第十四届贵州人才博览会贵阳贵安事业单位引进高层次及急需紧缺人才957人考试参考题库及答案解析
- 2026年合肥滨湖时光空间运营管理有限公司招聘劳务派遣人员3名笔试备考试题及答案解析
- 人教版小学六年级数学下册应用题专项练习80道(含答案解析)
- 五华区城中村改造实施办法
- 云南省住院病案首页附页
- 城市绿地系统专项规划说明书
- 《社会工作概论(第三版)》课件01 第一章 社会工作导论
- 工程教育认证学校培训课程专项测试卷含答案
- 小学英语时态总结课件
- 内蒙古乡镇卫生院街道社区卫生服务中心地址医疗机构名单1598家
- 家政培训之衣物洗涤2课件
- 浙江省(2019-2022年)学业水平考试真题生物试卷汇编含答案
- 小学美术苏少版六年级下册第11课迁想妙得 课件
- (中职中专)网店运营课件完整版电子教案
评论
0/150
提交评论