Java主要修饰符的使用方法总结(周双)
java修饰符整理

Java修饰符总结1引言众所周知,Java语言是一种具有良好面向对象特性的语言,加上其良好的可移植性Java语言受到广泛的欢迎。
要实现其良好的面向对象的特性就要具有良好的封装性,而要做到具有良好的封装性就需要具有功能强大的修饰符。
通过对Java的学习发现Java的修饰符有很多很复杂,很难理清头绪,所以在此做一个系统的总结,以增进对Java修饰符的理解,便于以后的学习。
java中的修饰符分为类修饰符,字段修饰符,方法修饰符。
按照功能分类可以分为以下几种:1.public使用对象:类、接口、成员介绍:无论它所处在的包定义在哪,该类(接口、成员)都是可访问的。
2.private使用对象:成员介绍:成员只可以在定义它的类中被访问3.static使用对象:类、方法、字段、初始化函数介绍:成名为static的内部类是一个顶级类,它和包含类的成员是不相关的。
静态方法是类方法,是被指向到所属的类而不是类的实例。
静态字段是类字段,无论该字段所在的类创建了多少实例,该字段只存在一个实例被指向到所属的类而不是类的实例。
初始化函数是在装载类时执行的,而不是在创建实例时执行的。
4.final使用对象:类、方法、字段、变量介绍:被定义成final的类不允许出现子类,不能被覆盖(不应用于动态查询),字段值不允许被修改。
5.abstract使用对象:类、接口、方法介绍:类中包括没有实现的方法,不能被实例化。
如果是一个a bstract方法,则方法体为空,该方法的实现在子类中被定义,并且包含一个abstract方法的类必须是一个abstract类6.protected使用对象:成员介绍:成员只能在定义它的包中被访问,如果在其他包中被访问,则实现这个方法的类必须是该成员所属类的子类。
7.native使用对象:成员介绍:与操作平台相关,定义时并不定义其方法,方法的实现被一个外部的库实现。
8.strictfp使用对象:类、方法介绍:strictfp修饰的类中所有的方法都隐藏了strictfp修饰词,方法执行的所有浮点计算遵守IEEE 754标准,所有取值包括中间的结果都必须表示为float或double类型,而不能利用由本地平台浮点格式或硬件提供的额外精度或表示范围。
java类的访问修饰符总结

java类的访问修饰符总结java的修饰符有:权限修饰符:public、protected、default、private修饰符:abstract、static、finalpublic 使用对象:最广,类、接口、变量、方法protected使用对象:变量、方法注意:不能修饰类(外部类)default 使用对象:类、接口、变量、方法。
(即缺省,什么也不写)private 使用对象:变量、方法注意:不能修饰类(外部类)abstract使用对象:类、接口、方法static 使用对象:类、变量、方法、初始化函数(注意:修饰类时只能修饰内部类)final 使用对象:类、变量、方法transient:告诉编译器,在类对象序列化的时候,此变量不需要持久保存volatile:指出可能有多个线程修改此变量,要求编译器优化以保证对此变量的修改能够被正确的处理native:用该修饰符定义的方法在类中没有实现,而大多数情况下该方法的实现是用C、C++编写的。
synchronized:修饰方法,多线程的支持类分外部类和内部类,他们的访问控制是相同的吗外部类是相对于内部类而言的,内部类是定义在类里面的类。
外部类的修饰符有:default(缺省,不写):类定义时前面未加任何修饰符,表示同一个包中可见。
public:修饰类时表示该类能被项目中所有类可见abstract:表示是抽象类final:表示类不可以被继承scrictpf:(java关键字) 当对一个类或接口使用 strictfp 关键字时,该类中的所有代码,包括嵌套类型中的初始设定值和代码,都将严格地进行计算。
严格约束意味着所有表达式的结果都必须是 IEEE 754 算法对操作数预期的结果,以单精度和双精度格式表示内部类又分:成员内部类、局部内部类、静态内部类、匿名内部类成员内部类:作为外部类的一个成员存在,与外部类的属性、方法并列局部内部类:定义在外部类的方法体里面的类静态内部类:使用static修饰的内部类匿名内部类:就是没有名字的内部类成员内部类修饰符有:public:protected:private:private不能修饰外部类,abstract:final:static:可以当做普通类使用,而不用先实例化一个外部类。
JAVA修饰符总结

