继承

概念

指子类从它的父类中继承可访问的数据成员和方法,是一种代码重用的手段。
  • 子类是父类的子集
      1. 子类拥有父类的成员和方法,不需要再定义,直接用就行
      1. 父类中的private成员变量不可直接使用,但可通过public成员方法间接访问
      1. 在子类继承父类的时候,子类的构造方法必须调用父类的构造方法;
      1. 如果父类有默认无参数构造方法,子类实例化时会自动调用.如果父类没有默认无参数构造方法,子类构造方法必须显式的通过super调用父类的有参数构造方法;
      1. 子类不能继承父类的构造方法,只能调用父类的构造方法。

定义

  • [ 类修饰符] class 类名 extends 父类名 { 成员变量定义; 方法定义; }
  • this 与super
    • 如果子类有和父类同名的方法或属性,需要用this/supri来区分
      • 在父类定义的,可以用super来引用(指父类对象)
      • 自己新添加的,用this来引用(指当前对象)
        • (从父类带过来的也是子类的一部分,所以如果在父类和子类中没有重名的话,实际上都可以用this来引用)
  • this
      1. 用this来引用当前对象的成员变量或成员方法。
      1. 在构造方法内用this来调用类中的另一个构造方法。
        1. 例如
      1. 在构造方法内把this当做参数传递给其他方法。
  • super
      1. 引用父类的成员变量或成员方法。
      1. 调用父类的构造方法。
        1. 子类只能在子类的构造方法中调用父类的构造方法,而且必须调用父类的构造方法,调用语句必须写在子类构造方法的第一行。
  • 子类变量隐藏了父类的同名变量
  • 子类中定义一个方法,其名称、返回类型及参数签名正好与父类一样,则子类的方法覆盖了父类的同名方法。
  • 子类中有无参数的空构造方法,但父类中只写了有参数的构造方法,此时子类的无参数构造方法会自动调用父类的无参数的构造方法,但由于父类没有无参数构造方法,造成调用失败。

访问控制符

  • private
    • 修饰成员变量、成员方法、构造方法以及内部类
    • 所属类内
  • 默认权限
    • 修饰成员变量、成员方法、构造方法、类和接口
    • 同一包内
    • 不写访问控制符的就是默认访问权限
  • protected
    • 修饰成员变量、成员方法、构造方法以及内部类
    • 同一个包或它的子类
  • public
    • 修饰成员变量、成员方法、构造方法以及类和接口
    • 被任何类访问

类变量、实例变量与局部变量

  • 成员变量
    • 定义在类体内且在方法外的变量
    • 分为实例变量和类变量
  • 类变量
    • 带关键字static
    • 所有该类的对象共享这一个类变量
    • 访问方法有两种
      • 对象名.变量名
      • 类名.变量名
  • 实例变量
    • 不带关键字static
    • 每个对象拥有自已独立的实例变量
    • 访问方法有一种
      • 对象名.变量名
       
  • 局部变量
    • 定义在方法内
      • 一种是方法体内定义的变量
        • 必须赋初值后才能使用
      • 一种是方法的形参

类方法与实例方法

  • 类方法
    • 加static
    • 所有该类的对象共享这一个类方法
    • 不用创建对象就可以使用
    • 访问方法有两种
      • 对象名.方法
      • 类名.方法()
  • 类中的实例方法可以操作类变量,类方法不可以直接操作实例变量,可以对象引用。
  • 实例方法
    • 不加static
    • 每个对象拥有自已独立的实例方法
    • 必须在创建了对象后
    • 访问方法有一种
      • 对象名.方法

static代码块

  • 格式
    • static{普通java代码; }
    • 不需要创建对象,运行比mian方法还早

final修饰符

  • 修饰变量、方法、类
  • 只能被赋值一次,后面不能改变
  • 定义时赋值或在类的初始化代码块中赋值
定义
  • static变量
    • [访问修饰符] static final 数据类型 变量名[=value];
  • 实例变量
    • [访问修饰符] final 数据类型 变量名[=value];
  • 局部变量
    • final 数据类型 变量名[=value];
  • 成员方法
    • final修饰的成员方法表示在子类中不能被覆盖
    • [访问修饰符] final 数据类型 方法名([参数列表]){}
  • 类
    • final修饰的类表示在该类不能有子类。
    • [访问修饰符] final class 类名{};

对象的初始化顺序

  • 有继承时
      1. 父类的类变量和static代码块。
      1. 子类的类变量和static代码块。
      1. 父类的实例变量。
      1. 父类的构造方法。
      1. 子类的实例变量。
      1. 子类的构造方法。
       
  • 无继承时
      1. 类变量和static代码块
      1. 实例变量
      1. 构造方法
       
 
Prev
面向对象编程
Next
抽象类和接口
Loading...
Article List
一个NotionNext搭建的博客
数据库系统概论
大数据原理与应用
javaWeb应用开发基础教程
python
毕业设计
大数据技术综合应用
实训-航空数据系统
java面向对象程序设计
数据结构
算法分析与设计
SPARK
Python爬虫大数据采集与挖掘
云计算
概率论与数理统计
数字逻辑
计算机网络
计算机组成原理
linux
操作系统
人工智能导论
数据仓库与数据挖掘
数据可视化
大数据安全与隐私保护
c语言
C++