您的位置:首页 > 编程语言 > Java开发

Java中的继承、重载、覆盖

2014-04-14 20:06 232 查看
第一节 继承的概念

1.1.1 为什么使用继承

使一个类的数据成员和成员方法可以被另一个类(派生类或子类)重用。继承的特性实现了真正意义上的代码复用,子类可以从父类继承所有非private的数据成员和成员方法,以体现其共性。在子类中也可以新定义一些自己特有的数据成员和成员方法,以体现其个性。

1.1.2
继承的格式: class 子类名 extends 父类名{

}

继承通过extends关键字来实现的。

第二节 子类和父类的关系

2.2.1 方法之间

方法覆盖是面向对象语言的特性,即父类中的一个方法在子类中获得重新定义,但是方法名、参数列表和返回值均不变。

2.2.2 属性之间

如果我们在子类定义了与父类相同的属性,那么我们称之为属性(数据成员)的隐藏。

2.2.3 构造器之间

如果子类没有定义自己的构造方法,则它将自动调用父类的无参数的构造器。如果子类自己定义了构造器,则在创建对象时,它将先执行自父类的无参数的构造器,然后再执行自己的构造器。

第四节 super的意义和用法

4.4.1 定义

super是一个关键字,代表父类对象的引用。

4.4.2 用法

(1)用来访问直接父类隐藏的(属性)数据成员,其使用形式如下:

super.数据成员;

(2)用来调用直接父类中被覆盖的成员方法,其使用形式如下:

super.成员方法(参数);

(3)用来调用直接父类的构造器,其使用形式如下:

super(参数)。

注意:super必须放在调用其构造器中的第一行,而且子类中覆盖方法可以通过 super(…) 来访问父类中被覆盖的方法,但只能访问其直接父类,而不能跨级访问。

第五节 覆盖与重载

5.5.1 覆盖的概念

方法覆盖是面向对象语言的特性,即父类中的一个方法在子类中获得重新定义,但是方法名、参数列表和返回值均不变。

5.5.2 覆盖的规则

(1)覆盖的方法之间必须拥有相同的方法名和参数列表,即要求参数列表中参数的个数、排列顺序以及参数的类型要相同。注意,参数的名称是否相同,不是覆盖的决定因素;

(2)覆盖的方法之间,其返回类型必须相同;

(3)一个静态方法只能被覆盖方法为一个静态方法,但是不能被覆盖为一个非静态方法;

(4)父类中被子类覆盖的方法,在每一个子类中,最多只能被覆盖一次;

(5)覆盖方法的访问控制修饰符所定义的访问控制不能小于父类中被覆盖方法的访问控制修饰符定义的范围,即覆盖方法不能比原有方法访问范围窄;

(6)覆盖方法声明的抛出异常,只能是被覆盖方法抛出异常的子类,或者一样,或者不抛出任何异常。

5.5.3 重载的概念

方法重载是编程语言均有的特性,与面向对象语言无关,指多个方法拥有同一个名字,但每个方法都有一套自己的不同与其他同名方法的参数列表,这样编译器可以根据不同的参数列表来调用相应的方

5.5.4 重载的规则

(1)重载的方法之间必须拥有不同的参数列表,即要求参数列表中参数的个数、排列顺序或类型不同。参数的名称是否相同,不是重载的决定因素;

(2)重载的方法必须在同一个类中定义,包括继承自父类中的方法,并且有两个或两个以上的同名、不同参数列表的方法存在;

(3)重载方法的返回类型、访问修饰符以及抛出的异常,都不是重载方法判断的决定因素;

(4)重载方法之间可以互相调用,如同不同方法的调用,只要明确参数列表即可;

(5)一个静态方法既可以被重载为一个静态方法,也可以被重载为一个非静态方法,因为重载方法本质上是不同的方法;

(6)重载方法之间对修饰符和抛出的异常无限制,而覆盖方法之间对修饰符和抛出的异常具有限制条件,原则上要保持扩展性满足子类对父类的继承扩展的面向对象的特性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: