OO程序设计中最强大可能就是代码的重用,结构化设计从某种程度上提供了代码重用--你可以编写一个过程,然后根据需要使用多次。不过OO设计则更进一步,允许通过组之类并抽取各个类的共性来定义类之间的关系,这不仅有利于代码重用,还可以实现更好的整体设计。继承是提供这种功能的一个主要途径。
继承允许类继承另一个类的属性和方法。这就允许通过抽取共同的属性和行为来创建全新的类。OO程序设计中主要的设计问题之一就是抽取不同类的共性。例如,假如你有一个dog类和cat类,各个类都有一个属性来表示眼睛颜色。在过程式设计模式中,dog和cat代码都包含这个属性。OO设计中,这个颜色属性可能上移到一个名字是animal的类中。这个类还包括所有其他共同的属性和方法,在这个情况之下,dog和cat类都继承Animal类
实例化dog类和或者是cat类的时候,它包含该类本身的所有内容,还包括从其从父类继承的所有内容,因此,dog包含其类定义的所有成员,还包括从animal来继承的所有成员。
超类(父类)包含继承自该类的所有子类共同的属性和行为,例如,对于animal类而言,所有的哺乳动物都有类似的属性,如有眼睛的颜色,haircolor,另外有一些共同的行为,所有的哺乳动物都有这些属性和行为,所有没有必要在继承树中对每一种哺乳动物都重复定义这些属性和行为,重复不仅需要做更多工作,可能更麻烦,而且还可能招致错误和不一致因此,dog和cat从animal种继承了所有这些个共同的属性和方法。Animal类则认为是dog和cat的超类
继承可以带来很多设计上的好处,设计一个cat类时,Animal类提供了很多所需要的功能,通过继承Animal对象cat已经具备成为一个真正哺乳动物的所有属性和行为,为了使它成为更具体的cat cat类必须包含所特有的属性和行为
Class <? super T > getSuperClass():返回本类的父类
Type getGenericSuperClass();返回本类的父类,包含泛型参数信息
isAssignableForm<Class<?> cls>
判定此class对象所表示的类或接口与指定的class参数所表示的类或接口是否相同,或是否是其超类或超接口
package com.kettas.haofeng.test;
public class ClassA<T> {
private T obj;
public void setObject(T obj) {
this.obj = obj;
}
public T getObject() {
return obj;
}
}
package com.kettas.haofeng.test;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class Test <T> extends ClassA <T> {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("==============getSuperClass=====================");
System.out.println(Test.class.getSuperclass().getName());
System.out.println("====================getGenericSuperClass=============");
Type type=Test.class.getGenericSuperclass();
System.out.println(type);
if(ParameterizedType.class.isAssignableFrom(type.getClass())){
System.out.println("------------->getActualTypeArguments:");
for(Type t1:((ParameterizedType)type).getActualTypeArguments()){
System.out.println(t1+",");
}
System.out.println();
}
}
}
==============getSuperClass=====================
com.kettas.haofen.test.ClassA
====================getGenericSuperClass=============
com.kettas.haofen.test.ClassA<T>
------------->getActualTypeArguments:
T,
相关资源:java实现超类,子类,异质类