JAVA修饰符总结Java修饰符用于控制类、方法、变量和构造方法的访问级别和特性。
Java提供了多种修饰符,包括访问修饰符、非访问修饰符和继承修饰符。
本篇文章将对这些修饰符进行总结,并提供一些使用示例。
一、访问修饰符Java提供了四种访问修饰符:public、protected、default(默认)和private。
这些修饰符的使用不仅可以控制类的访问级别,还可以控制方法、变量和构造方法的访问级别。
1. public修饰符public修饰符具有最高的访问级别,被public修饰的类、方法、变量和构造方法可以被所有其他类访问。
示例代码:```public class MyClasspublic void myMethoSystem.out.println("This method can be accessed by any other class.");}public class OtherClasspublic static void main(String[] args)obj.myMethod(;}```2. protected修饰符protected修饰符限制了对同一包内的其他类的访问,以及对其他包中的子类的访问。
示例代码:```package mypackage;public class MyClassprotected void myMethoSystem.out.println("This method can be accessed by classes in the same package and subclasses in other packages.");}package otherpackage;import mypackage.MyClass;public class SubClass extends MyClasspublic static void main(String[] args)obj.myMethod(;}```3. default(默认)修饰符默认修饰符是指当没有使用任何访问修饰符时,所使用的修饰符。
Java主要修饰符的使用方法总结(周双)

Java中主要修饰符的使用(周双) 武汉理工大学计算机学院软件sy1001班周双(0121010680234)Java中定义了6个常用修饰符:public、protected、private、abstract、static、final。
访问控制符:公开级别:public;受保护级别:protected;默认级别:friendly (一般不指明);私有级别:private。
类只能使用public和默认级别修饰。
其中类的属性和方法可以使用上述4个访问修符;局部变量不可以使用访问修饰符;常用的方法是将类的属性设为private,而将类的方法设为public。
abstract修饰符:abstract修饰符可以用来修饰类和成员方法:用abstract修饰抽象类,表示该类不可以被实例化。
相对应的则称为具体类。
用abstract修饰的方法成为抽象方法,该方法没有方法体。
抽象方法用来描述系统具有什么功能。
final 修饰符:final修饰符表示不可以改变的含义。
final修饰符可以用来修饰类,成员方法,和成员变量。
用final修饰类,表示该类不可以被继承;用final 修饰成员方法,表示该方法不可以被覆盖(override);用final修饰变量,表示一旦赋值就不可以被改变。
注意,final变量必须被显式初始化。
对于实例变量可以在定义时或在构造方法中进行初始化。
而类变量(static变量)必须在定义时进行初始化。
对于final修饰的引用类型,那么该变量在其生命周期中只能指向同一个对象,但可以改变对象的值。
Static修饰符:static成员变量表示静态变量,可以直接通过类名来访问。
static 成员方法表示静态方法,可以直接通过类名来访问。
由于static方法中,只可以访问静态变量和方法,所以要想访问一个实例变量或方法,则必须要先得到相应的对象的引用,才能访问其变量和方法。
一、类的修饰符Java程序在定义类时,除恶额使用class关键字标识外,还可以在在class之前增加若干类的修饰符来修饰限定所定义的类的特性。
java主要修饰符的使用

