JavaSE进阶

一、day01

目标

继承、super、方法重写、package、import、权限修饰符、final、static

思想

(一)继承

相同属性 + 相同方法 = 相同特征

  1. 概述

    继承是面向对象三大特征之一。可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。

  2. 格式

    • 格式:public class 子类名 extends 父类名
    • 范例:public class Zi extends Fu

    父类:基类、超类

    子类:派生类

  3. 继承中子类的特点

    • 子类可以有父类的内容
    • 子类还可以有自己特有的内容
  4. 继承的好处和弊端

    好处:

    • 提高代码的复用性(多个类相同的成员可以放到同一个类中)
    • 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)

    弊端:

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

    什么时候使用继承?

    • 继承体现的关系:is a
    • 假设法:我有两个类A和B,如果他们满足A是B的一种,或者B是A的一种,就说明他们存在继承关系,这个时候就可以考虑使用继承来体现,否则就不能滥用继承。
    • 举例:苹果和水果 √,猫和动物 √,猫和狗 ×
  5. 继承中变量的访问特点

    • 子类对象访问顺序:子类局部范围 -> 子类成员范围 -> 父类成员范围 -> 报错(不考虑父亲的父亲)

      选择访问 本类:this 父类:super

  6. 继承中构造方法的访问特点

    1. 子类所有的构造方法默认都会访问父类的无参构造方法,为什么呢?

      • 因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化
      • 每一个子类构造方法的第一条语句默认都是:super()
    2. 如果父类中没有无参构造方法,只有带参构造方法,该怎么办呢?

      • 通过使用super关键字去显示的调用父类的带参构造方法

      • 在父类中自己提供一个无参构造方法(推荐)

  7. 继承中成员方法的访问特点

    访问顺序 子类成员范围 -> 父类成员范围 -> 报错(不考虑父亲的父亲)

  8. 继承的注意事项

    • Java中类只支持单继承,不支持多继承
    • Java中类支持多层继承
  9. 给继承的父类私有成员变量赋值:super.(成员变量1, 成员变量2, ...)

(二)super 关键字

super 关键字的用法和 this 关键字的用法相似

  • this :代表本类对象的引用 (this关键字指向调用该方法的对象,一般我们是在当前类中使用this关键字,所以我们常说this代表本类对象的引用)

  • super :代表父类存储空间的标识(可以理解为父类对象引用)

    关键字 this super
    访问成员变量 this.成员变量
    访问本类成员变量
    super.成员变量
    访问父类成员变量
    访问构造方法 this(...)
    访问本类构造方法
    super(...)
    访问父类构造方法
    访问成员方法 this.成员方法(...)
    访问本类成员方法
    super.成员方法(...)
    访问父类成员方法

(三)方法重写

  1. 概述

    子类中出现了和父类中一模一样的方法声明

  2. 应用

    当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,既沿袭了父类的功能,又定义了子类特有的内容。

  3. Override

    • 是一个注解
    • 可以帮助我们检查重写方法的方法声明的正确性

    在与父类同名的方法内:super.方法名();

  4. 方法重写的注意事项

    • 私有方法不能被重写(父类私有成员子类是不能继承的)
    • 子类方法访问权限不能更低(public > 默认 > 私有)

(四)package

  1. 概述:文件夹

  2. 作用:对类进行分类管理

  3. 定义格式

    package 包名; (多级包用 . 分开)

  4. 编译时自动建包

    (包名设置:package com.itheima)
    javac -d . HelloWorld.java
    
    java com.itheima.HelloWorld
    

(四)import

  1. 概述

    使用不同包下的类时,使用的时候要写类的全路径,写起来太麻烦

    为了简化带包的操作,Java就提供了导包的功能

  2. 使用

    import 包名;

(五)final

  1. 作用

    final 关键字是最终的意思,可以修饰成员方法,成员变量,类

  2. 特点

    • 修饰方法:表明该方法是最终方法,不能被重写
    • 修饰变量:表明该变量是常量,不能再次被赋值
    • 修饰类:表明该类是最终类,不能被继承
  3. final 修饰局部变量

    • final 修饰基本类型变量

      ​ final 修饰指的是基本类型的数据值不能发生改变

    • final 修饰引用类型变量

      ​ final 修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的

