1 基本概念
1.1 多态
多态是同一个行为具有多个不同表现形式或形态的能力。多态性是对象多种表现形式的体现。现实中,比如我们按下 F1 键这个动作: 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。
多态存在的三个必要条件:
- 继承
- 重写
- 父类引用指向子类对象
比如:
Parent p = new Child();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
以下是一个多态实例的演示,详细说明请看注释:
public class Test {public static void main (String[] args ) {show (new Cat()); // 以 Cat 对象调用 show 方法show (new Dog()); // 以 Dog 对象调用 show 方法Animal a = new Cat(); // 向上转型a . eat (); // 调用的是 Cat 的 eatCat c = (Cat) a ; // 向下转型c . work (); // 调用的是 Cat 的 catchMouse}public static void show (Animal a ) {a . eat ();// 类型判断if ( a instanceof Cat) { // 猫做的事情Cat c = (Cat) a ;c . work ();} else if ( a instanceof Dog) { // 狗做的事情Dog c = (Dog) a ;c . work ();}}}abstract class Animal {abstract void eat ();}class Cat extends Animal {public void eat () {System.out. println (" 吃鱼 ");}public void work () {System.out. println (" 抓老鼠 ");}}class Dog extends Animal {public void eat () {System.out. println (" 吃骨头 ");}public void work () {System.out. println (" 看家 ");}}
执行以上程序,输出结果为:
吃鱼
抓老鼠
吃骨头
看家
吃鱼
抓老鼠
1.2 包
为了更好地组织类,Java提供了包机制,用于区别类名的命名空间。
包的作用
1 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
2 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
3 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
Java使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。
包语句的语法格式为:
package pkg1 [. pkg2 [. pkg3 …]];
例如,一个Something.java 文件它的内容
package net . java . utilpublic class Something{...}
那么它的路径应该是 net/java/util/Something.java 这样保存的。 package(包)的作用是把不同的java程序分类保存,更方便的被其他java程序调用。
一个包(package)可以定义为一组相互联系的类型(类、接口、枚举和注释),为这些类型提供访问保护和命名空间管理的功能。由于package创建了新的命名空间(namespace),所以不会跟其他package中的任何名字产生命名冲突。使用包这种机制,更容易实现访问控制,并且让定位相关类更加简单。
创建包
创建package的时候,你需要为这个package取一个合适的名字。之后,如果其他的一个源文件包含了这个包提供的类、接口、枚举或者注释类型的时候,都必须将这个package的声明放在这个源文件的开头。
包声明应该在源文件的第一行,每个源文件只能有一个包声明,这个文件中的每个类型都应用于它。 如果一个源文件中没有使用包声明,那么其中的类,函数,枚举,注释等将被放在一个无名的包(unnamed package)中。
import 关键字
为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包。使用"import"语句可完成此功能。
在 java 源文件中 import 语句应位于 package 语句之后,所有类的定义之前,可以没有,也可以有多条,其语法格式为:
import package1 [. package2 …].( classname |*);
如果在一个包中,一个类想要使用本包中的另一个类,那么该包名可以省略。 类文件中可以包含任意数量的import声明。import声明必须在包声明之后,类声明之前。