java面向对象之 继承 Inheritance
对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。私有成员能继承,但是由于访问权限的控制,在子类中不能直接使用父类的私有成员。
当两个类存在逻辑上的"is-a"关系时,可以采用继承进行代码的复用。
继承是软件复用的一种形式,但不是所有的软件复用都用继承。
继承是多态的前提,没有继承就没有多态。
java中是单继承,一个子类只能有一个父类
继承中的构造方法
当生成子类对象时,Java默认首先调用父类的不带参数的构造方法,然后执行该构造方法,生成父类的对象。接下来,再去调用子类的构造方法,生成子类的对象。【要想生成子类的对象,首先需要生成父类的对象,没有父类对象就没有子类对象。比如说:没有父亲,就没有孩子】。
如果子类使用super()显式调用父类的某个构造方法,那么在执行的时候就会寻找与super()所对应的构造方法而不会再去寻找父类的不带参数的构造方法。与this一样,super也必须要作为构造方法的第一条执行语句,前面不能有其他可执行语句。
当两个方法形成重写关系时,可以在子类方法中通过super.run()形式调用父类的run()方法,其中
继承的要点
(1)继承使用 extends 关键字
class Super{ //父类 super class 超类
}
//Sub "is-a" Super
class Sub extends Super{ //子类 sub class 继承自父类
}
(2)java 只允许单继承
(3)Object 类是所有类的共同父类(最顶层),任何一个类直接或间接的继承自Object类
(4)创建子类对象会先创建父类对象
调用子类构造方法会先递归地调用其父类构造方法
this关键字 表示本类对象
this.成员 常用于 this.成员变量 用于区分同名的局部变量
this.name = name;
this() 表示调用本类的构造方法 可以传参数
super关键字 表示父类对象
super.成员 常用于 super.成员方法 用于区分父子类同名的方法
super() 表示调用父类的构造方法 可以传参数
Java规定:任何构造方法的第一行,默认都是:super();
(5) 子类能够从父类继承到能继承到的资源
前提:使用public或protecetd修饰的
方法的覆盖(Override 重写)
一定存在于子类和父类之间。如果子类对父类的方法不满意,可以覆盖父类中的方法,覆盖也称为重写。
规定:
1)子类覆盖方法和父类被覆盖方法的方法的三要素:返回类型,方法名称,参数列表必须相同
2)子类覆盖方法的访问权限必须大于等于父类的方法的访问权限
3)子类覆盖方法不能比父类被覆盖方法抛出更多异常
方法的重载(Overload)
一般在一个类中,使用相同的方法名、不同的参数表
何为不同:(类型、数量、顺序)
好处:便于开发者的使用,记忆少量的方法名
方法重写与方法重载之间的关系:重载发生在同一个类内部的两个或多个方法。重写发生在父类与子类之间。
final关键字在继承中的使用
final可以用于以下四个地方:
定义变量,包括静态的和非静态的。
如果final修饰的是一个基本类型,就表示这个变量被赋予的值是不可变的,即它是个常量;
如果final修饰的是一个对象,就表示这个变量被赋予的引用是不可变的,不可改变的只是这个变量所保存的引用,并不是这个引用所指向的对象,其实更贴切的表述final的含义的描述,那就是,如果一个变量或方法参数被final修饰,就表示它只能被赋值一次,但是JAVA虚拟机为变量设定的默认值不记作一次赋值。
被final修饰的变量必须被初始化。初始化的方式有以下几种:
1. 在定义的时候初始化。
2. 在初始化块中初始化。
3. 在类的构造器中初始化。
4. 静态变量也可以在静态初始化块中初始化。
1) 定义方法。
当final用来定义一个方法时,它表示这个方法不可以被子类重写,但是它这不影响它被子类继承。
说明:
具有private访问权限的方法也可以增加final修饰,但是由于子类无法继承private方法,因此也无法重写它。编译器在处理private方法时,是按照final方法来对待的,这样可以提高该方法被调用时的效率。不过子类仍然可以定义同父类中的private方法具有同样结构的方法,但是这并不会产生重写的效果,而且它们之间也不存在必然联系。
3)定义类。
由于final类不允许被继承,编译器在处理时把它的所有方法都当作final的,因此final类比普通类拥有更高的效率。final的类的所有方法都不能被重写,但这并不表示final的类的属性(变量)值也是不可改变的,要想做到final类的属性值不可改变,必须给它增加final修饰。
super.run()不必放在第一行语句,因此此时父类对象已经构造完毕,先调用父类的run()方法还是先调用子类的run()方法是根据程序的逻辑决定的。
关于继承的几点注意:
a) 父类有的,子类也有
b) 父类没有的,子类可以增加
c) 父类有的,子类可以改变
d) 构造方法不能被继承
e) 方法和属性可以被继承
f) 子类的构造方法隐式地调用父类的不带参数的构造方法
g) 当父类没有不带参数的构造方法时,子类需要使用super来显式地调用父类的构造方法,super指的是对父类的引用
h) super关键字必须是构造方法中的第一行语句。
java面向对象之 继承 Inheritance的更多相关文章
- Java面向对象之继承(一)
目录 Java面向对象之继承 引言 继承的特点 语法格式 父子类的关系 继承要点 重写父类方法 继承中的构造器 继承中的super关键字 ... Java面向对象之继承 继承是面向对象的第二大特征,是 ...
- Java笔记(十三)……面向对象III继承(inheritance)
继承概述 继承概述 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继那个类即可. 多个类可以称为子类,单独这个类称为父类或者超类. 子类可以直接访 ...
- JAVA 面向对象-2-继承(Inheritance)
i.继承(Inheritance) 1.继承的概念 继承:在面向对象编程的过程中,通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类. 继承是面向对象编程最重要的特征之一. 继承的优点:1 ...
- Java面向对象的继承
继承也是面向对象的又一重要特性,继承是类于类的一种关系,通俗来说狗属于动物类,那么狗这个类就继承了动物类 java中的继承是单继承的,一个类只能继承与一个父类 子类继承父类之后,子类就拥有了父类的所有 ...
- JAVA面向对象之继承
继承: 子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法 class 子类 extends 父类 { } 继承的特性: 子类拥有父类非private的属性,方法. 子类可以拥有自己 ...
- Java:[面向对象:继承,多态]
本文内容: 继承 多态 首发时期:2018-03-23 继承: 介绍: 如果多个类中存在相同的属性和行为,可以将这些内容抽取到单独一个类中,那么多个类(子类)无需再定义这些属性和行为,只要继承那个类( ...
- Java面向对象之继承extends 入门实例
一.基础概念 (一)继承的好处: 1.继承:提高了代码的复用性. 2.让类与类之间产生了关系,给多态这个特征提供了前提. (二)继承的种类: 1.单继承:一个类只能有一个父类. 2.多继承:一个类可以 ...
- Java面向对象_继承——基本概念以及管理化妆品实例分析
一.继承的基本概念: 1.继承是面向对象三大特征之一 2.被继承的类成为父类(超类),继承父类的类成为子类(派生类) 3.继承是指一个对象直接使用另一个对象的属性和方法 4.通过继承可以实现代码重用 ...
- Java面向对象(继承、抽象类)
面向对象 今日内容介绍 u 继承 u 抽象类 第1章 继承 1.1 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成 ...
随机推荐
- ipa 重签
IPA 重签名 时间 2014-03-03 10:28:36 txx's blog原文 http://blog.rpplusplus.me/blog/2014/03/03/ipa-re-codes ...
- GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟。
GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟. 支持输出多种格式 GitBook支 ...
- 利用SQL语句产生分组序号
partition by关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partition by用于给结果集分组,如果没 ...
- 在eclipse上提交任务到集群执行
win7下eclipse远程开发hadoop程序,分为两种: (1)运行[Run As] Java Application, 打包程序为jar,上传集群执行(这里不做解释) (2)运行[Run As] ...
- HDU1789(Doing Homework again)题解
HDU1789(Doing Homework again)题解 以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定任务分数和其截止日期,每日可完成一任务,输出当罚分尽可能小时 ...
- Scala基础入门-1
首先需要Scala开发环境的搭建,网上自己找教程. 声明常量与变量 val foo = 0 // 常量 var bar = 0 // 变量 在Scala中,更加鼓励使用val来进行声明,也就是推荐使用 ...
- IBM developerWorks 的Ajax系列教程
掌握 Ajax,第 1 部分: Ajax 入门简介 http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro1.html?csrf-799150205 ...
- Python学习笔记(三)Python的list和tuple
list list类似其他语言中的数组,是一种有序的集合,可以随时添加和删除其中的元素. 使用len()函数可以获得list元素的个数. list的索引从0开始,当超出范围时会报IndexError错 ...
- mongo设计(三)
原文:http://blog.mongodb.org/post/88473035333/6-rules-of-thumb-for-mongodb-schema-design-part-3 By Wil ...
- 分支-15. 日K蜡烛图
/* * Main.c * 分支-15. 日K蜡烛图 * Created on: 2014年6月18日 * Author: Boomkeeper ****测试通过***** */ #include & ...