枚举、多态、匿名类_第1页
枚举、多态、匿名类_第2页
枚举、多态、匿名类_第3页
枚举、多态、匿名类_第4页
枚举、多态、匿名类_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

1、枚举一、概述枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。二、枚举的基本应用1、通过enum关键字定义枚举类,枚举类是一个特殊的类,每个元素都是该类的一个实例对象。2、用枚举类规定值,如上面的WeekDay类。以后用此类型定义的值只能是这个类中规定好的那些值,若不是这些值,编译器不会通过。3、好处:在编译时期就会发现错误,表明值不符合,减少了运行时期的错误。4、如果调用者想打印枚举类中元素的信息,需由编写此类的人定义toString方法。注:枚举类是一个clas

2、s,而且是一个不可被继承的final类,其中的元素都是类静态常量。5、常用方法:构造器: 1)构造器只是在构造枚举值的时候被调用。 2)构造器只有私有private,绝不允许有public构造器。这样可以保证外部代码无法重新构造枚举类的实例。因为枚举值是public static final的常量,但是枚举类的方法和数据域是可以被外部访问的。 3)构造器可以有多个,调用哪个即初始化相应的值。非静态方法:(所有的枚举类都继承了Enum方法) 1)String toString() ;/返回枚举量的名称 2)int ordinal() ;/返回枚举值在枚举类中的顺序,按定义的顺序排 3)Class

3、 getClass() ;/获取对应的类名 4) String name();/返回此枚举常量的名称,在其枚举声明中对其进行声明。静态方法: 1)valueOf(String e) ;/转为对应的枚举对象,即将字符串转为对象 2)values() ;/获取所有的枚举对象元素注意: 1、匿名内部类比较常用 2、类的方法返回的类型可以是本类的类型 3、类中可定义静态常量,常量的结果就是自己这个类型的实例对象 4、枚举只有一个成员时,就可以作为一种单例的实现方式。注:1、所有的枚举都继承自java.lang.Enum类。由于Java不支持多继承,所以枚举对象不能再继承其他类。 2、switch语句支

4、持int,char,enum类型,使用枚举,能让我们的代码可读性更强。package cn.itheima;public class EnumDemo public static void main(String args) WeekDay weekDay=WeekDay.MON;System.out.println(weekDay);/输出枚举常量名System.out.println(weekD();/输出对象名System.out.println(weekDay.getClass();/输出对应类System.out.println(weekDay.toString();/

5、输出枚举对象名System.out.println(weekDay.ordinal();/输出此对象在枚举常量的次序System.out.println(WeekDay.valueOf(WED);/将字符串转化为枚举常量System.out.println(WeekDay.values().length);/获取所以的枚举元素,并打印其长度/定义枚举内部类public enum WeekDaySUN(1),MON,TUE,WED,THI,FRI,SAT;/分号可有可无,但如果下面还有方法或其他成员时,分号不能省。/而且当有其他方法时,必须在这些枚举变量的下方。/无参构造器private Wee

6、kDay()System.out.println(First);/带参数的构造器private WeekDay(int day)System.out.println(Second);多态一、多态的体现1、父类的引用指向了自己子类的对象。 2、父类的引用也可以接收自己的子类对象。如:Animal a = new Cat();其中就将父类型的a引用指向了子类的对象。二、多态的前提1、类与类之间必须有关系,要么继承,要么实现。 2、存在覆盖。父类中有方法被子类重写。3、 多态的特点1、 多态中非静态成员函数的特点。-成员函数在多态调用时,编译看左边,运行看右边。2、多态中成员变量的特点 无论编译和运

7、行,都参考左边(引用变量所属的类)。如:多态中的父类引用调用成员变量时,如果父类和子类有同名的成员变量,那么被调用的是父类中的成员变量。3、多态中静态成员函数的特点无论编译和运行,都参考左边。也就是父类引用在调用静态同名函数时,被调用的是父类中的静态函数。这是因为,当类一被加载,静态函数就随类绑定在了内存中。此时,不需要创建对象,就可以使用类名直接调用。同时,父类中的静态成员函数一般是不被复写的。类在方法区中的分配:分为静态区和非静态区,而关键字this和super在非静态区。/*电脑的运行实例。电脑的运行由主板控制,假设主板只是提供电脑运行,但是没有上网,听歌等功能。而上网、听歌需要硬件的支

8、持。而现在主板上没有网卡和声卡,这时可以定义一个规则,叫PCI,只要符合这个规则的网卡和声卡都可以在主板上使用,这样就降低了主板和网卡、声卡之间的耦合性。用程序体现。*/ 接口PCIinterface PCIvoid open();void close();/网卡实现接口class NetCard implements PCIpublic void open()System.out.println(NetCard_open);public void close()System.out.println(NetCard_close);/声卡实现接口class SoundCard implement

9、s PCIpublic void open()System.out.println(SoundCard_open);public void close()System.out.println(SoundCard_close);class Mainboard/电脑运行public static void run()System.out.println(Mainboard_run);/使用扩展功能public static void usePCI(PCI p)/PCI p = new NetCard()/接口型引用指向自己的子类对象。if(!(p=null)p.open();p.close();c

10、lass Demopublic static void main(String args) Mainboard m =new Mainboard();/电脑运行m.run();/m.usePCI(null);/电脑上网m.usePCI(new NetCard();/电脑听歌m.usePCI(new SoundCard();内部类一、概述 将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类)。 当描述事物时,事物的内部还有事物,该事物用内部类来描述。因为内部事物在使用外部事物的内容。如定义一个描述人的类,而手、心脏等都属于人,然它们又有自己的功能描述,这时可以在人这个描述类中

11、,定义一个描述心脏的类,也就是内部类。二、内部类的访问规则 1、内部类可以直接访问外部类中的成员,包括私有。 之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式:外部类名.this。 2、外部类要访问内部类,必须建立内部类对象。1、当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中。可以直接建立内部类对象。格式: 外部类名.内部类名变量名=外部类对象.内部类对象; 如: Outer.Inner in =new Outer().new Inner();当内部类在外部类中的成员位置上时,可以被成员修饰符所修饰。比如: private:将内部类在外部类中进行封

12、装。 static:内部类就局部static的特性。但是当内部类被static修饰后,只能直接访问外部类中的static成员。出现了访问局限。在外部其他类中,直接访问static内部类的非静态成员的格式为: new外部类名.内部类名().方法名(); 如:new Outer.Inner().function();在外部其他类中,直接访问static内部类的静态成员格式为: 外部类名.内部类名.方法名(); 如:Outer.Inner.function();注意: 1)当内部类中定义了静态成员时,该内部类必须是static的。 2)当外部类中的静态方法访问内部类时,内部类也必须是static的。

13、 3)在实际应用中,内部类通常被定义为private,而很少定义为public。2、内部类定义在局部 内部类定义在外部类中的某个方法中,创建了这个类型的对象时,且仅使用了一次,那么可在这个方法中定义局部类。 1)不可以被成员修饰符修饰。如public、private、static等修饰符修饰。它的作用域被限定在了声明这个局部类的代码块中 2)可以直接访问外部类中的成员,因为还持有外部类中的引用。注意:内部类不可以访问它所在的局部中非最终变量。只能访问被final修饰的局部变量。四、匿名内部类 1、匿名内部类其实就是内部类的简写格式。 2、定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。 特殊情况:因为所以的类都有一个父类Object,所以在定义时也可以用Ob

温馨提示

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

评论

0/150

提交评论