Java继承
一个从其他的类衍生的类被称为子类,该子类所继承的类被称为父类。
每个类只能继承一个类(没有超类的Object除外),在没有显式继承的情况下,每个类都是超类Object的子类。
类可以继承继承再继承...
当你想创建一个新类时,此时存在一个类拥有你需要的功能,此时你可以继承该类。(继承在某些程度上实现了代码复用),一个子类从其父类中继承了所有的:属性、方法、嵌套类。构造器不是成员变量,所以子类不能继承它,但是父类的构造器可以被子类调用。
Java中类的层次结构
超类Object的定义在java.lang包中,定义且实现所有类共同的行为。在Java的平台,很多类直接由超类派生,另外一些类由其他类派生。以至于类的层次结构如下图所示:
在层次顶部的,是更通用的类(Object)。在层次底部的类,是对某些方面更具体更详细的实现。
子类
无论子类在什么样的Package里面,子类继承父类中所有的protected和public成员。如果子类和父类在同一个包中,子类还继承父类package-private的成员。您可以按原样使用继承的成员、替换它们、隐藏它们或用新成员补充它们:
- 继承的属性可以直接被使用
- 子类可以声明一个与父类同名的属性来覆盖父类对应的属性
- 子类可以声明新的属性
- 子类可以直接使用继承的方法
- 子类可以实现一个与父类中实例方法同名的实例方法,这种方式叫
重写(overriding) - 子类可以实现一个与父类中静态方法同名的静态方法,从而覆盖父类的静态方法
- 子类可以实现新的方法
- 子类可以通过引用父类的构造器来实现子类的构造器,或者隐式地使用
super来引用父类的构造器
父类的私有成员
子类不继承父类的私有成员(也就是说子类无法使用父类的私有成员),但如果父类有protected和public的方法来访问父类的私有属性,子类也是可以通过继承的这些方法访问到父类的私有属性。
嵌套类具有访问其封闭类所有私有成员的权限,所以如果是protected或者public的嵌套类被子类继承,那么子类将能够通过该嵌套类访问到父类的私有成员。
对象转换
如下代码,实例化一个MountainBike的对象:
public MountainBike myBike = new MountainBike();
MountainBike是Bicycle和Object的后代,因此MountainBike既是一个Bicycle也是一个Object,它可以在任何需要Bicycle以及Object对象的地方使用。
隐式转换:
使用一种对象替换另一种对象
Object obj = new MountainBike();
显式转换:
这种写法将会编译错误,因为编译器不知道obj是一个MountainBike对象,
MountainBike myBike = obj;
但是我们可以显式地告诉编译器这个对象是一个MountainBike对象,
MountainBike myBike = (MountainBike)obj;