《Java面向对象高级编程.ppt》由会员分享,可在线阅读,更多相关《Java面向对象高级编程.ppt(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java 基础培训第6章 Java面向对象高级编程16.1.1 类的继承-继承的概念继承是程序中两个类间的一种关系指明继承关系后,父类中的属性(成员)就无须在子类中重复描述,从而实现了一定程度的代码的重用在在Java的继承层次中,一个父类可以有多个直接子类,但一的继承层次中,一个父类可以有多个直接子类,但一个子类只能有一个直接父类,即个子类只能有一个直接父类,即Java不支持多重继承不支持多重继承类:A(继承)成员方法成员属性类:B直接超类、直接父类直接超类、直接父类子类、次类、衍生类子类、次类、衍生类26.1.2 类的继承-类继承的实现继承的实现格式:修饰符 class 新定义的类名 ext
2、ends 父类名例:class SubRectangleA extends RectangleA子类继承父类的原则直接子类继承那些被声明为public或protected的直接父类成员。直接子类继承同一包中父类里未被访问控制符修饰(默认的friendly)的成员变量和成员方法。子类不能继承父类中被private修饰的成员变量和成员方法。若子类中声明了一个与父类中同名的成员变量或成员方法,则子类不再继承该父类中的该同名的成员变量或成员方法。下页介绍构造方法的继承36.1.2 类的继承-类继承的实现构造方法的继承若父类是无参数的构造方法,则子类无条件地继承该构造方法。若子类无自己的构造方法,则它将
3、继承父类的无参数构造方法作为自己的构造方法;若子类有自己的构造方法,则在创建子类对象时,它将先执行继承自父类的无参数构造方法,然后再执行自己的构造方法。若父类是有参数的构造方法,子类可以通过在自己的构造方法中使用super关键字来调用它,但这个调用语句必须是子类构造方法的第一个可执行语句。46.1.3 类的继承-变量的隐藏子类对从父类那里继承来的变量重新加以定义称为变量的隐藏。当在子类中定义了与父类中同名的成员变量时,若在子类中访问此变量,则父类中的同名变量被隐藏,访问的是子类中定义的同名变量,好像此变量在父类中不存在一样。如果一定要引用父类中这个同名变量,可以使用super关键字来指示。56
4、.1.4 类的继承-方法的覆盖子类继承父类后可以定义自己的成员变量和方法,当子类定义了与父类中同名的方法时,则父类中的方法被覆盖,即方法的结果是子类方法的执行结果。66.1.4 类的继承-super和thisthis 代表它所在的类本身的实例对象区分形参名及成员变量名可用this来调用它所在的类本身的构造方法super代表它所在类的直接父类对象访问父类的成员变量及方法调用父类的构造方法76.2.1 类的多态-方法的重载在同一个类中,以相同的名字定义多个方法,只是参数列表不同,即为方法的重载。它实现了Java编译时的多态性(静态多态性)。也就是说,程序可以按参数决定调用对应方法,而此决定是由编译
5、器来做的,即在调用时,Java将根据实参个数或参数类型选择匹配的方法。86.3.1 接口-接口的概念接口又称界面,英文名称为interface,它是用来组织应用中的各类并调节它们的相互关系的一种结构,是用来实现类间多重继承的结构。Java中的接口是一种特殊的类,它定义了若干抽象方法和常量,形成一个属性集合,该属性集合通常代表了某一组功能的实现。多重继承:是指一个子类可以有一个以上的直接父类,该子类可以继承它所有直接父类的成员。96.3.2 接口-接口的声明格式:public interface 接口名extends 父接口名列表 /接口体 /常量域声明 public static final
6、域类型 名称=常量值;/抽象方法的声明public abstract native 方法返回值类型 方法名(参数列表)throws 异常列表106.3.2 接口-接口的声明interface是定义接口的关键字。接口名只要符合Java对标识符的规定即可。接口的访问控制符只有一个,即public,用此修饰的接口为公共接口,可以被所有类和接口使用,而没有被public修饰的接口则只能被同一个包中的其他类和接口利用。接口具有继承性。定义一个接口时可以通过extends声明该新接口是某个已经存在的父接口的派生接口,它将继承父接口的所有属性和方法。与类不同的是一个接口可以有一个以上的父接口,它们之间用逗号
7、分隔,形成父接口列表。新接口将继承所有父接口中的属性和方法。接口体的声明是定义接口的重要部分。接口体由两部分组成,一部分是对接口中属性的声明,另一部分是对接口中方法的声明。接口中的所有属性都必须是public static final修饰的,这是系统默认的规定。所以接口属性也可以没有任何修饰符,其效果完全相同。接口中的所有方法都必须是抽象方法。116.3.3 接口-接口的实现一个类要实现某个或某几个接口时,有如下的步骤和注意事项:在类的声明部分,用implements关键字声明该类将要实现哪些接口。如果实现某接口的类不是abstract的抽象类,则在类的定义部分必须实现指定接口的所有抽象方法,
8、即为所有抽象方法定义方法体,而且方法头部分应该与接口中的定义完全一致,即有完全相同的返回值和参数列表。如果实现某接口的类是抽象类,则它可以不实现该接口所有的方法,但是对于这个抽象类任何一个非抽象的子类而言,它们父类所实现的接口中的所有抽象方法都必须有实在的方法体。这些方法体可以来自抽象的父类,也可以来自子类本身,但是不允许存在未被实现的接口方法。126.3.3 接口-接口的实现一个类要实现某个或某几个接口时,有如下的步骤和注意事项:一个类在实现某接口的抽象方法时,必须使用完全相同的方法头。如果所实现的方法与抽象方法有相同的方法名和不同的参数列表,则只是重载一个新的方法,而不是实现已有的抽象方法
9、。接口的抽象方法,其访问限制符都已指定是public,所以类在实现方法时,必须显式地使用public修饰符,否则将被系统警告为缩小了接口中定义的方法和访问控制范围。136.4 包包将类和接口封装在一起,便于在量类和接口的管理,并有利于类和接口的安全。在同一个包中不允许出现同名类,不同包中可以存在同名类。6.4.2 包的引用导入包的关键字import在java程序中,如果有package语句,则import语句紧接在其后,否则import语句应该在程序首位。如果没有import语句,则使用某个包中的类时,需要类的全名来引用。例如:java.awt.Label prompt=new java.aw
10、t.Label(“请输入”);146.4.1 包-包的创建package com.test.something;必须和目录结构相吻合156.4.2 包-包的引用导入包的关键字import在java程序中,如果有package语句,则import语句紧接在其后,否则import语句应该在程序首位。如果没有import语句,则使用某个包中的类时,需要类的全名来引用。例如:java.awt.Label prompt=new java.awt.Label(“请输入”);166.4.2 包-包的引用 import 包名;import java.awt;awt.Label prompt=new awt.L
11、abel(“请输入”);import 包名.类名;import java.awt.Label;Label prompt=new Label(“请输入”);import 包名.*;import java.awt.*;Label prompt=new Label(“请输入”);说明:这种形式使得包中的所有类都可以被直接用类名来访问,但同时会浪费内存的开销。176.5.1 Java的类库-类库简介为了简化面向对象编写程序的过程,Java系统事先设计并实现了一些体现了常用功能的标准类,如用于输入/输出的类、用于数学运算的类、用于图形用户界面设计的类、用于网络处理的类等。这些系统标准类根据实现的功能不同
12、,可以划分成不同的集合,每个集合是一个包,合称为类库。类库以包的形式组织,是包的集合。下页介绍常见包:186.5.1 Java的类库-类库简介java.lang包 java.lang包是Java语言的核心类库,包含运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字串处理、线程、异常处理类等。每个Java程序运行时,系统都会自动导入java.lang包,所以这个包的加载是默认的,不需要用import语句来专门导入。java.io包 java.io包是Java语言的标准输入/输出类库,包含了实现Java程序与操作系统、用户界面以及与其他Java程序做数据交互所使用的类,如基本输入/
13、输出流、文件输入/输出流、过滤输入/输出流、管道输入/输出流等。凡是需要完成与操作系统有关的较低层的输入/输出操作的Java程序,都用到这个包。java.util包 java.util包中包括了Java语言中一些低级的实用工具,如处理时间的Date类、处理变长数组的Vector类等,使用它们,开发者可以更方便、快捷地编程。196.5.1 Java的类库-类库简介java.awt包 java.awt包是Java语言用来构建图形用户界面(GUI)的类库,它包括了许多界面元素和资源,主要在三个方面提供界面设计支持:低级绘图操作,如Graphics类等;图形界面组件和布局管理,如Checkbox类、C
14、ontainer类、LayoutManager接口等;以及界面用户交互控制和事件响应,如Event类。利用java.awt包,开发人员可以很方便地编写出美观、方便标准化的应用程序界面。javax.swing包 javax.swing包提供了创建图形用户界面元素的类,通过这些元素,编程者可以控制所写的Applet或应用程序的外观界面。该包中包含定义窗口、对话框、按钮、复选框、列表、菜单、滚动条和文本域的类,用此包来实现图形用户界面比java.awt包要方便、美观。包 包是Java语言用来实现网络功能的类库,如URL、Socket类等。206.5.2 Java的类库-语言基础类库Object类 O
15、bject类是Java程序中所有类的直接或间接父类,也是类库中所有类的父类。所有其他类都是从Object 类派生出来的,所以Object类包含了所有Java类的公共属性,其中较主要的有以下一些方法:protected Object clone()用来生成当前对象的一个备份,并返回这个复制对象。public boolean equals(Object obj)用来比较两个对象是否相同,是则返回true。public final class getClass()用来获取当前对象所属的类信息,返回class对象。protected void finalize()用来定义回收当前对象时所需完成的清理工
16、作。public String toString()用来返回当前对象本身的有关信息,按字符串对象返回。216.5.2 Java的类库-语言基础类库数据类型类 在第2章中已经介绍了Java的基本数据类型,如int、double、char、long等。数据类型类与基本数据类型密切相关,每一个数据类型类都对应了一个基本数据类型,它的名字也与这个基本数据类型的名字相似不同的是数据类型类是一个类,有自己的方法,这些方法主要用来操作和处理它所对应的基本数据类型量。下页介绍数据类型类中的Integer226.5.2 Java的类库-语言基础类库Integer类中定义了MAX_VALUE和MIN_VALUE两
17、个属性及一系列的方法1:1 MAX_VALUE域和MIN_VALUE域分别规定了int整型量的最大值和最小值。2 构造方法:public Integer(int value)和public Integer(String s)可以分别利用一个基本数据类型int量和一个字符串对象来生成一个Integer对象。3 数据类型转换方法分别将当前对象所对应的int量转换成其他基本数据类型的量并返回转换后的值:public double doubleValue()public int intValue()public long longValue()236.5.2 Java的类库-语言基础类库Integer
18、类中定义了MAX_VALUE和MIN_VALUE两个属性及一系列的方法2:4 字符串与int量相互转化的方法。public String toString()方法将当前Integer 对象对应的int量转化成字符串。public static int parseInt(String s)方法是类的方法,它无需创建Integer类对象,就可以方便地将字符串转化成int量。5 public static Integer valueOf(String s)方法是类方法它将一个字符串转化成一个Integer对象,这个对象对应的int数值与字符串表示的数值一致。例如,下面的语句先使用valueOf()方
19、法将字符串转化成Integer对象,再调用这个对象的intValue()方法返回其对应的int数值,其作用与上一语句完全相同,但是在处理过程中会生成一个临时的Integer对象:int I=Integer.valueOf(1234).intValue();246.5.2 Java的类库-语言基础类库Math类 Math类是Java中定义的数学函数类,它提供了基本的数学运算。Math是一个final类,含有基本数学运算的方法,如指数、幂运算,取对数、平方根及三角函数等。具体使用请参考Java Doc256.5.3 Java的类库-常用工具类库GregorianCalendar日历类提供日期和时间的表示,它以阳历来计算。Vector类实现了动态分配对象列表,适用于可变对象数组的类,它的内存量可按照需要自动增加。Stack类是实现先进后出的对象栈,它是Vector的子类,它不能直接被访问,只能从栈顶压入或弹出。Dictionary类是抽象类,不能实例化去创建一个对象,它是关键字和值的数据对存储的集合。很多与数据结构和集合操作有关的类,请自行参考java doc 多加熟悉26本章结束27
限制150内