您好,欢迎访问三七文档
第四章类的高级特性回顾•类是对象的抽象,将对象的属性和行为抽象为类中的数据和方法。•extends关键字用于继承类。•super关键字用来解决如何直接访问或初始化从父类继承来的属性。•构造函数名称与类的名称相同,且没有返回类型。•方法重载和方法覆盖是Java实现多态性机制的方式。目标•掌握类的静态成员•掌握final关键字用法•掌握抽象类的定义和用法•掌握接口的定义和用法•掌握高级访问控制•了解内部类的概念类的静态成员•类中的静态变量、方法或代码块属于类,而不属于某个特定的对象。•类的静态成员可以与类的名称一起使用,而无需创建类的对象。•静态变量或方法也称为类的变量或方法。用static修饰符修饰,可以是变量、方法或代码块静态变量•不管创建了类的多少实例,整个类中静态变量的副本只有一个。•引用静态变量的方法:-通过引用类的任一实例-通过类的名称classStaticDemo{staticintx=0;StaticDemo(){x++;}}StaticDemod1=newStaticDemo();StaticDemod2=newStaticDemo();d1.x=100;d2.x=200;testVariable=d1.x;通过类实例访问不是一个好方法StaticDemod1=newStaticDemo();StaticDemod2=newStaticDemo();StaticDemo.x=100;StaticDemo.x=200;testVariable=StaticDemo.x;声明为static的变量实质上就是全局变量通过类名访问静态方法•与静态方法相关的几个要点:–类的静态方法只能访问其他的静态成员–静态方法没有this–静态方法不能被覆盖为非静态方法classStaticFun{staticinti=10;intj;staticvoidsetValue(intx){j=x;//出错System.out.println(+i);}}不能访问非静态变量j,可以访问静态变量iclassStaticTest{staticvoidtest(){}}classStaticexextendsStaticTest{voidtest(){}//出错}静态块•如果需要通过计算来初始化静态变量,可以声明一个静态块。•静态块仅在该类被加载时执行一次。•只能初始化类的静态数据成员。classTryInitialization{staticint[]values=newint[10];//静态数组成员static{for(inti=0;ivalues.length;i++)values[i]=(int)(100.0*Math.random());}}final关键字/final类•final修饰符可应用于类、方法和变量。•final在应用于类、方法和变量时意义是不同的,但本质是一样的:final表示不可改变。•声明为final的类不能被继承。•final类示例:java.lang.StringfinalclassTestFinal{inti=7;intj=1;voidf(){}}classFurtherextendsTestFinal{}final类不能被继承final方法•在方法声明中使用final关键字向编译器表明子类不能覆盖此方法。•在声明类中,一个final方法只被实现一次。•如果一个类为final类,那么它的所有方法都为隐式的final方法。classTestFinal{finalvoidf(){}}classFurtherextendsTestFinal{finalvoidf(){}}final方法不能被覆盖final变量•一个变量可以声明为final,这样做的目的是阻止它的内容被修改。•声明final变量后,只能被初始化一次,然后就不能对其值进行修改。•一个final变量实质上是一个常量。classFinalDemo{publicstaticvoidmain(Stringargs[]){finalintnoChange=20;noChange=30;}}final变量不能被修改抽象类2-1•定义抽象类的目的是提供可由其子类共享的一般形式。•子类可以根据自身需要扩展抽象类。•抽象类不能实例化。•抽象方法没有函数体。•抽象方法必须在子类中给出具体实现。abstract修饰符可与类和方法一起使用抽象类2-2•在以下情况下,某个类将成为抽象类:–当一个类的一个或多个方法为抽象方法时。–当该类为一个抽象类的子类,并且没有为所有抽象方法提供实现细节或方法主体时。–当一个类实现一个接口,并且没有为所有抽象方法提供实现细节或方法主体时。抽象类示例abstractclassEmployee{intbasic=2000;abstractvoidsalary();//抽象方法}classManagerextendsEmployee{voidsalary(){System.out.println(薪资等于+basic*5);}}classWorkerextendsEmployee{voidsalary(){System.out.println(薪资等于+basic*2);}}抽象方法没有方法主体在子类中提供实现在子类中提供实现接口•一个接口允许一个类从几个接口继承而来。•Java程序一次只能继承一个类但可以实现几个接口。•接口不能有任何具体的方法。•接口也可用来定义可由类使用的一组常量。•接口提供“isa”关系。创建接口的步骤2-1//有方法的接口publicinterfacemyinterface{publicvoidadd(intx,inty);publicvoidvolume(intx,inty,intz);}//定义程序使用的常量的接口publicinterfacemyconstants{publicstaticfinaldoubleprice=1450.00;publicstaticfinalintcounter=5;}•定义一个接口:创建接口的步骤2-2•编译如下:javacmyinterface.java•用关键字implements实现接口,例如:classdemoimplementsmyinterface•如果有一个以上接口被实现,则用逗号隔开接口名称,如下所示:classdemoimplementsMycalc,Mycount接口使用示例interfaceA{doubleg=9.8;voidshow();}classInterfaceTest{publicstaticvoidmain(Stringargs[]){Bb=newB();b.show();}}classBimplementsA{publicvoidshow(){System.out.println(“g=“+g);}}高级访问控制•访问修饰符为:-public-protected-private•如果一个类或类的成员前没有任何访问修饰符时,它们获得缺省的访问权限。public访问修饰符•只有在使用public访问修饰符时,类的成员才可被同一包或不同包中的所有类访问。•也就是说,public访问修饰符可以使类的特性公用于任何类。缺省访问权限/protected访问修饰符•缺省的成员可以被同一包中的其他类访问。•protected访问修饰符允许类本身、同一包中的所有类和不同包中的子类访问。•如果希望一个成员在当前包外可见,但仅仅是成员所在类的子类直接可见,就要使用protected修饰该成员。private访问修饰符•private访问修饰符是限制性最大的一种访问修饰符。•被声明为private的成员只能被此类中的其他成员访问,不能被类外看到。•继承体系结构中最高级别的类决不会被声明为private类。高级访问控制总结访问控制private成员缺省的成员protected成员public成员同一类中成员同一包中其他类×不同包中子类××不同包中非子类×××封装类基本数据类型不是对象层次结构的组成部分。有时需要象处理对象一样处理这些基本数据类型,可通过相应的“封装类”来将其“封装”。数据类型封装类booleanBooleanbyteBytecharCharacterdoubleDoublefloatFloatintIntlongLongshortShort封装类使用示例BooleanwrapBool=newBoolean(false);Integernum1=newInteger(31);Integernum2=newInteger(3);intsum=num1.intValue()*num2.intValue();intValue()返回调用对象的整型值classCmdArg{publicstaticvoidmain(Stringargs[]){intsum=0;for(intcnt=0;cntargs.length;cnt++)sum+=Integer.parseInt(args[cnt]);System.out.println(和为:+sum);}}parseInt()方法将执行从字符串转换成与之相应的整型(int)值内部类•内部类为非静态的嵌套类。•在类中定义的类称为内部类。•内部类之外的类称为外部类。•内部类可以访问其外部类的所有变量和方法,并能够以和外部类的其他非静态成员相同的方式直接引用它们。•内部类完全在其包围类的范围之内。总结2-1•类中的静态变量、方法或代码块并不具体到实例,它们可以与类的名称一起使用,而无需创建类的对象来访问类的静态特性。•final修饰符可应用于类、方法和变量。•定义抽象类的目的是提供可由其子类共享的一般形式。•接口就是需要由其他类实现的行为模板。总结2-2•访问修饰符为:-public-protected-private•封装类就是封装基本数据类型的类。•内部类指嵌入外部类内的类,在类中定义的类称为内部类。
本文标题:4.类的高级结构
链接地址:https://www.777doc.com/doc-4052100 .html