8.5.3 多态性
多态性是面向对象技术中最灵活的特性,主要是增强项目的可扩展性,提高代码的可维护性。
多态性依赖继承特性,可以把多态理解为继承性的扩展或者深入。
在这里把多态性分为两方面来进行介绍,对象类型的多态和对象方法的多态。
为了方便后续的讲解,首先给出一个继承结构的示例。
//文件名:SuperClass.java
public class SuperClass{
public void test(){
System.out.println(“SuperClass”);
}
}
// 文件名:SubbClass1.java
public class SubbClass1 extends SuperClass{
public void test(){
System.out.println(“SubbClass1”);
}
}
// 文件名:SubbClass2.java
public class SubbClass2 extends SuperClass{
public void test(){
System.out.println(“SubbClass2”);
}
}
在该示例代码中,SubbClass1和SubbClass2是SuperClass的子类,并且在子类的内部都覆盖父类中的test方法。由于这三个类中都书写构造方法,则按照默认构造方法的约定,每个类中都会被自动添加一个默认的构造方法。
8.5.3.1 对象类型的多态
对象类型的多态是指声明对象的类型不是对象的真正类型,而对象的真正类型由创建对象时调用的构造方法进行决定。例外,按照继承性的说明,子类的对象也是父类类型的对象,可以进行直接赋值。
例如如下代码:
SuperClass sc = new SubbClass1();
这里声明了一个SuperClass类型的对象sc,然后使用SuperClass的子类SubbClass1的构造方法进行创建,因为子类类型的对象也是父类类型的对象,所以创建出来的对象可以直接赋值给父类类型的对象sc。除了对象的赋值以外,另外一个更重要的知识是sc对象虽然使用SuperClass声明的类型,但是内部存储的却是SubbClass1类型的对象。这个可以Java语言的中instanceof运算符进行判断。