继承在面向对象开发思想中是一个非常重要的概念,它使整个程序框架具有一定的弹性,在程序中复用一些已经定义完善的类不仅可以减少软件开发周期,也可以提高软件的可维护性和可扩展性。
其基本思想是基于某个父类的扩展,制定出一个新的子类,子类可以继承父类原有的属性和方法,也可以增加原本父类所不具备的属性和方法,或者直接重写父类中的某些方法。
在下列示例中,分别创建Test类和Test2类,在Test类中编写成员方法doSomething()和doIt(),使Test2类继承Test类,重写父类的这两个方法和构造方法,并新增doSomethingnew()方法。其中Test2类的构造方法中使用super关键字调用父类的构造方法和成员方法等:
class Test {
public Test() { //构造方法
//SomSentence
}
protected void doSomething() { //成员方法
//SomSentence
}
protected Test dolt() { //方法返回值类型为Test类型
return new Test();
}
}
class Test2 extends Test{ //继承父类
public Test2() { //构造方法
super(); //调用父类构造方法
super.doSomething(); //调用父类成员方法
}
public void doSomethingnew() { //新增方法
//SomeSentence
}
public void doSomething() { //重写父类方法
//SomeNewSentence
}
protected Test2 dolt() { //重写父类方法,方法返回值类型为Test2类型
return new Test2();
}
}
注意:当重写父类方法时,修改方法的修饰权限只能从小的范围到大的范围改变。
在Java中一切都以对象的形式进行处理,在继承的机制中,创建一个子类对象,将包含一个父类子对象,这个对象与父类创建的对象是一样的。两者的区别在于后者来自外部,而前者来自子类对象的内部。在实例化对象时,Java编译器会在子类的构造方法中自动调用父类的无参构造方法,示例如下:
class Parent{ //父类
Parent(){
System.out.println("调用父类的parent()构造方法");
}
}
class SubParent extends Parent{ //继承Parent类
SubParent(){
System.out.println("调用子类的SubParent()构造方法");
}
}
public class Subroutine extends SubParent{ //继承SubParent类
Subroutine() {
System.out.println("调用子类的Subroutine()构造方法");
}
public static void main(String args[]) {
Subroutine s = new Subroutine(); //实例化子类对象
}
}
/*输出结果如下:
调用父类的parent()构造方法
调用子类的SubParent()构造方法
调用子类的Subroutine()构造方法
*/