JAVA第四章类的高级特性_第1页
JAVA第四章类的高级特性_第2页
JAVA第四章类的高级特性_第3页
JAVA第四章类的高级特性_第4页
JAVA第四章类的高级特性_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、Version 1.0类的高级特性类的高级特性类是对象的抽象,将对象的属性和行为类是对象的抽象,将对象的属性和行为抽抽象为类中的数据和方法。象为类中的数据和方法。extends 关键字用于继承类。关键字用于继承类。super关键字用来解决如何直接访问或初始关键字用来解决如何直接访问或初始化从父类继承来的属性化从父类继承来的属性 。构造函数名称与类的名称相同,且没有返构造函数名称与类的名称相同,且没有返回类型。回类型。方法重载和方法覆盖是方法重载和方法覆盖是Java实现多态性机制实现多态性机制的方式。的方式。 掌握类的掌握类的静态成员静态成员 掌握掌握final关键字用法关键字用法 掌握掌握抽象

2、类抽象类的定义和用法的定义和用法 掌握掌握接口接口的定义和用法的定义和用法 掌握掌握高级访问控制高级访问控制 了解了解内部类内部类的概念的概念 类中的静态变量、方法或代码块属于类,而类中的静态变量、方法或代码块属于类,而不属于某个特定的对象。不属于某个特定的对象。 类的静态成员可以与类的名称一起使用,而类的静态成员可以与类的名称一起使用,而无需创建类的对象。无需创建类的对象。 静态变量或方法也称为类的变量或方法。静态变量或方法也称为类的变量或方法。用用static修饰符修饰,修饰符修饰,可以是变量、方法或代可以是变量、方法或代码块码块 不管创建了类的多少实例,整个类中静态变不管创建了类的多少实

3、例,整个类中静态变量的副本只有一个。量的副本只有一个。 引用静态变量的方法:引用静态变量的方法:- 通过引用类的任一实例通过引用类的任一实例- 通过类的名称通过类的名称class StaticDemo static int x = 0; StaticDemo()x+;StaticDemo d1 = new StaticDemo();StaticDemo d2 = new StaticDemo();d1.x = 100 ;d2.x = 200;testVariable = d1.x; 通过类实例访问通过类实例访问不是一个好方法不是一个好方法StaticDemo d1 = new StaticDe

4、mo();StaticDemo d2 = new StaticDemo(); StaticDemo.x = 100;StaticDemo.x = 200;testVariable = StaticDemo.x; 声明为声明为static的变量实质的变量实质上就是全局变量上就是全局变量通过类名访问通过类名访问 与静态方法相关的几个要点:与静态方法相关的几个要点:类的静态方法只能访问其他的静态成员类的静态方法只能访问其他的静态成员静态方法没有静态方法没有this静态方法不能被覆盖为非静态方法静态方法不能被覆盖为非静态方法class StaticFun static int i = 10; int

5、j; static void setValue(int x) j=x;/出错出错 System.out.println( + i); 不能访问非静态变量不能访问非静态变量j,可以访问静态变量可以访问静态变量iclass StaticTest static void test() class Staticex extends StaticTest void test() /出错出错 如果需要通过计算来初始化静态变量,可以如果需要通过计算来初始化静态变量,可以声明一个静态块。声明一个静态块。 静态块仅在该类被加载时执行一次。静态块仅在该类被加载时执行一次。 只能初始化类的静态数据成员。只能初始化类

