《类的高级特性》PPT课件.ppt

上传人:sh****n 文档编号:13158845 上传时间:2020-06-05 格式:PPT 页数:26 大小:413KB
返回 下载 相关 举报
《类的高级特性》PPT课件.ppt_第1页
第1页 / 共26页
《类的高级特性》PPT课件.ppt_第2页
第2页 / 共26页
《类的高级特性》PPT课件.ppt_第3页
第3页 / 共26页
点击查看更多>>
资源描述
接口作业2答案,packageinterfaces.ex5;publicinterfaceEx5voidsayOne();voidsayTwo();voidsayThree();,packageinterfaces.Ex6;importinterfaces.ex5.*;publicclassTestEx5implementsEx5publicvoidsayOne()System.out.println(one);publicvoidsayTwo()System.out.println(two);publicvoidsayThree()System.out.println(three);publicstaticvoidmain(Stringargs)Ex5x=newTestEx5();x.sayOne();x.sayTwo();x.sayThree();,第11章类的高级特性,11.1包11.2final变量11.3final方法11.4final类11.5内部类,11.1包,类名冲突完整的类路径创建包导入类包,类名冲突,Java中每个接口或类都来自一个包,不论是JavaAPI中的类和接口还是自定义的类与接口都需要隶属某一个包,这个包包含相关的类和接口。,包的提出,Java编译器为每一个类或接口生成一个字节码文件(*.class)。为了便于管理数目众多的类和接口,Java语言引入包(Package)的概念,以解决类和接口命名冲突、引用不便、安全性等问题。包(Package)是Java语言提供的组织类和接口的工具,并控制访问权限。即包(Package)是一组相关类和接口的集合。Java编译器把包对应于文件系统的文件夹来管理,因此包中可包含类的定义或子包,其嵌套层数也没有限制。,完整的类路径,一个完整的类名需要包名和类名的组合,任何一个类都隶属于一个包中,只要保证同一包中的类不同名,这样就有效的避免了同名类冲突的情况。,在类中指定包语法格式如下。语法:Package包名在类中创建包时,需要使用package关键字指定包名,当指定包名的类编译后,在讲当前的工作位置中出现相应包名所对应的路径。在类中指定包名时需要将package表达式放置在程序的第一行,它必须是文件中的第一行非注释代码,当使用package关键字为类指定包名之后,包名将会成为类名中的一部分,预示着所有需要使用这个类的人都必须指定全名。,导入类包,1.使用import关键字导入包import关键字的语法格式如下语法:importcom.wsy.*;importcom.wsy.Math在使用import关键字时,可以指定类的完整描述,如果为了使用包中更多的类,可以再使用import关键字指定时在包指定后加上*,这表示可以在程序中使用所有类。,导入包类,2.使用import导入静态包类import关键字除了导入包之外,还可以导入静态成员,这是在JDK5.0以上的版本提供的新功能,导入静态成员可以使程序员更为方便。Import导入静态成员语法格式如下。语法:importstatic静态成员importstaticjava.lang.Math.max;/导入静态成员方法importstaticjava.lang.System.out;/导入静态成员变量,final,final在Java中并不常用,然而它却为我们提供了诸如在C语言中定义常量的功能,不仅如此,final还可以让你控制你的成员、方法或者是一个类是否可被覆写或继承等功能,这些特点使final在Java中拥有了一个不可或缺的地位,也是学习Java时必须要知道和掌握的关键字之一。你可能出于两种理解而需要阻止改变:设计或效率,final,1、final类final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会再被扩展,那么就设计为final类。2、final方法如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。使用final方法的原因有二:第一、把方法锁定,防止任何继承类修改它的意义和实现。第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。3、final变量(常量)用final修饰的成员变量表示常量,值一旦给定就无法改变!final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。,11.2final变量,Final关键字可以使用在变量声明时,标识该变量一旦设定后,就不可以改变该变量的值。Final除了可以修饰基本数据类型的常量外,还可以修饰对象引用。由于数组也可以被看做一个对象引用,所以final可以修饰数组。Final常量用大写字母命名例子S1113要使对象的值不可改变,将常量声明为staticfinal。在装载时对象的变量被初始化,而不是每次创建新对象时被初始化。例子S1114,11.3final方法,定义为final的方法不能被重写。final可以防止任何子类修改该类的定义与实现方法,同时定义为final的方法执行效率要高于非final方法。例子:S1115注:父类中被定义为privatefinal的方法无法被子类覆盖,因为父类是private修饰符,子类将无法访问该方法。如果父类与子类方法同名,那么认为子类的方法是单独生成的一个新的方法而已。,11.4final类,定义为final的类不能被继承,类中的所有方法都被隐式设置为final形式。但是final类中的成员变量可以被定义为final或非final形式。final类的语法格式如下语法:final类名finalclass只能实例化,不能被继承。与Abstractclass正好相反:只能被继承,不能实例化。例子S1116,11.5内部类,一个类嵌套定义于了另一个类中,称为内部类,也称作嵌套类,包含内部类的类称为外部类,与一般的类相同,内部类可以具有实例变量和实用方法。使用java内部类,有如下好处:1.隐藏你不想让别人知道的操作,也即封装性。2.非静态内部类可以访问外部类的内容,甚至私有成员变量3.可以实现多继承4.减少命名的冲突,内部类,成员内部类局部内部类匿名类静态内部类内部类的继承,成员内部类,在一个类中使用内部类可以在内部类中直接存取其所在类的私有成员变量。成员内部类的语法格式如下。语法:publicclassOuterClass/外部类privateclassInnerClass/内部类/例子S1117,内部类和外部类访问的规则:,内部类作为外部类的成员,可以使用所有的四种权限控制符。private内部类可以隐藏在外部类的里面,不被其它类访问。内部类的方法能够访问外部类的成员(包括private修饰的成员),且不必实例化外部类。这是我们使用内部类的一个重要原因。反过来则不行。外部类访问内部类的成员必须先实例化内部类,通过内部类对象来访问。Java规定在非静态内部类中不能定义静态成员,只能定义非静态成员,但在静态内部类中既可以定义静态成员,又可以定义非静态成员。如果内部类中有和外部类同名的变量或方法,则内部类的变量和方法将获得比外部类的变量和方法更高的优先级。,内部类的方法能够访问外部类的成员(包括private修饰的成员),且不必实例化外部类。这是我们使用内部类的一个重要原因。反过来则不行。外部类访问内部类的成员必须先实例化内部类,通过内部类对象来访问。publicclassOuterprivateintvarOuter=100;classInnerintvarInner=200;publicvoidshowOuter()System.out.println(varOuter);publicvoidshowInner()Inneri=newInner();System.out.println(i.varInner);,内部类和外部类访问的规则:,内部类和外部类访问的规则:,1.从本类中访问内部类在Outer内访问Inner,只需如下:Innerin=newInner();2.从其他类访问内部类在Outer外访问Inner,必须如下:Outero=newOuter();Outer.Inneroi=o.newInner();,2.内部类向上转型为接口,外部提供一个接口,在接口中声明一个方法。如果在接口的内部类中实现该接口的方法,就可以定义多个内部类以不同的方式实现接口中同一个方法,而在一般类中是不能多次实现接口中同一个方法的。例子S1118如果某个类继承了外部类,由于内部的权限不可以向下转型为内部类InnerClass,同时,也不能访问f()方法,但是却可以访问接口中的f()方法。这样,很好地对继承该类的子类隐藏了实现细节,仅为编写子类的人留下一个接口和一个外部类,同时,也可以调用f()方法,但是f()方法的具体实现过程却被很好地隐藏了,这就是内部类最基本的用途。,3.使用this关键字获取内部类与外部类的引用,在内部类中使用this.x语句可以调用内部成员变量x,而使用外部类名称后跟一个点操作符和this关键字便可获取外部类的一个引用。例:s1119publicclassTheSameNameprivateintx;privateclassInnerprivateintx=9;publicvoiddoit(intx)x+;this.x+;TheSameName.this.x+;,局部内部类,内部类不仅仅可以在类中进行定义,在类的局部位置也可以定义内部类,例如在类的方法中或任意的作用域中可以定义内部类。例子:S11110interfaceOutInterface2/定义一个接口classOuterClass3publicOutInterface2doit(finalStringx)/doit()方法参数为final类型classInnerClass2implementsOutInterface2/在doit()方法中定义一个内部类InnerClass2(Strings)s=x;System.out.println(s);returnnewInnerClass2(doit);内部类编译后生成class文件有2个:OuterClass3.class,OuterClass3$1InnerClass2.class内部类的命名规则:外部类名$内部类名,匿名内部类,匿名内部类:没有类名的内部类。匿名内部类的所有实现代码都需要在大括号之间进行编写。匿名类语法格式如下。语法:returnnewA()/内部类体;,匿名内部类的一个例子,interfaceOutInterface3/定义一个接口publicclassOutclass4publicOutInterface3doit()returnnewOutInterface3()privateinti=0;publicintgetValue()returni;匿名内部类编译后生成class文件有2个:OuterClass4.class,Outclass4$1.class外部类名$数字,app.addWindowListener(newWindowAdapter()publicvoidwindowClosing(WindowEvente)System.exit(0););,images.addItemListener(newItemListener()publicvoiditemStateChanged(ItemEvente)label.setIcon(iconsimages.getSelectedIndex(););,匿名内部类的两个例子,可以实现多重继承,packagebeyondx;publicclassExample1publicStringname()returnluffyke;packagebeyondx;publicclassExample2publicintage()return25;,packagebeyondx;publicclassMainExampleprivateclasstest1extendsExample1publicStringname()returnsuper.name();privateclasstest2extendsExample2publicintage()returnsuper.age();publicStringname()returnnewtest1().name();publicintage()returnnewtest2().age();publicstaticvoidmain(Stringargs)MainExamplemi=newMainExample();System.out.println(Name:+mi.name();System.out.println(Age:+mi.age();,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!