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.io.InputStream 类。所有的写操作都继承自一个公共超类 java.io.OutputStream 类。InputStream 和 OutputStream 都是抽象类。InputStream 有 6 个低级输入流: 1. ...
在IT领域,特别是Java编程中,递归获取所有超类以及内省获取所有属性和getter、setter方法是两个重要的概念。这些技术对于理解和操作Java对象的结构和行为至关重要。让我们详细探讨这两个主题。 首先,我们来看递归...
*建立一个超类House, 和一个子类Home,并提供一系列属性和方法,包括printDetails方法, 这个方法要采用多态性 *建立一个House和Home的异类集合, 测试printDetails方法的多态性
默认情况下,有一些数字值类,它们也具有通用的超类java.lang.Number。 但是,运算符(即+-*和/)未在Number中定义,而是在子类中定义。 在BigInteger和BigDecimal类的情况下,存在相应的方法。 这与在类层次结构的...
3. 实例方法可直接调用超类的实例方法吗? 答:D. 实例方法可直接调用本类的类方法 Java面向对象编程 4. 下面代码的输出是什么? class Super {public Integer getLenght() { return new Integer(4); }} public ...
`java.io.Reader`是所有字符输入流的超类。它主要用于读取字符数据,通常以Unicode编码(如UTF-8)的形式。这意味着`Reader`能够处理任何由16位字符组成的文本数据,这在处理包含多种语言和特殊字符的文本文件时尤为...
Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射主要用于在运行时分析类和对象,包括访问私有成员、调用私有方法、创建对象、获取类...
但是,实例方法不能直接调用超类的实例方法,除非显式地使用`super`关键字;同样,也不能直接调用其他类的实例方法。 #### 二、多项选择题知识点解析 1. **Java程序的种类** - **知识点**:Java程序的主要类型。 ...
Java 是一种广泛使用的高级编程语言,以其面向对象的特性、平台无关性和高性能著称。面试时,面试官可能会从多个方面考察候选人的 Java 技能,包括基础语法、类、对象、变量、字符串处理、多线程、面向对象概念、...
Throwable 是 Java 语言中所有错误或异常的超类。Error 和 Exception 是 Throwable 的两个子类,表示严重错误和非严重错误。RuntimeException 是 Exception 的一个子类,表示运行时异常。 六、Java 异常处理的目的...
2. Java中的实例方法可以直接调用超类的实例方法和类方法,但不能直接调用其他类的实例方法。 3. Java中的多态性是通过方法的重写和重载来实现的。 二、面向对象编程 1. 在Java中,子类可以继承父类的成员变量和...
“深入理解Java构造器机理” 在 Java 编程语言中,构造器是一种特殊的方法,用于初始化对象的创建。它是 Java 类中最重要的一个概念。下面将深入讨论构造器的机理、执行顺序、作用及与其他概念的区别。 一、构造器...
6. **访问权限**:实例方法可以直接调用本类的类方法(静态方法),但不能直接调用超类的实例方法或类方法,也不能直接调用其他类的实例方法。 7. **do-while循环**:给定的do-while循环在条件`a>0`变为假时结束,...