跟着老侯玩编程 跟着老侯玩编程
首页
  • 基础语法
  • 网络编程
  • 设计模式
  • 基础语法
  • 基础进阶
  • 课程目录
  • 码农宝典
网盘 (opens new window)
留言
首页
  • 基础语法
  • 网络编程
  • 设计模式
  • 基础语法
  • 基础进阶
  • 课程目录
  • 码农宝典
网盘 (opens new window)
留言
  • 语法基础

    • 聊聊环境变量
    • 永不过时的HelloWorld
    • 标识符
    • 数据类型
    • 运算符
    • 语句
    • 数组
    • 方法详解
    • 类和对象
    • 类的成员
    • 类的继承
      • 优缺点
      • 方法重写
      • 关键字 super
      • 关键字 this
      • 继承中的构造方法
      • 小结
    • 类的形式
    • 封装和多态
    • 接口和Lambda表达式
    • 泛型编程
    • 常用API之函数式接口
    • 常用API
    • 异常机制
    • 多线程
    • 常用API之File类
    • IO流
    • 集合
    • 常用API之Stream流
    • 网络编程
    • 枚举
    • 注解和反射
  • 基础进阶

    • MySQL基础
    • 数据库-JDBC
    • HTML基础
    • CSS基础
    • JavaScript-基础
    • 服务器-Servlet
    • 服务器-Servlet3
    • 动态网页-JSP
    • Ajax
    • 前端项目工程化
    • ECMA2015
    • 模块化规范
  • Java
  • 语法基础
舞动的代码
2022-05-17

类的继承

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

引自百度百科

这句话中提到了一个词 派生 ,编程中的继承并不是现实世界中的继承,比如王思聪和王健林,他们的关系我们可以使用继承,但是同样的这两个人映射到编程中对应的是两个对象而不是类。所以编程中的继承更多的是指派生(即从某一类上衍生出更多的新类)

extends-wolf

Java 中两个类之间通过关键字 extends 实现继承关系


public class Animal{

}

public class Person extends Animal{

}

1
2
3
4
5
6
7
8
9

代码解析

  • Animal: 称为父类、基类、超类

  • Person: 称为子类、派生类

派生类的成员方法不能访问基类的私有成员。

# 优缺点

优点:

  • 提高了代码的复用性(多个类相同的成员可以放到同一个类中)

  • 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)

缺点:

  • 继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性

# 方法重写

重写:子类中存在和父类中一模一样的方法声明(方法名一样,参数列表也必须一样)

在继承中这种情况是不可避免的,针对这种情况 Java 通过 Override 注解来检测当前方法是否是重写的方法


public class Animal{
    public void eat(){
    System.out.println("吃");
    }
}

public class Person extends Animal{

    @Override
    public void eat(){
        System.out.println("吃饭");
    }

}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

注意:

  • 私有方法不能被重写(父类私有成员子类是不能继承的)

  • 子类方法访问权限不能更低 (public > 默认 > 私有)

既然存在同名的情况,那么在调用的时候我们就需要用到的后面的关键字

# 关键字 super

super 代表父类存储空间的标识(可以理解为父类对象引用)对象在堆内存中,会单独存在一块 super 区域,用来存放父类的数据

# 关键字 this

this 代表当前调用方法的引用,哪个对象调用的方法,this 就代表哪一个对象

this-1

类的对象是可以调用类成员的,所以很多时候我们会看到下面的这样的代码


public class User{
    private String uname;

    public void setUname(String uname){

    this.uname=uname;
    }

}

1
2
3
4
5
6
7
8
9
10
11

代码解析

  • 通过本类对象 this 调用类的成员 uname, 再将参数的值赋值给成员。

# 继承中的构造方法

子类中所有的构造方法默认都会访问父类中无参的构造方法

子类会继承父类中的数据,可能还会使用父类的数据。所以子类初始化之前,一定要先完成父类数据的初始化,原因在于,每一个子类构造方法的第一条语句默认都是:super()

# 小结

和继承相关的内容就这么多了,稍微有点零碎。此外还需要注意的是 Java 中类只支持单继承,不支持多继承

类的成员
类的形式

← 类的成员 类的形式→

Theme by Vdoing | Copyright © 2013-2022 冀ICP备16006233号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×