JavaSE学习笔记 - 类的继承、接口

继承

  • 子类可以继承父类的方法,属性等;子类也可以写自己的方法。
  • 父类更加通用,子类更加具体
  • 类只能获得父类中非 private 属性,如果要继承就来提供 set 和 get 方法,私有的方法是没有办法继承的
  • Java 中只能做单继承,不能一次性继承两个类,但是支持多级继承。
  • 在类的继承结构中,如果创建一个子类的对象,那么在子类的对象中内部创建一个父类的对象,如果子类的对象访问的属性或者方法在子类中没有的时候,就会到父类中去寻找。

super关键字

  • 子类的构造器中,内部默认调用了父类的构造器;如果父类带有有参数的构造器,并且没有显式的定义父类的默认构造器,默认构造器被覆盖,导致子类的构造器无法通过 super() 来调用父类的构造器,需要把父类的默认构造器写出来;如果子类的构造器中调用了父类的有参构造器,此时隐藏的 super() 就不会再起作用;super() 的调用必须在第一行;如果子类中没有初始化。
  • 如果父类和子类两个属性重名,在调用方法的时候子类中的属性就是子类的属性,也就是在子类中找这个属性,使用子类中的属性,如果想要使用父类中的属性则可以使用 super.属性名,如果想要使用父类中的方法则可以使用 super.方法名。

覆盖重写

  • 重写:方法名,参数列表,返回值相同,有继承关系的两个类,子类对继承的方法进行覆盖重写
  • 重载:方法名相同,参数列表不同
  • 创建对象,在执行方法的时候,如果子类中有就使用子类中的方法,如果子类中没有就使用父类中的方法。

final关键字

  • 修饰变量的时候,变量的值无法改变
  • 在修饰成员属性时必须要有一个初始值,要么直接给初始值,要么在构造器中赋值(需要在所有的构造器中都要初始化)
  • 在修饰方法的时候,那个这个方法在子类中是不能被覆盖重写的
  • 在修饰类的时候,当前类就不能被继承。
  • 如果 final 修饰的是一个引用,那么这个引用只能执行这一个对象,这个引用不能再次被赋值,但是 final 指向的对象的属性是可以进行修改的
  • final 不能修饰构造方法

抽象类

  • 父类中的方法不确定如何进行方法体的实现,那么这个方法就应该是一个抽象方法,如果一个类中有抽象方法,那么这个类也要变成抽象类。我们不能直接创建抽象类对象,必须使用子类来继承抽象父类;子类必须覆盖重写父类中的所有的抽象方法;然后创建子类对象就可以使用相关方法。
  • 抽象类不能被 final 修饰

注意

  • 抽象类不能直接创建对象,无法实例化
  • 抽象类可以存在构造方法,在子类创建的对象的时候,抽象父类的构造方法先执行,子类的构造方法后执行。
  • 一个抽象类中,不一定有抽象方法,有抽象方法的类一定是抽象类。
  • 抽象类的子类必须要覆盖重写所有的抽象方法,如果没有全部重写全部的方法,那么子类也是抽象类。
  • 抽象方法不能使用 private 、final 和 static 修饰

接口

  • 如果抽象类中的所有方法都是抽象的,我们就可以把它定义称为一个接口。接口是对行为的抽象,类是对属性和行为的抽象。接口中没有属性,没有具体的方法。接口中的方法默认是抽象的,接口是不能进行实例化的,只有一个类来实现了这个接口,需要覆盖重写所有的方法,此时创建子类对象就可以调用相关的方法。
  • 接口无法和 private,static 和 final 共存;接口中可以定义一些有初始值常量,可以通过实现类或者接口名来进行访问,常量名要单词大写来表示,定义的常量默认是 final 和 static。接口可以一次性继承多个接口。
  • Java 8 新特性:可以有静态方法,默认方法(default修饰)。

子类可以继承父类,实现多个接口

  • 接口中没有静态代码块和构造方法
  • 接口中方法相同,重写一次就可以,不同全部重写
  • 实现类如果没有覆盖重写所有接口中的方法,那么这个实现类一定是一个抽象类
  • 一个类直接父类和接口中的方法冲突,优先使用父类中的方法
  • 多个接口之间默认方法重复,要在子接口中覆盖重写
posted @ 2020-08-27 12:29  菜鸭丶  阅读(184)  评论(0编辑  收藏  举报