Java - Java继承

294 阅读3分钟

Java继承

一个从其他的类衍生的类被称为子类,该子类所继承的类被称为父类

每个类只能继承一个类(没有超类的Object除外),在没有显式继承的情况下,每个类都是超类Object的子类。

类可以继承继承再继承...

当你想创建一个新类时,此时存在一个类拥有你需要的功能,此时你可以继承该类。(继承在某些程度上实现了代码复用),一个子类从其父类中继承了所有的:属性、方法、嵌套类。构造器不是成员变量,所以子类不能继承它,但是父类的构造器可以被子类调用。

Java中类的层次结构

超类Object的定义在java.lang包中,定义且实现所有类共同的行为。在Java的平台,很多类直接由超类派生,另外一些类由其他类派生。以至于类的层次结构如下图所示:

在层次顶部的,是更通用的类(Object)。在层次底部的类,是对某些方面更具体更详细的实现。

image.png

子类

无论子类在什么样的Package里面,子类继承父类中所有的protectedpublic成员。如果子类和父类在同一个包中,子类还继承父类package-private的成员。您可以按原样使用继承的成员、替换它们、隐藏它们或用新成员补充它们:

  1. 继承的属性可以直接被使用
  2. 子类可以声明一个与父类同名的属性来覆盖父类对应的属性
  3. 子类可以声明新的属性
  4. 子类可以直接使用继承的方法
  5. 子类可以实现一个与父类中实例方法同名的实例方法,这种方式叫重写(overriding)
  6. 子类可以实现一个与父类中静态方法同名的静态方法,从而覆盖父类的静态方法
  7. 子类可以实现新的方法
  8. 子类可以通过引用父类的构造器来实现子类的构造器,或者隐式地使用super来引用父类的构造器

父类的私有成员

子类不继承父类的私有成员(也就是说子类无法使用父类的私有成员),但如果父类有protectedpublic的方法来访问父类的私有属性,子类也是可以通过继承的这些方法访问到父类的私有属性。

嵌套类具有访问其封闭类所有私有成员的权限,所以如果是protected或者public的嵌套类被子类继承,那么子类将能够通过该嵌套类访问到父类的私有成员。

对象转换

如下代码,实例化一个MountainBike的对象:

public MountainBike myBike = new MountainBike();

MountainBike是BicycleObject的后代,因此MountainBike既是一个Bicycle也是一个Object,它可以在任何需要Bicycle以及Object对象的地方使用。

隐式转换:
使用一种对象替换另一种对象

Object obj = new MountainBike();

显式转换:
这种写法将会编译错误,因为编译器不知道obj是一个MountainBike对象,

MountainBike myBike = obj;

但是我们可以显式地告诉编译器这个对象是一个MountainBike对象,

MountainBike myBike = (MountainBike)obj;