(六)static

  1. 作用

    static 关键字是静态的意思,可以修饰成员方法,成员变量

  2. 修饰的特点

    • 被类的所有对象共享(判断是否使用静态关键字的条件)
    • 可以通过类名调用(推荐使用类名调用)
  3. 访问特点

    非静态的成员方法

    • 能访问静态的成员变量
    • 能访问非静态的成员变量
    • 能访问静态的成员方法
    • 能访问非静态的成员方法

    静态的成员方法

    • 能访问静态的成员变量
    • 能访问静态的成员方法

    静态成员方法 只能访问 静态成员(变量、方法)

二、day02

目标

思想

(一)多态

  1. 概述

    同一个对象,在不同时刻表现出来的不同形态

  2. 多态的前提和体现

    • 有继承/实现关系
    • 有方法重写
    • 有父类引用指向子类对象 动物 animal = new 猫();
  3. 成员访问特点

    • 成员变量:编译看左边,执行看左边

    • 成员方法:编译看左边,执行看右边

    • 原因:成员方法有重写,而成员变量没有

  4. 多态的好处与弊端

    好处

    • 提高了程序的扩展性

      ​ 具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作

    弊端

    • 不能使用子类的特有功能
  5. 多态中的转型

    • 向上转型
      • 从子到父 Animal a = new Cat();
      • 父类引用指向子类对象
    • 向下转型
      • 从父到子 Cat c = (Cat)a;
      • 父类引用转为子类对象

(二)抽象类

  1. 概述

    在 Java 中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类

  2. 特点

    • 抽象类和抽象方法必须使用 abstract 关键字修饰
    • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
    • 抽象类不能实例化
    • 抽象的子类:要么重写抽象类中的所有抽象方法,要么是抽象类
  3. 成员特点

    • 成员变量
      • 变量、常量
    • 构造方法
      • 有构造方法,但不能实例化
      • 构造方法的作用:用于子类访问父类数据的初始化
    • 成员方法
      • 抽象方法:限定子类必须完成某些动作
      • 非抽象方法:提高代码复用性(继承实现)

(三)接口

  1. 概述

    接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用

    Java 中的接口更多的体现在对行为的抽象

  2. 特点

    • 接口用关键字 interface 修饰

      • public interface 接口名
    • 类实现接口用 implements 表示

      • public class 类名 implements 接口名
    • 接口不能实例化

      • 接口如何实例化?参照多态的方式,通过实现类对象实例化,这叫接口多态
      • 多态的形式:具体类多态,抽象类多态接口多态
      • 有继承或者实现关系;有方法重写;有父(类/接口)引用指向(子/实现)类对象
    • 接口的实现类

      • 要么重写接口中的所有抽象方法
      • 要么是抽象类
  3. 成员特点

    • 成员变量
      • 只能是常量
      • 默认修饰符:public static final
    • 构造方法
      • 接口没有构造方法,因为接口主要是对行为进行抽象的,是没有具体存在
      • 一个类如果没有父类,默认继承自 Object 类
    • 成员方法
      • 只能是抽象方法
      • 默认修饰符:public abstract

(四)抽象类和接口的区别

  1. 成员区别
    • 抽象类 变量,常量;有构造方法,也有非抽象方法
    • 接口 常量;抽象方法
  2. 关系区别
    • 类与类 继承,单继承
    • 类与接口 实现,可以单实现,也可以多实现
    • 接口与接口 继承,单继承,多继承
  3. 设计理念区别
    • 抽象类 对类抽象,包括属性、行为
    • 接口 对行为抽象,主要是行为

(抽象类是对事物的抽象,而接口是对行为的抽象)

内部类:在一个类中定义一个类

分类

  • 在类的成员位置:成员内部类
  • 在类方法内位置:局部内部类
posted @ 2023-08-09 11:27  青核桃啊  阅读(19)  评论(0编辑  收藏  举报