JAVA第四章类的高级特性

上传人:大米 文档编号:588604918 上传时间:2024-09-08 格式:PPT 页数:32 大小:104.50KB
返回 下载 相关 举报
JAVA第四章类的高级特性_第1页
第1页 / 共32页
JAVA第四章类的高级特性_第2页
第2页 / 共32页
JAVA第四章类的高级特性_第3页
第3页 / 共32页
JAVA第四章类的高级特性_第4页
第4页 / 共32页
JAVA第四章类的高级特性_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《JAVA第四章类的高级特性》由会员分享,可在线阅读,更多相关《JAVA第四章类的高级特性(32页珍藏版)》请在金锄头文库上搜索。

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

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

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; 通过类实例访问通过类实例访问不是一个好方法

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

5、为非静态方法class StaticFun static int i = 10; int 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 6静态块静态块如果需要通过计算来初始化静态变量,可以如果需要通过计算来初始化静态变量,可以声明一个静态块。声明一个静态块。

6、静态块仅在该类被加载时执行一次。静态块仅在该类被加载时执行一次。只能初始化类的静态数据成员。只能初始化类的静态数据成员。 class TryInitialization static int values = new int10; /静态数组成员静态数组成员 static for(int i=0; ivalues.length; i+) valuesi = (int)(100.0*Math.random(); 7 7final 关键字关键字/final类类final 修饰符可应用于类、方法和变量。修饰符可应用于类、方法和变量。final在应用于类、方法和变量时意义是不同在应用于类、方法和变量时

7、意义是不同的,但本质是一样的:的,但本质是一样的:final表示不可改变。表示不可改变。 声明为声明为final的类不能被继承。的类不能被继承。final 类示例:类示例: final class TestFinal int i = 7; int j = 1; void f() class Further extends TestFinal final类不能被继承类不能被继承8 8final 方法方法在方法声明中使用在方法声明中使用 final 关关键字向编译器表键字向编译器表明子类不能覆盖此方法明子类不能覆盖此方法。在声明类中,一个在声明类中,一个 final 方法只被实现一次。方法只被实现

8、一次。如果一个类为如果一个类为 final 类,那么它的所有方法类,那么它的所有方法都为隐式的都为隐式的 final 方法方法。class TestFinal final void f() class Further extends TestFinal final void f() final方法不能方法不能被覆盖被覆盖9 9final 变量变量一个变量可以声明为一个变量可以声明为final,这样做的目的是这样做的目的是阻止它的内容被修改。阻止它的内容被修改。声明声明final变量后,只能被初始化一次,然后变量后,只能被初始化一次,然后就不能对其值进行修改就不能对其值进行修改。一个一个fina

9、l变量实质上是一个常量。变量实质上是一个常量。 class FinalDemo public static void main(String args) final int noChange = 20; noChange = 30; final变量不能被变量不能被修改修改1010抽象类抽象类 2-1定义抽象类的目的是提供可由其子类共享定义抽象类的目的是提供可由其子类共享的一般形式。的一般形式。子类可以根据自身需要扩展抽象类。子类可以根据自身需要扩展抽象类。 抽象类不能实例化。抽象类不能实例化。抽象方法没有函数体。抽象方法没有函数体。抽象方法必须在子类中给出具体实现。抽象方法必须在子类中给出具体

10、实现。abstract 修饰符可修饰符可与类和方法一起与类和方法一起使用使用1111抽象类抽象类2-2在以下情况下,某个类将成为抽象类:在以下情况下,某个类将成为抽象类:当一个类的一个或多个方法为抽象方法时。当一个类的一个或多个方法为抽象方法时。当该类为一个抽象类的子类,并且没有为所有当该类为一个抽象类的子类,并且没有为所有抽象方法提供实现细节或方法主体时。抽象方法提供实现细节或方法主体时。当一个类实现一个接口,并且没有为所有抽象当一个类实现一个接口,并且没有为所有抽象方法提供实现细节或方法主体时。方法提供实现细节或方法主体时。1212抽象类示例抽象类示例abstract class Empl

11、oyee int basic = 2000; abstract void salary();/抽象方法抽象方法class Manager extends Employee void salary() System.out.println(薪资等于薪资等于 +basic*5); class Worker extends Employee void salary() System.out.println(薪资等于薪资等于 +basic*2); 抽象方法没有抽象方法没有方法主体方法主体在子类中提供在子类中提供实现实现在子类中提供在子类中提供实现实现1313接口接口一个接口允许一个类从几个接口继承而来

12、。一个接口允许一个类从几个接口继承而来。Java 程序一次只能继承一个类但可以实现程序一次只能继承一个类但可以实现几个接口。几个接口。接口不能有任何具体的方法。接口不能有任何具体的方法。接口也可用来定义可由类使用的一组常量。接口也可用来定义可由类使用的一组常量。接口提供接口提供“is a”关系。关系。 1414创建接口的步骤创建接口的步骤2-1/ / 有方法的接口有方法的接口public interface myinterface public void add(int x, int y);public void volume(int x,int y, int z);/ / 定义程序使用的常量

13、的接口定义程序使用的常量的接口public interface myconstants public static final double price = 1450.00; public static final int counter = 5; 定义一个接口:定义一个接口:1515创建接口的步骤创建接口的步骤2-2编译如下:编译如下:javac myinterface.java用关键字用关键字 implements 实现接口,例如:实现接口,例如:class demo implements myinterface如果有一个以上接口被实现,则用逗号隔开如果有一个以上接口被实现,则用逗号隔开接

14、口名称,如下所示:接口名称,如下所示: class demo implements Mycalc, Mycount1616接口使用示例接口使用示例interface A double g=9.8; void show( );class InterfaceTest public static void main(String args ) B b=new B( ); b.show( ); class B implements A public void show( ) System.out.println(“g=“+g); 1717高级访问控制高级访问控制访问修饰符为:访问修饰符为:-publi

15、c-protected-private如果一个类或类的成员前没有任何访问修如果一个类或类的成员前没有任何访问修饰符时,它们获得缺省的访问权限。饰符时,它们获得缺省的访问权限。1818public 访问修饰符访问修饰符只有在使用只有在使用 public 访问修饰符时,类的访问修饰符时,类的成员才可被同一包或不同包中的所有类成员才可被同一包或不同包中的所有类访问。访问。也就是说,也就是说,public 访问修饰符可以使类的访问修饰符可以使类的特性公用于任何类。特性公用于任何类。 1919缺省访问权限缺省访问权限/protected 访问修饰符访问修饰符缺省的成员可以被同一包中的其他类访问。缺省的成

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

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

18、型,可通过相应的“封装类封装类”来将其来将其“封装封装”。 数据类型数据类型封装类封装类booleanBooleanbyteBytecharCharacterdoubleDoublefloatFloatintIntegerlongLongshortShort2323封装类使用示例封装类使用示例Boolean wrapBool = new Boolean(false);Integer num1 = new Integer (31);Integer num2 = new Integer(3);int sum = num1.intValue() * num2.intValue();intValue(

19、)返回调用对返回调用对象的整型值象的整型值 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)值值 2424内部类内部类内部类为一个类被嵌套定义于另一个类中。内部类为一个类被嵌套定义

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

