[学习笔记] Java继承
继承
继承是面向对象编程的基石,它允许创建不同等级层次的类;
继承使得子类拥有父类的特征和行为,但是子类又可以拥有自身的特性;
通过使用继承也可以提高代码的复用性从而不用多次编写同样的代码,并且还能提高维护性,当后期需要对代码进行修改时,不需要大量的修改代码;
类的继承方式
在Java中,使用extends关键字声明一个类继承另一个类;
class 父类 { } class 子类 extends 父类 { }
所有类都继承于java.lang.Object类 ,当没有使用extends关键字为创建的类指明父类时,该类默认继承祖先类java.lang.Object类;
继承类型
Java支持多重继承,但不支持多继承(一个类同时继承多个类);
单一继承
一个子类只能继承一个父类;
class A { } class B extends A{ }
多重继承
class A { } class B extends A{ }
class C extends B{ }
不同类继承同一个类
class A { } class B extends A{ } class C extends A{ }
继承的特性
子类将拥有父类非private的属性和方法;
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展;
子类可以用自己的方式实现父类的方法;
Java支持单继承和多重继承,但不支持多继承,一个子类只能拥有一个父类;
继承提高类之间的耦合度,耦合度越高代码的联系就越紧密,独立性越差;
implements关键字
implements关键字用于继承或实现接口,可以变相的实现多继承,因为一个类可以继承多个接口,接口与接口之间通过逗号分隔;
super与this关键字
super关键字
super关键字可以用于引用当前对象的父类,实现对父类成员的访问;
this关键字
指向对象本身的引用;
final关键字
使用final关键字声明的类不能被继承,被final关键字修饰的方法不能被子类重写;
//声明类
final class 类名 {
//类体
}
//声明方法
修饰符(public/private/default/protected) final 返回值类型 方法名(){
//方法体
}
构造器
子类不会继承父类的构造方法(构造器/构造函数),只会隐式或显式的调用它;
如果父类的构造器带有参数,则必须在子类的构造器中显式的通过super关键字调用并传入适当的参数列表;
如果父类的构造器没有参数,则子类的构造函数中可以不使用super关键字调用父类的构造器,系统会自动调用父类的无参构造函数;