继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

一、继承的基本语法:

在Java语言中,用extends关键字表示一个类继承了另一个类。例如:

 public class Sub extends Base{

       .......
}

Sub类到底继承了Base类的哪些东西呢?分为以下两种情况:

① 当Sub类和Base类位于同一个包中:Sub类继承Base类中public、Protected和默认访问级别的成员变量和成员方法

② 当Sub类和Base类位于不同的包中:Sub类继承Base类中public和protected访问级别的成员变量和成员方法

注:

java语言不支持多继承,即一个类只能直接继承一个类,例如以下代码会导致编译错误:

class Sub extends Base1,Base2(......)

所有的Java类都直接或间接地继承Java.lang.Object类。Object类是所有java类的祖先。

二、方法重载(OverLoad)

对于类的方法(包括从父类中继承的方法),如果有两个方法的方法名相同,但参数不一致,那么可以说,一个方法是另一个方法的重载方法

注:

重载方法必须满足以下条件:

① 方法名相同

② 方法的参数类型、个数、顺序至少有一项不相同

③ 方法的返回类型可以不相同

④ 方法的修饰符可以不相同

三、方法覆盖(Override)

覆盖方法必须满足多种约束:

① 子类方法的名称、参数签名和返回类型必须与父类方法的名称、参数签名和返回类型一致

② 子类方法不能缩小父类方法的访问权限

③ 子类方法不能抛出比父类方法更多的异常

④ 方法覆盖只存在于子类和父类之间,在同一个类中的方法只能被重载,不能被覆盖

⑤ 父类的静态方法不能被子类覆盖为非静态方法

⑥ 子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法

⑦ 父类的非静态方法不能被子类覆盖为静态方法

⑧ 父类的私有方法不能被子类覆盖

⑨ 父类的抽象方法可以被子类通过两种途径覆盖:一是子类实现父类的抽象方法 二是子类重新声明父类的抽象方法

⑩ 父类的非抽象方法可以覆盖为抽象方法

四、方法覆盖与方法重载的异同

相同点:

要求方法相同

都可以用于抽象方法和非抽象方法之间

不同点:

方法覆盖要求参数签名必须一致,而方法重载反之

方法覆盖要求返回类型必须一致,而方法重载不做限制

方法覆盖只能用于子类覆盖父类的方法,方法重载用于同一个类的所有方法

方法覆盖对方法的访问权限和抛出的异常有特殊要求,而方法重载无限制

父类的一个方法只能被子类覆盖一次,而一个方法在所在的类中可以被重载多次

五、super关键字

super和this关键字都可以用来覆盖java语言的默认作用域,使被屏蔽的方法或变量为可见。

注:

在程序中,在以下情况会使用super关键字:

①在类的构造方法中,通过super语句调用这个类的父类的构造方法

②在子类中访问父类的被屏蔽的方法和属性

六、继承的利弊和使用原则

利弊:

继承关系最大的弱点:打破封装

七、比较组合与继承

1、使用继承关系

从类A和类B中抽象出父类C,它包含了method1()和method2()、method3()方法。由于在类A和类B中都会访问method2()方法。因此把method2()方法声明为protected类型

2、使用组合关系


java继承特征:
(1)继承关系是传递的。若类C继承类B,类B继承类A(多继承),则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。
(2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。
(3)继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。
(4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
(5)提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。



继承(JAVA)的更多相关文章

  1. Java 线程--继承java.lang.Thread类实现线程

    现实生活中的很多事情是同时进行的,Java中为了模拟这种状态,引入了线程机制.先来看线程的基本概念. 线程是指进程中的一个执行场景,也就是执行流程,进程和线程的区别: 1.每个进程是一个应用程序,都有 ...

  2. java继承覆盖与向上转型,权限

    子类可以覆盖父类的非final成员变量和重写非final方法 private私有变量和方法只能在类的内部使用,因此子类继承的同时会被隐藏,相当于不继承 protected变量,子类可以继承调用 方法被 ...

  3. Java继承与组合

    Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...

  4. java面向对象三大特性之继承

    通过重用已经测试并验证通过的代码,怎样才减少开发工作,所有开发团队都在为一问题而努力.一个久经考验的方法是通过有效地使用Java继承优化应用程序开发. 继承的从某种意义上讲,继承的短暂美就如同宇宙中所 ...

  5. Java中的继承、封装、多态、抽象

    1.继承 java 和某些面向对象语言(如 c++)在实现继承的不同之处在于java只支持单继承,不支持多重继承.即java 中一个类只能继承于另一个类.我们将被继承的类称之为父类(基类),继承类称之 ...

  6. 深入理解Java中的继承

    对于面向对象的程序设计而言,每一个程序员都应该去了解Java中的封装,继承和多态,那么我今天来说的主要是以继承为核心的主题. 一.关于对继承的理解. 继承是面向对象的三大特性之一,是java中实现代码 ...

  7. 【Java基础】继承的一些总结

    什么是继承 把一些类的具有共性的东西剥离出来形成一个新的类,然后各个其他类保留自己独有的特性,并用关键字extends继承这个剥离出来的新的类,可以最终达到各类原始相同效果,但是在每个类中,单用一个“ ...

  8. Java基础之类和对象、单例模式、继承

    Java类和对象 一般的类只能是public或者default的,若是public的,类名必须和文件名一样.一般在一个文件只写一个类,故这个类一般是加上public. 内部类还可以是private和p ...

  9. java 学习笔记——类之间的关系之封装、继承与多态的详解

    封装 一个封装的简单例子 封装就是把对象的属性(状态)和方法(行为)结合在一起,并尽可能隐蔽对象的内部细节,成为一个不可分割的独立单位(即对象),对外形成一个边界,只保留有限的对外接口使之与外部发生联 ...

随机推荐

  1. RTP、RTCP及媒体流同步

    转自:http://blog.163.com/liu_nongfu/blog/static/19079414220139169225333/ 一.流媒体简介 流媒体是指在internet中使用流媒体技 ...

  2. 笔记本电脑关闭小键盘(即打字按P出现星号键)

    开关方法:Fn + NumLk (联想电脑的NumLk 一般为F8,其他电脑自己在键盘找找罗)

  3. JSON数据解析(GSON方式) (转)

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 在上一篇博文<Andro ...

  4. 硬盘格式是MBR、GPT

    装win7 64位要求硬盘格式是MBR 现在预装 Win8 的电脑大多是采用新版 UEFI 固件 + GPT 格式磁盘 GPT模式是针对整个硬盘的初始化而言,因此不存在某一个分区是GPT模式的说法.转 ...

  5. OVER(PARTITION BY)函数用法

    OVER(PARTITION BY)函数介绍 开窗函数               Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返 ...

  6. c语言的字符串操作(比较详细)

    1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度 ...

  7. java的安装环境配置详细步骤

    --------------------声明,如果你有什么建议或者不懂的地方,欢迎回复,我们可以互相学习,转载请注明出处,谢谢---------------- 首先得安装jdk(Java Develo ...

  8. Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53205878本文出自[DylanAndroid的博客] Android中Vie ...

  9. Liferay 6.2 改造系列之十二:修改Portal设置页面表单内容

    将Portal设置页面中无用的内容删除: 在/portal-master/portal-impl/src/portal.properties文件中,有如下配置: # # Input a list of ...

  10. 学习笔记总结---关于sass

    今天跟大家共同分享交流一下关于sass的知识点: sass的产生: css不是一种编程语言,我们可以用它开发网页样式,但不能用它进行编程.它没有常量,变量,也没有条件语句,只是对属性一行行的描述,资料 ...