Java主要修饰符的使用软件1004班杨娜0121010680433java主要修饰符的使用一、类及其成员的访问权限Java为类中成员设置了四种访问权限,为类设置了两种访问权限。
(一)类中成员的访问权限Java主要定义了四种权限修饰符:public(共有)、protected (保护)、缺省和private(私有)。
这四种权限修饰符均可用于声明类中成员的访问权限,例如:private int year,month,day;public void print();四种权限修饰符用于声明类中成员的访问权限,说明如下:1、public:说明该类成员可被所有类的对象访问。
public指定最大访问权限范围。
2、protected:说明该类成员可被同一类中的其他成员或其子类成员,或同一包中的其他类访问,不能被其他包中的非子类访问。
protected指定中间级的有限的访问权限范围,使保护成员在子类和非子类中具有不同的访问权限,即保护成员可被子类访问,不能被非子类访问。
3、缺省:当没有使用访问权限修饰符声明成员时,说明该类成员能被同一类中的其他成员访问或被同一包中的其他类访问,不能被包之外的其他类访问。
缺省权限以包为界划定访问权限范围,是同一包中的类具有访问权限,其他包中的类则没有访问权限。
4、private:说明该类成员只能被同一类中的其他成员访问,不能被其他类的成员访问,也不能被子类成员访问。
private指定最小访问权限范围,对其他类隐藏类的成员,防止其他类修改该类的私有成员。
注意:public等访问权限修饰符不能用于修饰方法体中的局部变量,因为方法体中局部变量的作用域仅限于该方法,在类之外是不可见的,不存在其他类对他的访问。
四种权限修饰符定义的访问权限如表所示:(二)类的访问权限声明一个类可使用的权限修饰符只有两种:public和缺省,不能使用protected和private。
一个源程序文件中可以声明多个类,但用public修饰的类只能有一个,且该类名必须与文件名相同。
java主要修饰符的使用

目录Java主要修饰符的使用“说明书” (1)一、public、protected和private (2)一)对类的类型的修饰 (2)二)未标注此类类型的成员变量和成员函数 (2)三)public、protected和private在子类中的可见情况 (3)四)public、protected和private在非子类中的可见情况 (8)二、final (10)(一)对类类型的修饰 (10)(二)final修饰的成员函数 (11)(三)final修饰的成员变量 (11)三、static (12)附录:原函数 (14)一)father.java (14)二)childinsamepa.java (16)三) childindifferentp.java (17)四)AFINALCLASS.java (18)五)DEFFERENTPAKAEGEIMPORT.java (19)六)FORSTATIC.java (19)七)ROOT.java (20)——武汉理工软件1003班0121010680328 陈莹伊Java主要修饰符的使用“说明书”示例用工作空间结构:一、public、protected和private一)对类的类型的修饰类的类型只能使用public修饰,或者省略。
二)未标注此类类型的成员变量和成员函数未标注类型的成员变量和成员函数在java类中的使用可见类别不同于public、protected和private。
当成员变量和成员函数无这三个修饰符修饰,无论是该类的子类还是非子类,只要是和该类属于同一个包,这些成员变量和成员函数都是可见的。
而对于不属于同一个包的类,它们则是不可见的。
示例用class father的成员列表:在同包子类中的可见情况:在不同包子类中的可见情况:在同包非子类中的可见情况:在不同包非子类中的可见情况:三)public、protected和private在子类中的可见情况father类成员表列:a)对于子类而言,无论是否属于同一个包,父类中的public类型和protected 类型变量和函数在子类中是可见的。
java中修饰符的用法

