记录java知识点
继承
- 继承使用extends关键字
- 子类继承父类之后,子类可以直接使用父类中非私有的元素,并且子类中也能定义自己的元素
- 一个类只能继承一个父类
- 一个类可以存在多个子类
- 继承关系的构造中,创建子类对象时先调用父类的构造器
- Java中允许多重继承
重写(override)与重载(overload)
Java中允许方法的重写和重载,重写和重载是多态的一种实现策略:
- 重载(overload):一个类中存在多个同名的方法
- 重写(override):一个子类对父类的方法覆盖
重写
当父类中的方法实现满足不了子类需求时,此时子类中可以编写一个与父类方法一模一样的方法,对父类的方法进行覆盖,该过程称之为方法的重写(Override)
重载
重载指的是在同一个类中,或者存在继承关系的多个类中,存在同名的方法,这些方法的名称一模一样,但是方法的参数个数 ,类型,顺序任意有一项不一致,具备以上特点的方法统一称之为重载方法。
重载的条件
- 方法名称必须一致
- 参数的个数、顺序和类型任意有一项不一致
- 重载与返回值无关
关于方法的重载和重写的区别?
- 重写必须存在继承关系,由子类重写父类的方法,重载无要求
- 重写的方法名称,参数类型必须和父类一致;重载必须要保证方法的参数列表任意有一项不一致
- 重载与返回值无关
多态
多态是面向对象程序设计中最为重要的一种(没有之一)特性,java中的多态主要包含两种呈现方式:
- 行为的多态(方法多态:一种方法以多种不同的形态呈现)
- 方法的重写
- 方法的重载
- 变量的多态
- 父类的引用指向子类对象
- 子类引用指向父类对象(强制转换:前提是被转换的引用变量原本指向的就是目标对象)
多态的好处
- 提高程序的可扩展性
- 提高代码的可复用性
- 提高了程序的可维护性
static关键字
static是一个java中的关键字,同时也是一个修饰符;static主要用于修饰属性,方法,内部类;被static修饰的元素与对象无关(不需要通过对象访问),称之为类成员。
- 被static修饰的属性称之为类属性(静态属性)
- 被static修饰的方法称之为类方法(静态方法)
- 被static修饰的初始化块称之为静态块(静态游离块)
注意事项
- 被static修饰的元素不再与对象相关,即jvm的gc(垃圾回收)机制回收对象时与类成员无关,即不会回收static元素,static元素会常驻内存直到JVM结束
- static一般用于工具类的方法,比如:java.util.Arrays、java.lang.Math等
- 类加载时会对所有的静态成员进行验证,但是此时对象还未产生,因此不能在静态方法中调用非静态成员
- 针对以上的问题即:不允许在static方法中使用this关键字
初始化块与static块
java的类结构中还存在一个特殊的语句块:初始化块,又称之为游离块;游离块作用于构造器执行前,执行一些初始化操作;一般用于将多个不同构造器中要执行的重复代码进行统一编写。
static块,游离块,构造器的执行顺序
- 首先执行static块,并且只执行一次
- 其次对象创建时先执行游离块然后才执行构造器
- 游离块的执行次数取决于构造器的调用次数
抽象类(abstract class)
java中凡是普通类都具备实例化对象的能力,因为一个类具备了实例化对象的一些必要信息,比如属性,比如行为;但是有些时候,当一个类中信息不足以描述一个具体对象时,此时该类就应该考虑定义为抽象类。
java中的抽象类中所包含的信息,不足以描述一个具体对象,抽象类的内部成分由以下信息构成:
- 属性
- 构造器
- 行为
- 已实现
- 未实现(抽象方法)
抽象类特点
- 抽象类必须使用abstract修饰
- 抽象类存在构造器,但是无法实例化(可以使用匿名内部类创建子类对象)
- 抽象类中通常会包含抽象方法
- 抽象类的存在一般是需要由子类继承,子类一旦继承了抽象类,则子类必须实现父类中的抽象方法(除非子类也是抽象类)
- 抽象类允许继承其他抽象类,但是也只能单继承,可以通过多重继承的方式实现多继承
- abstract只能修饰类和方法
接口(interface)
接口是一种比抽象类更纯粹的抽象;因为内部只能够存在常量以及未实现的方法(JDK8以前),接口通常用于定义一些未实现方法的集合,但是不对法方法具体实现,具体的实现通常是由实现类完成,接口具备以下特征:
- 接口不存在构造器,因此无法实例化
- 接口允许继承接口,可以同时继承多个接口
- 一个类可以实现多个接口,但是必须要同时实现所有接口的方法(除非抽象类)
- 抽象类也实现接口
- JDK8中对接口有其他新增特性(默认方法,静态方法,函数式接口)
抽象类和接口区别
- 抽象类是一种类结构,接口是一种行为准则
- 抽象类中包含类的所有特征,同时包含抽象方法;接口只能有常量和未实现的方法
- 抽象类由子类通过extends进行扩展;接口由实现类通过implements扩展
- 子类只能继承一个抽象类;一个类可以实现多个接口
- 抽象类能且只能继承一个父类;接口可以继承多个接口,接口不能继承任何类
- 抽象类是对类(名词)的一种抽象;接口是对行为(动词,形容词)的抽象,接口是一种特殊的抽象类