IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java面向对象(OOP)--面向对象三大特性之一: 继承(继承、Object类、Super关键字、方法重写) -> 正文阅读

[Java知识库]Java面向对象(OOP)--面向对象三大特性之一: 继承(继承、Object类、Super关键字、方法重写)

1. 继承

现实世界中的继承无处不在。比如:

  • 动物:哺乳动物、爬行动物
  • 哺乳动物:灵长目、鲸目等。

继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。

为什么需要继承?继承的作用?

  • 第一好处:继承的本质在于抽象。类是对对象的抽象,继承是对某一批类的抽象。
  • 第二好处:为了提高代码的复用性。

extands的意思是“扩展”。子类是父类的扩展。
【注】JAVA中类只有单继承,没有多继承! 接口可以多继承!


1.1 继承

  1. 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。
  2. 继承关系的俩个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来
    表示。
    在这里插入图片描述
  3. 子类和父类之间,从意义上讲应该具有"is a"的关系.
    在这里插入图片描述
  4. 类和类之间的继承是单继承
    在这里插入图片描述
  5. 父类中的属性和方法可以被子类继承

子类中继承了父类中的属性和方法后,在子类中能不能直接使用这些属性和方法,是和这些属性和方法原有的修饰符(public protected default private)相关的。

例如 :

  • 父类中的属性和方法使用public修饰,在子类中继承后"可以直接"使用
  • 父类中的属性和方法使用private修饰,在子类中继承后"不可以直接"使用
  • 父类中的构造器是不能被子类继承的,但是子类的构造器中,会隐式的调用父类中的无参构造器(默认使用super关键字)。

1.2 Object类

java中的每一个类都是"直接" 或者 "间接"的继承了Object类.所以每一个对象都和Object类有"is a"的关系。从API文档中,可以看到任何一个类最上层的父类都是Object。(Object类本身除外)Every Class is a Object。

在这里插入图片描述

  • 在Object类中,提供了一些方法被子类继承,那么就意味着,在java中,任何一个对象都可以调用这些被继承过来的方法。(因为Object是所以类的父类)

1.3 Super关键字

  • 子类继承父类之后,在子类中可以使用this来表示访问或调用子类中的属性或方法,使用super就表示访问或调用父类中的属性和方法。

1.3.1 super的使用

【访问父类中的属性】

在这里插入图片描述

【调用父类中的方法】

public class Person {
    public void print() {
        System.out.println("Person");
    }
}

class Student extends Person {
    public void print() {
        System.out.println("Student");
    }

    public void test() {
        print();// Student
        this.print();// Student
        super.print();// Person
    }
}

【调用父类中的构造器】

  1. 调用父类无参构造方法
public class Person {
    public Person() {
        System.out.println("我是父类无参构造方法");
    }
}

class Student extends Person {
    public Student() {
        super();
    }
}

class Test {
    public static void main(String[] args) {
        new Student();
    }
}

在这里插入图片描述

  1. 调用父类有参构造方法
public class Person {
    public Person(String son) {
        System.out.println("我是父类有参构造方法,我还有个儿子叫: " + son);
    }
}

class Student extends Person {
    public Student() {
        super("🐟🥩");
    }
}

class Test {
    public static void main(String[] args) {
        new Student();
    }
}

在这里插入图片描述


1.4 方法的重写(override)

  1. 方法重写只存在于子类和父类(包括直接父类和间接父类)之间。在同一个类中方法只能被重载,不能被重写.
  2. 静态方法不能重写
    • 父类的静态方法不能被子类重写为非静态方法 //编译出错
    • 父类的非静态方法不能被子类重写为静态方法;//编译出错
    • 子类可以定义与父类的静态方法同名的静态方法(但是这个不是覆盖)

【例子】

  • 调用父类无参构造
  • 调用父类有参构造

1.4.1 重写的语法

  1. 方法名必须相同
  2. 参数列表必须相同
  3. 访问控制修饰符可以被扩大,但是不能被缩小: public protected default private
  4. 抛出异常类型的范围可以被缩小,但是不能被扩大
    ClassNotFoundException —> Exception
  5. 返回类型可以相同,也可以不同,如果不同的话,子类重写后的方法返回类型必须是父类方法返回类型的子类型例如:父类方法的返回类型是Person,子类重写后的返回类可以是Person也可以是Person的子类型。

注:一般情况下,重写的方法会和父类中的方法的声明完全保持一致,只有方法的实现不同。(也就是大括号中代码不一样)

public class Person {
    public void print() {
        System.out.println("Person");
    }
}

class Student extends Person {
    @Override
    public void print() {
        System.out.println("Student.");
    }
}

class Test {
    public static void main(String[] args) {
        new Student().print();
    }
}

在这里插入图片描述


1.4.2 为什么要重写

子类继承父类,继承了父类中的方法,但是父类中的方法并不一定能满足子类中的功能需要,所以子类中需要把方法进行重写。


1.4.3 总结

  • 方法重写的时候,必须存在继承关系。
  • 方法重写的时候,方法名和形式参数 必须跟父类是一致的。
  • 方法重写的时候,子类的权限修饰符必须要大于或者等于父类的权限修饰符。( private < protected <public,friendly < public )
  • 方法重写的时候,子类的返回值类型必须小于或者等于父类的返回值类型。( 子类 < 父类 ) 数据类型没有明确的上下级关系
  • 方法重写的时候,子类的异常类型要小于或者等于父类的异常类型。


  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 10:40:39  更:2021-08-02 10:42:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 -2025/3/1 13:55:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码