java中修饰符的用法在Java中,修饰符是用来控制访问级别和行为的关键字。
Java中的修饰符可以应用在类、方法、变量和构造函数上。
修饰符主要分为访问修饰符和非访问修饰符两类。
一、访问修饰符:1. public:该修饰符表示对任意代码片段都是可见的。
被public修饰的类、方法、成员变量都可以在任何位置被访问。
2. protected:该修饰符表示对子类和同一包中的代码片段可见。
被protected修饰的方法和成员变量可以在子类中访问。
3. private:该修饰符表示对同一类中的代码片段可见。
被private 修饰的方法和成员变量只能在同一个类中访问。
4.默认修饰符:当没有使用任何访问修饰符时,表示为默认访问修饰符。
默认修饰符表示对同一包中的代码片段可见,但对其他包中的代码片段不可见。
二、非访问修饰符:1. static:该修饰符表示成员变量或方法属于类而不是实例。
被static修饰的成员变量在类的所有实例中都共享相同的值,被static修饰的方法可以直接通过类名调用。
2. final:该修饰符表示被修饰的类、方法或变量的值无法更改。
被final修饰的类无法被继承,被final修饰的方法无法被重写,被final 修饰的变量只能被赋值一次。
3. abstract:该修饰符表示被修饰的类是抽象类,不能被实例化。
被abstract修饰的方法没有具体的实现,只有声明,需要在子类中进行实现。
4. synchronized:该修饰符表示同一时间只能有一个线程访问被修饰的代码段或方法。
多个线程在访问该代码段时,会依次进行排队访问,提供了多线程的安全性。
5. transient:该修饰符表示被修饰的成员变量在序列化时会被忽略,不会被保存。
6. volatile:该修饰符表示被修饰的成员变量的值在多线程环境下都是可见的。
当一个线程修改了该成员变量的值,其他线程都能立即看到该修改。
这些修饰符可以在不同的位置使用:1. 类的修饰符:可以使用public、abstract或final来修饰类。
java修饰符详解