21、intln(this.name+”); 2626内部类特性内部类特性内部类的类名只能用在外部类或语句块之内内部类的类名只能用在外部类或语句块之内内部类作为外部类的成员内部类作为外部类的成员外部类和内部类各有自己的成员外部类和内部类各有自己的成员内部类可以定义为抽象类型,但需要被其他内部类可以定义为抽象类型,但需要被其他的内部类继承或实现的内部类继承或实现内部类可以是一个接口,但必须由另一个内内部类可以是一个接口,但必须由另一个内部类来实现部类来实现2727静态内部类静态内部类定义为定义为static的内部类称为静态内部类的内部类称为静态内部类静态内部类将自动转为顶层类,即没有超类,静态内部类将

22、自动转为顶层类,即没有超类,并且不能引用外部类成员或其他内部类中的并且不能引用外部类成员或其他内部类中的成员成员只有内部类是静态的,才能声明静态成员只有内部类是静态的,才能声明静态成员2828静态内部类使用示例静态内部类使用示例public class group2 int count; public static class student String name; static int score; public void output() System.out.println(this.name+”); 2929总结总结 2-1类中的静态变量、方法或代码块并不具体类中的静态变量、方法或代

23、码块并不具体到实例,它们可以与类的名称一起使用,到实例,它们可以与类的名称一起使用,而无需创建类的对象来访问类的静态特性。而无需创建类的对象来访问类的静态特性。final 修饰符可应用于类、方法和变量。修饰符可应用于类、方法和变量。 定义抽象类的目的是提供可由其子类共享定义抽象类的目的是提供可由其子类共享的一般形式。的一般形式。接口就是需要由其他类实现的行为模板。接口就是需要由其他类实现的行为模板。 3030总结总结 2-2访问修饰符为:访问修饰符为:-public -protected-private封装类就是封装基本数据类型的类封装类就是封装基本数据类型的类 。内部类指嵌入外部类内的类,在

24、类中定义内部类指嵌入外部类内的类,在类中定义的类称为内部类。的类称为内部类。 3131试验题目试验题目 现实世界中有很多可以用继承描述的关系,现实世界中有很多可以用继承描述的关系,如如dogdog有有namename、colorcolor、weightweight等属性以及等属性以及barkbark、runrun等行为,而等行为,而pekinesepekinese(哈巴狗)哈巴狗)可以描述为可以描述为dogdog的子类。结合你的知识背景,的子类。结合你的知识背景,指出其继承的例子,其中要涉及到抽象方法、指出其继承的例子,其中要涉及到抽象方法、方法重写、方法重载等概念。画出类继承的方法重写、方法重载等概念。画出类继承的层次图,并用层次图,并用javajava语言描述之,再编程运行语言描述之,再编程运行你的程序。你的程序。 3232

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号