继承和借口都能实现代码重用,提高开发效率。接下来概述下两者的区别与特性。
首先看接口,它一般由常量,方法(没有方法体)组成,其实质是定义一套规范供后者使用。比如说电脑生者商和其他配件生产商各自开发自己的产品,为了能相互兼容,我们并不需要了解其他生产商的产品,而是通过定义一套规范,让所有生产商共用这套规范来定制自己的产品就行,这样他们就可以相互引用。
接口在java编程中还解决java不能多继承的问题,通过接口还能定制自己所需要的功能。接口是不能直接实例化的,只能被类实现或被其他接口继承。
继承功能上很强大,当你新建一个类并继承了某个父类,那么这个类就具有了父类的属性和方法(构造方法不被继承,但可以通过super来调用)。在子类中,你可以:
被继承的字段和方法可以直接使用
可以新建自己的属性和方法
可以重写父类的方法
注意:继承可以访问父类以public 或 protected 修饰的变量或方法,不论它是在哪个包中继承的。而private修饰的变量是不被子类继承的,这里有两个情况可以让子类访问父类中的方法和属性:
在父类中可访问私有变量的方法,并且此方法不为private修饰。
嵌套子类可以访问外部的父类中的私有属性及方法
关于继承中的多态问题:比如新建一个父类Bicycle,和继承Bicycle的子类MountainBike。我们可以通过多态的方式实例化子类,如:
Bicycle bike = new MountainBike();
这里我们可以说MountainBike是一种Bicycle,但是下面的情况是不允许的:
MountainBike anotherBike = bike:
这时编译器是不通过的,尽管bike本身是MountainBike的实例,但也可以是Bicycle,因此我们需要指明,像下面这种方式:
MountainBike anotherBike = (MountainBike) bike:
通过隐式转化指定是具体哪一个的实例。