java修饰符详解1. 访问修饰符public:公共的protected:受保护的(不能修饰类)default(默认不写)private:私有的(不能修饰类)修饰符当前类同⼀包内被继承的类(同包)被继承的类(不同包)其他包public能访问能访问能访问能访问能访问protected能访问能访问能访问能/不能不能访问default能访问能访问能访问不能访问不能访问private能访问不能访问不能访问不能访问不能访问注:protected:基类的 protected 成员是包内可见的,并且对⼦类可见若⼦类与基类不在同⼀包中,那么在⼦类中,⼦类实例可以访问其从基类继承⽽来的protected⽅法,⽽不能访问基类实例的protected⽅法2. 特征修饰符abstract:抽象的1. 修饰⽅法⽤abstract修饰符修饰的⽅法只有⽅法的结构没有⽅法执⾏体叫做抽象⽅法注:native修饰的⽅法虽然也没有⽅法体但不是抽⽅法,过程是其他语⾔写的public class Person(){//被abstract修饰的⽅法没有⽅法体public abstract void medth();}2. 修饰类⽤abstract修饰符修饰的类叫做抽象类public abstract class Person(){//抽象类⾥⾯可以有抽象⽅法也可以有普通⽅法//抽象⽅法public abstract void medth();//普通⽅法public void medth1(){System.out.println("这是⼀个普通⽅法");}}3. 特点抽象类中不是必须要有抽象⽅法抽象⽅法必须放在抽象类中或者接⼝中,普通类中不允许有抽象⽅法4. 如何使⽤抽象类中含有构造⽅法,但是我们不能通过调⽤构造⽅法直接创建对象抽象类只能通过⼦类继承来做事//定义⼀个抽象类public abstract class Person(){public abstract void run();}//定义⼀个类并继承Personpublic class Son extends Person(){//重写Person中的run⽅法@Overridepublic void run() {System.out.println("这是我继承我的⽗类重写的⽅法");}}public static void main(String[] args) {son son=new son();son.run();}以上程序执⾏结果为:这是我继承我的⽗类重写的⽅法5.类和类之间的关系:抽象类---单继承---抽象类抽象类---单继承---具体类(⼀般不会出现)具体类---单继承---抽象类不可以(将⽗类的抽象⽅法具体化或⼦类也变成抽象类)final:最终的不可改变的修饰变量如果存储的是值类型:变量内的值不让更改---常量如果存储的是引⽤类型:变量⾥⾯的地址引⽤不让更改---对象唯⼀修饰属性属性如果没有赋值有默认值存在的属性⽤final修饰后必须给属性赋初始值,否则会编译错误修饰⽅法⽅法是最终的⽅法不可以更改(覆盖)final修饰的⽅法,要求不可以被⼦类重写(覆盖)修饰类本⾝类是最终的不可以更改、(太监类)此类不可以被其它⼦类继承static:静态的修饰变量:static修饰的成员变量也叫做静态变量,也叫作类变量,说明这个变量属于类的,⽽不是属于对象的被所有的对象共享,在内存中只有⼀个副本,static成员变量的初始化顺序按照定义的顺序进⾏初始化静态变量必须要静态成员才能调⽤或者访问public class Test(){//定义⼀个静态变量static String name;//这⾥定义⼀个静态⽅法注意:要想使⽤静态变量⽅法也必须定义成静态⽅法//如果不定义成静态⽅法调⽤静态变量就会报错public static void medth(){name="定义的静态变量";System.out.println(name);}public static void main(String[] args){medth();}}以上程序执⾏的结果为:定义的静态变量修饰⽅法:被static修饰的⽅法也叫做静态⽅法,因为对于静态⽅法来说是不属于任何实例对象的public class Test(){//定义⼀个静态变量static String name;//定义⼀个普通的变量int age;//定义⼀个静态⽅法public static void medth(){//打印输出静态nameSystem.out.println(name);//打印输出普通变量ageSystem.out.println(age);}public static void main(String[] args) {medth();}}以上程序执⾏的结果:age是访问不到的,会报错误:⽆法从静态上下⽂中引⽤⾮静态变量age 注:静态变量和普通变量的区别:静态变量属于类变量成员变量属于对象变量静态变量存储在⽅法区的静态区成员变量存储在内存中的堆静态变量随着类的加载⽽加载,随着类的消失⽽消失成员变量随着对象的加载⽽加载,随着对象的消失⽽消失静态通过类名调⽤成员变量通过对象调⽤特点:静态元素在类加载时就初始化了静态元素存储在静态元素区中,每⼀个类有⼀个⾃⼰的区域,与别的类不冲突静态元素只加载⼀次(只有⼀份)全部的类对象及类本⾝共享由于静态元素区加载的时候,有可能没有创建对象,可以通过类名字直接访问GC机制时⽆法管理静态元素的,可以认为是常驻内存⾮静态成员中可以访问静态成员静态成员中可以访问静态成员静态成员中不可以访问⾮静态成员在静态元素中不能出现this或supernative:本地的java源代码中看到native就已经看不到后续的代码了后续会调⽤其他语⾔C++ C执⾏的内存操作帮我们操作内存。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java中主要修饰符的使用(周双) 武汉理工大学计算机学院软件sy1001班周双(0121010680234)Java中定义了6个常用修饰符:public、protected、private、abstract、static、final。
访问控制符:公开级别:public;受保护级别:protected;默认级别:friendly (一般不指明);私有级别:private。
类只能使用public和默认级别修饰。
其中类的属性和方法可以使用上述4个访问修符;局部变量不可以使用访问修饰符;常用的方法是将类的属性设为private,而将类的方法设为public。
abstract修饰符:abstract修饰符可以用来修饰类和成员方法:用abstract修饰抽象类,表示该类不可以被实例化。
相对应的则称为具体类。
用abstract修饰的方法成为抽象方法,该方法没有方法体。
抽象方法用来描述系统具有什么功能。
final 修饰符:final修饰符表示不可以改变的含义。
final修饰符可以用来修饰类,成员方法,和成员变量。
用final修饰类,表示该类不可以被继承;用final 修饰成员方法,表示该方法不可以被覆盖(override);用final修饰变量,表示一旦赋值就不可以被改变。
注意,final变量必须被显式初始化。
对于实例变量可以在定义时或在构造方法中进行初始化。
而类变量(static变量)必须在定义时进行初始化。
对于final修饰的引用类型,那么该变量在其生命周期中只能指向同一个对象,但可以改变对象的值。
Static修饰符:static成员变量表示静态变量,可以直接通过类名来访问。
static 成员方法表示静态方法,可以直接通过类名来访问。
由于static方法中,只可以访问静态变量和方法,所以要想访问一个实例变量或方法,则必须要先得到相应的对象的引用,才能访问其变量和方法。
一、类的修饰符Java程序在定义类时,除恶额使用class关键字标识外,还可以在在class之前增加若干类的修饰符来修饰限定所定义的类的特性。
类的修饰符分为访问控制符和非访问控制符两大类,下面主要讨论类的费访问控制符。
1.1抽象类凡是用abstract修饰符修饰的类被称为抽象类。
抽象类就是没有具体对象的概念类。
比如电话卡有很多类型,磁卡、IC卡、IP卡、200卡、300卡、校园201卡。
不同种类的卡有各自的特点,例如磁卡和IC卡没有卡号和密码;使用200卡每次通话要多扣除0.1元的附加费等。
同时它们也拥有一些共同的特点,如每张卡都有剩余的金额,都有通话的功能。
为此,可以定义一种集合了所有种类的电话卡的公共特点的抽象电话卡如下:Abstract class PhoneCard{double balance;void performDial(){…}}抽象类是它的所有子类的公共属性的集合,所以使用抽象类的一大优点就是可以充分利用这些公共属性来提高开发和维护程序的效率。
1.2最终类如果一个类被final修饰符所修饰和限定,说明这个类不能再有子类。
被定义为final的类通常是一些有固定作用、用来完成某种标准功能的类。
将一个类定义为final则可以将它的内容、属性和功能固定下来,与它的类名形成稳定的映射关系,从而引用这个类时所实现的功能的正确无误。
注意:abstract和final修饰符不能同时修饰一个类,因为abstract类自身没有具体对象,需要派生出子类后再创建子类的对象;而final类不可能有子类,这样abstract final类就无法使用,也就没有意义了。
但是abstract和final可以各自与其他大的修饰符合用。
例如一个类可以是public abstract的也可以是public final的。
二、域本文只介绍静态域和最终域的特点与使用方法。
2.1静态域用static修饰符修饰的域是仅属于类的静态域。
静态域最主要的特点是:它们是类的域,不属于任何一个类的具体对象。
它不保存在某个对象的内存区间中,而是保存在类的内存区域的公共存储单元。
换句话说,对于该类的任何一个具体对象而言,静态域是一个公共的存储单元,任何一个类的对象访问它时,取到的都是相同的数值;同样任何一个类的对象去修改它时,也都是在对同一个内存单元进行操作。
下面的程序片段中定义了两个静态域。
class PhoneCard200{Static String connectNumber = “200”;Static double additoryFee;long cardNumber;int password;boolean connected;double balance;…}上面程序定义了对应200电话卡的类PhoneCard200.由于所有的200电话卡的接入号码都是“200”,所以定义类的静态域connectNumber标志所有PhoneCard200对象共有的接入号码;同时使用200电话卡通话的附加费对每张电话卡也是一致的,所以定义类的静态域additoryFee.下面的程序将验证静态域是类中每个对象共享的域。
例1 TestStaticField.javapublic class TestStaticField{public static void main(String args[]){PhoneCard200 my200_1=new PhoneCard200();PhoneCard200 my200_2=new PhoneCard200();my200_1.additoryFee=0.1;System.out.println("第二张200卡的附加费:"+my200_2.additoryFee);System.out.println("200卡类的附加费:"+PhoneCard200.additoryFee);}}class PhoneCard200{static String connectNumber = "200";static double additoryFee;long cardNumber;int password;boolean connected;double balance;}运行结果如下图:有结果可知,类的静态域可以成为该类各个对象共享的变量,便于实现一个类不同对象之间的通信。
2.2最终域final是用来修饰常量的修饰符,一个类的域如果被声明为final,那么它的值在程序的整个执行过程中都不能改变。
例如PhoneCard200类中的接入号码,对于200电话卡是固定的字符串“200”,根据问题的实际情况,这个数据不需要也不应该被改变,所以可以把它定义为最终域。
static final String connectNumber = "200";用final修饰符说明常量时,需要注意以下几点:(1)需要说明常量的数据类型。
(2)需要同时指出常量的具体取值。
(3)因为所有类对象的常量成员,其取值都固定一致,为了节省空间,常量通常声明为static.最终域的使用在系统类中也很常见。
例如在ng包中,有一个Integer类,它的两个域定义如下:public static final int MAX_V ALUEpublic static final int MIN_V ALUE从上述定义可以看出:它们都是最终域(常量),而且也都是静态域。
MAX_V ALUE域和MIN_V ALUE域分别存储int类型数据的最大值(2147483647)和最小值(-2147483648)。
Integer正是利用这两个域为我们提供了int类型的数据的范围。
除静态域和最终域之外,域还有其他类型,例如易失域。
如果一个域被volatile修饰符所修饰,说明这个域可能同时被几个线程所控制盒修改,即这个域不仅仅被当前程序所掌握,在运行过程中可能存在其他未知的程序操作来影响和改变该域的取值。
在使用当中应该特别留意这些影响因素。
通常,volatile用来修饰接受外部输入的域。
如表示当前时间的变量将由系统的后台线程随时修改,以保证程序中取到的总是最新的当前的系统时间,所以可以把它定义为易失域。
三、方法方法的修饰符也分为访问控制符和非访问控制符两大类,常用的非访问控制符把方法分成若干种,下面介绍几种用于特定场合的方法。
3.1抽象方法修饰符abstract修饰的抽象方法是一种仅有方法头,而没有具体方法体和操作实现的方法。
例如,下面的拨打电话的方法performDial()就是抽象类PhoneCard 中定义的一个抽象方法。
abstract void performDial();可见,abstract方法只有方法头的声明,后面没有大括号包含的方法体。
那么为什么不定义方法体呢?因为电话卡类是从所有电话卡中抽象出来的公共特性的集合,每种电话卡都有“拨打电话”的功能,但是每种电话卡的“拔打电话”的功能的具体实现(具体操作)都不相同。
例如IC卡电话机就可以通话;而200卡则需要在双音频电话中先输入正确的卡号和密码。
所以PhoneCard的不同子类的performDial()方法虽然有相同目的,但其方法体是各不相同的。
针对这种情况为PhoneCard类定义一个方法体的抽象方法performDial(),至于方法体的具体实现,则留到当前类的不同子类在它们各自的类定义中完成。
也就是说,各子类在继承了父类的抽象方法之后,再分别用不用的语句和方法体来重新定义它,形成若干个名字相同,返回值相同,参数列表也相同,目的一致但是具体实现有一定的差别的方法。
使用抽象方法的目的是使所有的PhoneCard类所有子类对外都呈现一个相同名字的方法,是一个统一的接口。
当然,定义abstract方法也有特别的优点,及时可以隐藏具体的细节信息,是调用的程序不必过分关注类内部的具体情况。
由于所有的子类使用的都是相同的方法头,而方法头实际包含了调用该方法的全部信息,所以一个希望完成“拨打电话”操作的语句,可以不必知道它调用的是哪个电话卡子类的performDial()方法,而仅仅使用PhoneCard类的performDial()方法就足够了。
需要特别注意的是,所有的抽象方法,都必须存在于抽象类之中。
一个非抽象类中出现抽象方法是非法的。
也就是说,一个抽象类的子类如果不是抽象类,则它必须为父类中的所有抽象方法书写方法体。
不过抽象类不一定只能拥有抽象方法,它可以包含非抽象方法。
下面的例子将体现上面的内容。
例2:TestAbstract.javapublic class TestAbstract{public static void main(String args[]){PhoneCard200 my200=new PhoneCard200(50.0);IC_Card myIC=new IC_Card(50.0);System.out.println("200卡可以拨打"+my200.TimeLeft()+"次电话。