继承

public class 子类名 extends 父类名 { }

​ 注意事项:Java 不支持多继承 可以多层继承 (一个类不可以直接有多个父类,可以有父类的父类)

​ 让类3与类之间产生关系,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法

​ 提高了代码的复用性和可维护性.

​ 复用性:父类有的代码子类都有 (成员变量 和成员方法 不包括构造方法)

​ 维护性:父类统一管理子类 父类修改代码所有子类都跟着改变(也是弊端)

​ 增强了代码的耦合性(削弱了子类的独立性),子类不得不受父类影响

​ 继承虽好,但是要满足 is a 关系才可使用 让两个类产生关系

​ 苹果 是 一种 水果 设计水果为父类 苹果为子类

​ 猫 是 一种 动物 设计 动物为父类 猫为子类

​ 经理 程序员 员工 设计 员工 为父类 经理 程序员分别继承 员工类

​ 而 经理类 和程序员类 不应该产生继承关系

在子类中方法使用一个变量 (就近原则)

  • 子类局部变量
  • 子类成员变量
  • 父类成员变量
  • 如果没有就报错(不考录父类的父类)
  • Tips: 成员变量 和 局部变量重名 使用this.变量名 表示成员变量
子类成员变量和局部变量 成员变量重名 使用 super.变量名 表示 父类成员变量

在没有重名的情况下 根据变量作用域使用变量

子类的对象使用一个方法 (就近原则)

  • 子类成员范围找
  • 父类成员范围找
  • 如果没有就报错(不考录父类的父类)
  • Tips: 在一个类中调用 本类的方法 实际上是this.方法名() 在子类方法名和父类重名的情况下 可以用super.方法名()

​ 定义:子类中出现了和父类中”一模一样”的方法声明

​ 书写:重写时

​ 修饰符范围 要大于等于父类

​ 返回值类型 为父类返回值的类型 或 父类返回值的类型的子类

​ 范围原因:(里氏原则) /多态时执行看右边 要保证程序能被执行到(其他类其他包中可能不能够被取到)

使用场景:父类方法不能满足子类的要求

​ Tips:用 @Override 注解 可帮助我们检查重写方法声明的正确性

​ 子类不能重写父类private修饰的方法 访问不到

  • 子类中的所有构造方法 默认访问父类中的无参构造方法 即子类所有构造方法第一行默认有一个super()
  • 为什么? 子类除了继承父类数据,子类 可能使用父类的数据 所以在子类初始化之前,要完成对父类数据的初始化
  • 在显示调用 super(参数列表)后 java 将不在提供super()
  • super(参数列表)只能放在第一行

  • 继承时的内存图

  • this和super 都能调用构造方法 都需要书写在构造方法的第一行(要先初始化在使用)
  • this和和super 只能存在一个 1.只有一个第一行 2.无论this在前还是super在前 都会对父类进行两次初始化
  • new 关键字 https://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html
  • 创建一个对象 Apple apple = new Apple() 三个过程:
    • 声明Declaration:将变量名称与对象类型关联的变量声明。
    • 实例化Instantiating :new关键字是一个java运算符,它用来创建对象。
    • 初始化Initialization:new运算符,随后调用构造函数,初始化新创建的对象。
  • 实例化 new运算符实例化一个类对象,通过给这个对象分配内存并返回一个指向该内存的引用。new运算符也调用了对象的构造函数。 注意:”实例化一个类的对象”的意思就是”创建对象”。创建对象时,你正在创造一个类的”实例”,因而”实例化”一个类的对象。 new运算符需要一个单一的,后缀参数,需要调用构造函数。构造函数的名称提供了需要实例化类的名称。 new运算符返回它所创建的对象的引用。此引用通常被分配给一个合适的类型的变量,如:Point originone =new Point(23,94); 由new运算符返回的引用可以不需要被赋值给变量。它也可以直接使用在一个表达式中。例如: int height = new Rectangle().height; 当Java语法层面使用new关键字创建一个Java对象时,JVM首先会检查相对应的类是否已经成功经历加载、解析和初始化等步骤;当类完成装载步骤之后,就已经完全确定出创建对象实例时所需的内存空间大小,才能对其进行内存分配,以存储所生成的对象实例。 实例化之后,进行初始化

是否可以访问(使用) 、作用域 该表针对成员变量来说的

修饰符 同一个类中 包中无关类 非同包有继承关系 非同包无继承 private Y default(不写) Y Y protected Y Y Y public Y Y Y Y

​ final:表示最终 可以修饰 成员变量 ,成员方法,类

*
– 修饰类 表示类是最终类, 不能被继承
– 修饰方法 表示是最终方法, 不能被重写
– 修饰基本数据类型变量
+ 成员变量 表示常量,不能被再次被赋值 常量全部大写 词与词之间” _ “连接
+ 局部变量 表示 数据值不能改变
– 修饰引用数据类型变量 表示 地址值不能改变 地址值中的内容可以改变

static:表示静态的意思,可以修饰成员方法,成员变量
  • 特点:
  • 被类的所有对象共享 这也是判断是否使用该关键字的标准
  • 静态的成员随类加载 比构造函数作用的时期早
  • 怎么调用: 直接 类名.变量名 /直接类名.方法名()
  • 静态成员和非静态成员 访问规则:静态成员方法只能访问静态成员
  • 使用场景:工具类 工具类特点:
  • 没有成员变量
  • 所有成员变量 用 静态化
  • 构造方法私有化 不能 new 对象

Original: https://www.cnblogs.com/acman-mr-lee/p/16340876.html
Author: ACMAN-Mr.Lee
Title: 继承

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/644177/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球