什么是继承
v 继承性是面向对象程序设计语言的另一基本特征,通过继承可以实现代码的复用。继承而得到的类为子类,被继承的类为父类(超类),父类包括所有直接或间接被继承的类。
v 子类可继承父类中的变量及方法,也可定义其自身特有的变量及方法。
v Java中不支持多重继承。
什么是继承
v 通过在类的声明中加入extends子句来创建一个类的子类:
class SubClass extends SuperClass{
……
}
v 如果缺省extends子句,则该类为java.lang.Object的子类,Object类是所有类的父类.
v Java是单继承
继承性
v 子类可继承父类方法和变量.
同一个包中 不同包中的子类
private
default ★
protected ★ ★
public ★ ★
变量隐藏及方法重写原则
v 变量隐藏原则:
子类中变量名与继承自父类的变量名相同时,则继承自父类的变量将被隐藏。
v 方法重写原则:
v 子类有个方法与父类的方法完全一致叫做重写
§ 重写后的方法不能比被重写的方法有更严格的访问权限(可以相同)。
§ 改写后的方法不能比重写的方法产生更多的例外。
变量隐藏示例
v 变量隐藏即指在子类中重新定义父类中
已有的变量;
方法重写(覆盖)
v 方法重写即指在子类中重新定义父类中
已有的方法;
super关建字作用
v 调用构造方法:
super()必须是子类构造函数第一个执行的语句,如果super()没有被用到,每个超类的默认的或无参数的构造函数将被执行。
v 调用被隐藏变量及方法:
可通过super关键字调用被隐藏的父类中的变量及方法。
super关建字使用格式
v 访问父类被隐藏的成员变量,
如:
super.variable;
v 调用父类中被重写的方法,如:
super.Method([paramlist]);
v 调用父类的构造函数,如: super([paramlist]);
多层次继承
Java 不支持多继承,可多层次继承。
构造方法调用
v 在类层次结构中,构造方法以派生的顺序调用,从超类(父类)到子类
final关键字
v final在类之前
表示该类是最终类,表示该类不能再被继承。
v final在方法之前
表示该方法是最终方法,该方法不能被任何派生的子类覆盖。
v final在变量之前
表示变量的值在初始化之后就不能再改变;相当于定义了一个常量。
要点补充:
1:Eclipse的简单使用
A:配JDK与JRE环境
window-->preferences-->java--->InstallJRES。
选择add配置一个JDK的的环境。并勾选。
B:新建一个工程,选择将源文件与输出文件分开
C:使用快捷键
Ctrl+Shif+F
Ctrl+Shif+O
Alt+/(CtrL+Space)
Ctrl+/ 注释
Ctrl+Shift+/ 反注释
改快捷键
window-->preferences-->General--->Keys--->ContentAssisant
D:导入工程
import-->General--->ExistingProjects into WorkSpace.
面向对象的特性
封装 继承 多态
封装:
定义:
通过对象的封装,实现了模块化和信息隐藏。
通过对类的成员施以一定的访问权限,实现了类中成员
的信息隐藏
注意点:
对象自已该做的一些事情与方法不能交与其它类去实现。
将内部的实现隐藏化。别人不用去关心内部怎么实现。
只要调用方法就可以得想结果。
继承:
继承的特性:
A:通过继承可以实现代码的复用。子类可以继承父类中的变量及方法。
前提:父类访问修饰符的控制对继承的影响:
1.父类私有的属性与方法不能被子类继承。
2.Default/public/protected:同一包子类中可以访问。
public/protected:不同子类中可以访问。
B:父类包括所有直接或间接被继承的类。
Animal
|
|
∨
Dog
|
|
∨
Dog_WangCai
C:子类不但继承父类的属性和方法,也可以拥有自已新增的属性与方法。
D:Java中不支持多继承。(在Java中可以使用接口来模拟多继承的方式)。
多继承带来的问题:如果使用多继承,父类中都拥有相同的方法时,虚拟机无法判断是调用哪一个父类的方法。
使用继承所带来的问题:
1:变量的隐藏
当一个类继承另一个类时,将继承父类的对象属性与类属性。
当子类中新增属性时,如果子类新增的属性与父类的属性名称
一致时,(类中不可能出现相同名称的属性)。父类的属性将
被自动隐藏。
2:方法的重写
当子类继承父类时,拥有父类的方法。
调用时,肯定是调用父类的方法。如果子类不满意父类的实现
可以重写父类的方法。
重写的原则:
1:返回值,方法名称,方法的参数必须要跟父类一致。
2:子类重写的方法不能比父类拥有更严格的访问权限。(>=父类的访问权限)
3:子类重写的方法不能抛出比父类更多的异常。
3:super关键字
1.在类的构造方法中,通过super关键字调用这个类的父类的构造方法
super():调父类的构造方法。这段代码必须写在子类构造方法的第一行。
如果父类的构造方法有参数。
super(参数值):
2.在子类中访问父类的被屏蔽的方法和属性
super可以用于调用父类的属性与方法和构造方法。
super.XXX:调用父类的属性。
super.XXX():调用父类的方法。
重写和重载区别
1.重写参数类型和个数一样,
2.重写要求返回类型必须一样,重载没要求
3.重写用于子类覆盖父类的方法,方法重载用于同一个类的所有方法
4.父类的方法只能被子类重写一次,而同一方法所在的类可以被重载多次
5.重写对方法的的访问权限和抛出的异常有特殊要求
继承的利弊和使用原则
1.继承树的层次不可太多(2-3)
2.继承树的上层为抽象层
3.最大弱点:打破封装
4.精心设计用于被继承的类
1.良好的文档说明
2.封装细节,private
3.不允许子类覆盖的变为final
4.父类的构造方法不允许调用可被子类覆盖的方法