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类
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容