记录java知识点

记录java知识点

继承

  • 继承使用extends关键字
  • 子类继承父类之后,子类可以直接使用父类中非私有的元素,并且子类中也能定义自己的元素
  • 一个类只能继承一个父类
  • 一个类可以存在多个子类
  • 继承关系的构造中,创建子类对象时先调用父类的构造器
  • Java中允许多重继承

重写(override)与重载(overload)

Java中允许方法的重写和重载,重写和重载是多态的一种实现策略:

  • 重载(overload):一个类中存在多个同名的方法
  • 重写(override):一个子类对父类的方法覆盖

重写

当父类中的方法实现满足不了子类需求时,此时子类中可以编写一个与父类方法一模一样的方法,对父类的方法进行覆盖,该过程称之为方法的重写(Override)

重载

重载指的是在同一个类中,或者存在继承关系的多个类中,存在同名的方法,这些方法的名称一模一样,但是方法的参数个数 ,类型,顺序任意有一项不一致,具备以上特点的方法统一称之为重载方法。
重载的条件

  1. 方法名称必须一致
  2. 参数的个数、顺序和类型任意有一项不一致
  3. 重载与返回值无关

关于方法的重载和重写的区别?

  1. 重写必须存在继承关系,由子类重写父类的方法,重载无要求
  2. 重写的方法名称,参数类型必须和父类一致;重载必须要保证方法的参数列表任意有一项不一致
  3. 重载与返回值无关

多态

多态是面向对象程序设计中最为重要的一种(没有之一)特性,java中的多态主要包含两种呈现方式:

  • 行为的多态(方法多态:一种方法以多种不同的形态呈现)
    • 方法的重写
    • 方法的重载
  • 变量的多态
    • 父类的引用指向子类对象
    • 子类引用指向父类对象(强制转换:前提是被转换的引用变量原本指向的就是目标对象)

多态的好处

  • 提高程序的可扩展性
  • 提高代码的可复用性
  • 提高了程序的可维护性

static关键字

static是一个java中的关键字,同时也是一个修饰符;static主要用于修饰属性,方法,内部类;被static修饰的元素与对象无关(不需要通过对象访问),称之为类成员。

  • 被static修饰的属性称之为类属性(静态属性)
  • 被static修饰的方法称之为类方法(静态方法)
  • 被static修饰的初始化块称之为静态块(静态游离块)

注意事项

  1. 被static修饰的元素不再与对象相关,即jvm的gc(垃圾回收)机制回收对象时与类成员无关,即不会回收static元素,static元素会常驻内存直到JVM结束
  2. static一般用于工具类的方法,比如:java.util.Arrays、java.lang.Math等
  3. 类加载时会对所有的静态成员进行验证,但是此时对象还未产生,因此不能在静态方法中调用非静态成员
  4. 针对以上的问题即:不允许在static方法中使用this关键字

初始化块与static块

java的类结构中还存在一个特殊的语句块:初始化块,又称之为游离块;游离块作用于构造器执行前,执行一些初始化操作;一般用于将多个不同构造器中要执行的重复代码进行统一编写。
static块,游离块,构造器的执行顺序

  1. 首先执行static块,并且只执行一次
  2. 其次对象创建时先执行游离块然后才执行构造器
  3. 游离块的执行次数取决于构造器的调用次数

抽象类(abstract class)

java中凡是普通类都具备实例化对象的能力,因为一个类具备了实例化对象的一些必要信息,比如属性,比如行为;但是有些时候,当一个类中信息不足以描述一个具体对象时,此时该类就应该考虑定义为抽象类。
java中的抽象类中所包含的信息,不足以描述一个具体对象,抽象类的内部成分由以下信息构成:

  • 属性
  • 构造器
  • 行为
    • 已实现
    • 未实现(抽象方法)

抽象类特点

  1. 抽象类必须使用abstract修饰
  2. 抽象类存在构造器,但是无法实例化(可以使用匿名内部类创建子类对象)
  3. 抽象类中通常会包含抽象方法
  4. 抽象类的存在一般是需要由子类继承,子类一旦继承了抽象类,则子类必须实现父类中的抽象方法(除非子类也是抽象类)
  5. 抽象类允许继承其他抽象类,但是也只能单继承,可以通过多重继承的方式实现多继承
  6. abstract只能修饰类和方法

接口(interface)

接口是一种比抽象类更纯粹的抽象;因为内部只能够存在常量以及未实现的方法(JDK8以前),接口通常用于定义一些未实现方法的集合,但是不对法方法具体实现,具体的实现通常是由实现类完成,接口具备以下特征:

  • 接口不存在构造器,因此无法实例化
  • 接口允许继承接口,可以同时继承多个接口
  • 一个类可以实现多个接口,但是必须要同时实现所有接口的方法(除非抽象类)
  • 抽象类也实现接口
  • JDK8中对接口有其他新增特性(默认方法,静态方法,函数式接口)

抽象类和接口区别

  • 抽象类是一种类结构,接口是一种行为准则
  • 抽象类中包含类的所有特征,同时包含抽象方法;接口只能有常量和未实现的方法
  • 抽象类由子类通过extends进行扩展;接口由实现类通过implements扩展
  • 子类只能继承一个抽象类;一个类可以实现多个接口
  • 抽象类能且只能继承一个父类;接口可以继承多个接口,接口不能继承任何类
  • 抽象类是对类(名词)的一种抽象;接口是对行为(动词,形容词)的抽象,接口是一种特殊的抽象类
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值