本章由小许为你讲解面向对象具有的三大特性,即封装,继承和多态。这三大特性是实现程序代码复用的重要手段。
1.包
包是类的逻辑组织形式。在程序中可以声明类所在的包。同一个包中的类名不能重复。包是有层次结构的,即一个包中可以包含若干个字句。
Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。
包的作用:
-
1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
-
2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
-
3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
(1)自定义包
声明包的语法如下:
package <包名>
注意:声明一个包的语句必须写在类中的第一行。
创建Hero类,将该类存放到com.java.oriented.dato.figure包中,具体操作如下:
package com.java.oriented.dato.figure;//使用package关键字声明包
public class Hero{
//类中的相关操作
}
(2)包的导入
如果要使用Java中存在的包,可以在程序中使用import语句导入包。在程序中导入包的格式如下:
import <包名>.<类名>
如果要导入一个包中的多个类,可以使用“*”表示包中饭所有的类。例如:
import java.util.*; //导入Java.util包中所有的类
import java.until.ArrayList; //导入Java.util包中的ArrayList类
2.继承
(1)概述
继承是面向对象的程序设计的一个重要特性,它是通过继承原有类派生出的子类而进而改造出更为复杂的子类。
Java的继承使用extends关键字实现,实现继承的类称为子类,被继承的类称为父类,也被称为基类,超类。
Java继承语法如下:
[修饰符] class 子类名 [extends 父类名]{
//类定义部分
}
注意:Java中的继承为单继承,即一个子类只能有一个直接的父类。
3.重载和重写
(1)重载
- 方法名相同,参数不同。并在同一个类中。
- 由于方法的参数个数或类型不同,所有可用区分重载的方法。
构造方法也可实现方法的重载。
(2)重写
重写在子类与父类中,方法名和参数相同。
规则:
-
参数列表与被重写方法的参数列表必须完全相同。
-
返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。
-
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
-
父类的成员方法只能被它的子类重写。
-
声明为 final 的方法不能被重写。
-
声明为 static 的方法不能被重写,但是能够被再次声明。
-
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
-
子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
-
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
-
构造方法不能被重写。
-
如果不能继承一个类,则不能重写该类的方法。
4.多态
同一操作作用于不同的对象,可以有不同的解释,以致产生不同的执行的结果。
(1)instanceof运算符
instanceof主要用来判断一个类是否实现了某个接口,或者判断一个实例对象是否属于一个类。
其使用格式如下:
引用类型变量 instanceof (类、抽象类或接口)