java系列5:继承(inheritance)

解决了代码的重用问题。

一、继承

继承是利用现有的类创建新类的过程,现有的类称作基类(base class,父类),创建的新类称作派生类(derived class,子类)。

继承的优点

最高层是最普遍的、最一般的情况,往下每一层都比上一层更具体,并包含有高层的特征,通过这样的层次结构使下层的类能自动享用上层类的特点和性质;

继承其实就是自动地共享基类中成员属性和成员方法的机制。

[访问修饰符] class 派生类名 extends 基类名 {
    成员列表
}

class Student extends Person {

}

二、继承中的构造方法

父类中的构造方法不能被子类继承,即便它是public的;

父类的构造方法负责初始化属于它的成员变量,而子类的构造方法则只需考虑属于自己的成员变量,不必去关注父类的情况。

构造方法的执行顺序

当实例化子类的对象时,必须先执行父类的构造方法,然后再执行子类的构造方法;

如果父类还有更上级的父类,就会先调用最高父类的构造方法,再逐个依次地将所有继承关系的父类构造方法全部执行;

package test;

class ParentClass {  //定义父类
    public ParentClass() {  //构造方法
        System.out.println("这是父类的构造方法。");
    }
}

class ChildClass extends ParentClass {  //子类继承于父类
    public ChildClass() {  //构造方法
        System.out.println("这是子类的构造方法。");
    }
}

public class ConstructorTest {
    public static void main(String[] args) {
        ChildClass cc = new ChildClass();  //实例化子类对象
    }
}
运行结果

如果父类的构造方法执行失败,那么子类的对象也将无法实例化。

解释:
在实例化Circle类对象时,虚拟机一定会先调用其父类(Point类)的构造方法;
Point类的构造方法需要两个参数来初始化其成员,但此时并没有获得这两个参数,造成Point类的构造方法无法执行;
父类的构造方法执行失败从而导致子类(Circle类)的对象也无法创建;
问题的关键是:在实例化子类对象时,如何将参数传递给父类的构造方法?这将使用到super关键字。


三、super关键字

1、用途1:在子类的构造方法中,super关键字可以显式地调用父类的构造方法,用于将参数传递给它。

super(实际参数);
// 该语句必须是子类构造方法的第一条语句

2、用途2:如果父类和子类中有同名成员,在子类中默认访问是属于自己的那一个成员;super关键字可以明确地指定要访问父类中的成员。

super.成员名;
// 前提条件是:父类中的该成员不是private的。
  • 继承是单方向的,即派生类可以继承和访问基类中的成员,但基类则无法访问派生类中的成员;

  • 在Java中只允许单一继承方式,即一个派生类只能继承于一个基类,而不能象C++中派生类继承于多个基类的多重继承方式。


四、访问控制权限

1、信息隐藏

信息隐藏是面向对象程序设计的重要特点之一,它可以:

  • 防止类的使用者意外损坏数据;
  • 对任何实现细节所作的修改不会影响到使用该类的其它代码;
  • 使类更易于使用。

在Java中实现信息隐藏的是访问控制权限机制。

2、类的访问控制权限

只有public和缺省两种:

  • 被public修饰的类可以从任何地方访问,不受限制;
  • 不加访问修饰符,缺省修饰的类只能从本包中访问,不同包则无法访问到。

但要注意的是:

  • 在一个源文件中只能有一个被public修饰的类,并且文件名必须与public的类同名;
  • 如果要定义多个public的类,则必须分别写在不同的源文件中,一个源文件只写一个类是良好的编程习惯。

3、类成员的访问控制权限

4种类成员的访问控制权限
例子

7、访问权限

为了避免从类外部直接访问类成员而造成的数据损坏,Java对类成员的访问制定了约束;加上访问修饰符有时候可能会给操作数据带来不便,但可以在很大程度上保证数据的安全。

关键字public和private是访问修饰符,用来说明某个成员是否可以从类外部进行访问。
public修饰的成员可以在任何地方进行访问,不受任何约束;
private修饰的成员只能够被本类中的其它成员访问,而不能从类的外部进行访问。

一般地,我们会将成员属性声明为private,而将成员方法声明为public,但这样做并不是绝对的。
有时候,类外部可能要操作到某些私有数据成员,那么就可以增加一个公有的方法,再由这个方法来操作私有数据,避免因类外部的误操作而造成的数据损坏。
因为main方法要由类外部的虚拟机来调用,所以main方法必须声明成public。

Student类
修改Student类
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,573评论 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,629评论 0 11
  • 1、.java源文件: 一个以”.java“为后缀的源文件:只能有一个与文件名相同的类,可以包含其他类。 2、类方...
    Hughman阅读 1,442评论 1 9
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,066评论 0 62
  • 有些人只是不善于表达而已,往往被称之为高冷,他们尤其是在爱情里,不善于表达自己的言辞,而往往会产生误会,高冷的他们...
    星雨镇浮阅读 627评论 0 0