6、的静态数据成员。 class TryInitialization static int values = new int10; /静态数组成员静态数组成员 static for(int i=0; ivalues.length; i+) valuesi = (int)(100.0*Math.random(); final 修饰符可应用于类、方法和变量。修饰符可应用于类、方法和变量。 final在应用于类、方法和变量时意义是不同在应用于类、方法和变量时意义是不同的,但本质是一样的:的,但本质是一样的:final表示不可改变。表示不可改变。 声明为声明为final的类不能被继承。的类不能被继承。 f

7、inal 类示例:类示例: java.lang.String final class TestFinal int i = 7; int j = 1; void f() class Further extends TestFinal final类不能被继承类不能被继承 在方法声明中使用在方法声明中使用 final 关关键字向编译器表键字向编译器表明子类不能覆盖此方法明子类不能覆盖此方法。 在声明类中,一个在声明类中,一个 final 方法只被实现一次。方法只被实现一次。 如果一个类为如果一个类为 final 类,那么它的所有方法类,那么它的所有方法都为隐式的都为隐式的 final 方法方法。cl

8、ass TestFinal final void f() class Further extends TestFinal final void f() final方法不能方法不能被覆盖被覆盖 一个变量可以声明为一个变量可以声明为final,这样做的目的是这样做的目的是阻止它的内容被修改。阻止它的内容被修改。 声明声明final变量后,只能被初始化一次,然后变量后,只能被初始化一次,然后就不能对其值进行修改就不能对其值进行修改。 一个一个final变量实质上是一个常量。变量实质上是一个常量。 class FinalDemo public static void main(String args)

9、 final int noChange = 20; noChange = 30; final变量不能被变量不能被修改修改 定义抽象类的目的是提供可由其子类共享定义抽象类的目的是提供可由其子类共享的一般形式。的一般形式。 子类可以根据自身需要扩展抽象类。子类可以根据自身需要扩展抽象类。 抽象类不能实例化。抽象类不能实例化。 抽象方法没有函数体。抽象方法没有函数体。 抽象方法必须在子类中给出具体实现。抽象方法必须在子类中给出具体实现。abstract 修饰符可修饰符可与类和方法一起与类和方法一起使用使用 在以下情况下,某个类将成为抽象类:在以下情况下,某个类将成为抽象类: 当一个类的一个或多个方法

10、为抽象方法时。当一个类的一个或多个方法为抽象方法时。当该类为一个抽象类的子类,并且没有为所有当该类为一个抽象类的子类,并且没有为所有抽象方法提供实现细节或方法主体时。抽象方法提供实现细节或方法主体时。当一个类实现一个接口,并且没有为所有抽象当一个类实现一个接口,并且没有为所有抽象方法提供实现细节或方法主体时。方法提供实现细节或方法主体时。abstract class Employee int basic = 2000; abstract void salary();/抽象方法抽象方法class Manager extends Employee void salary() System.out.

11、println(薪资等于薪资等于 +basic*5); class Worker extends Employee void salary() System.out.println(薪资等于薪资等于 +basic*2); 抽象方法没有抽象方法没有方法主体方法主体在子类中提供在子类中提供实现实现在子类中提供在子类中提供实现实现 一个接口允许一个类从几个接口继承而来。一个接口允许一个类从几个接口继承而来。 Java 程序一次只能继承一个类但可以实现程序一次只能继承一个类但可以实现几个接口。几个接口。 接口不能有任何具体的方法。接口不能有任何具体的方法。 接口也可用来定义可由类使用的一组常量。接口也

12、可用来定义可由类使用的一组常量。 接口提供接口提供“is a”关系。关系。 / / 有方法的接口有方法的接口public interface myinterface public void add(int x, int y);public void volume(int x,int y, int z);/ / 定义程序使用的常量的接口定义程序使用的常量的接口public interface myconstants public static final double price = 1450.00; public static final int counter = 5; 定义一个接口:定义一

13、个接口: 编译如下:编译如下:javac myinterface.java 用关键字用关键字 implements 实现接口,例如:实现接口,例如:class demo implements myinterface 如果有一个以上接口被实现,则用逗号隔开如果有一个以上接口被实现,则用逗号隔开接口名称,如下所示:接口名称,如下所示: class demo implements Mycalc, Mycountinterface A double g=9.8; void show( );class InterfaceTest public static void main(String args )

14、 B b=new B( ); b.show( ); class B implements A public void show( ) System.out.println(“g=“+g); 访问修饰符为:访问修饰符为:- public- protected- private 如果一个类或类的成员前没有任何访问修如果一个类或类的成员前没有任何访问修饰符时,它们获得缺省的访问权限。饰符时,它们获得缺省的访问权限。 只有在使用只有在使用 public 访问修饰符时,类的访问修饰符时,类的成员才可被同一包或不同包中的所有类成员才可被同一包或不同包中的所有类访问。访问。 也就是说,也就是说,public

15、 访问修饰符可以使类的访问修饰符可以使类的特性公用于任何类。特性公用于任何类。 缺省的成员可以被同一包中的其他类访问。缺省的成员可以被同一包中的其他类访问。 protected 访问修饰符允许类本身、同一包访问修饰符允许类本身、同一包中的所有类和不同包中的子类访问中的所有类和不同包中的子类访问 。 如果希望一个成员在当前包外可见,但仅如果希望一个成员在当前包外可见,但仅仅是成员所在类的子类直接可见,就要使仅是成员所在类的子类直接可见,就要使用用 protected 修饰该成员。修饰该成员。 private 访问修饰符是限制性最大的一种访访问修饰符是限制性最大的一种访问修饰符。问修饰符。 被声明

16、为被声明为private的成员只能被此类中的其的成员只能被此类中的其他成员访问,不能被类外看到。他成员访问,不能被类外看到。 继承体系结构中最高级别的类决不会被继承体系结构中最高级别的类决不会被声明为声明为 private 类。类。 访问控制访问控制private成员成员缺省的成员缺省的成员protected成员成员public成员成员同一类中成员同一类中成员 同一包中其他类同一包中其他类 不同包中子类不同包中子类 不同包中非子类不同包中非子类 基本数据类型不是对象层次基本数据类型不是对象层次结构的组成部分。有时需要结构的组成部分。有时需要象处理对象一样处理这些基象处理对象一样处理这些基本数据

17、类型,可通过相应的本数据类型,可通过相应的“封装类封装类”来将其来将其“封装封装”。 数据类型数据类型封装类封装类booleanBooleanbyteBytecharCharacterdoubleDoublefloatFloatintIntegerlongLongshortShortBoolean wrapBool = new Boolean(false);Integer num1 = new Integer (31);Integer num2 = new Integer(3);int sum = Value() * Value();intValue()返回调用

18、对返回调用对象的整型值象的整型值 class CmdArg public static void main(String args) int sum = 0; for(int cnt = 0; cnt args.length; cnt+) sum+=Integer.parseInt(argscnt); System.out.println(和为:和为:+sum); parseInt()parseInt()方法将执行方法将执行从字符串转换成与之相从字符串转换成与之相应的整型(应的整型(intint)值值 内部类为一个类被嵌套定义于另一个类中。内部类为一个类被嵌套定义于另一个类中。 在类中定义的类

19、称为在类中定义的类称为内部类内部类。 内部类之外的类称为内部类之外的类称为外部类外部类。 内部类可以访问其外部类的所有变量和方内部类可以访问其外部类的所有变量和方法,并能够以和外部类的其他非静态成员法,并能够以和外部类的其他非静态成员相同的方式直接引用它们。相同的方式直接引用它们。 内部类完全在其包围类的范围之内。内部类完全在其包围类的范围之内。public class group1 int count; public class student String name; public void output() System.out.println(+”); 内部类的类名只

20、能用在外部类或语句块之内内部类的类名只能用在外部类或语句块之内 内部类作为外部类的成员内部类作为外部类的成员 外部类和内部类各有自己的成员外部类和内部类各有自己的成员 内部类可以定义为抽象类型,但需要被其他内部类可以定义为抽象类型,但需要被其他的内部类继承或实现的内部类继承或实现 内部类可以是一个接口,但必须由另一个内内部类可以是一个接口,但必须由另一个内部类来实现部类来实现 定义为定义为static的内部类称为静态内部类的内部类称为静态内部类 静态内部类将自动转为顶层类,即没有超类,静态内部类将自动转为顶层类,即没有超类,并且不能引用外部类成员或其他内部类中的并且不能引用外部类成员或其他内部类中的成员成员 只有内部类是静态的,才能声明静态成员只有内部类是静态的,才能声明静态成员public class group2 int count; public static class student String name; static int score; public void output() System.out.println(this

温馨提示

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

评论

0/150

提交评论