显示一个对象的继承等级,Class类的应用

原创 2004年09月29日 11:07:00

这个小程序显示了一个给定对象的继承等级,采用了递归算法,可以显示对象继承的所有类和实现的所有接口。
//Hierarchy.java
import java.util.*;
import javax.swing.*;

public class Hierarchy {
  public static void showSuperClasses(Class c) {
    Class superClass = c.getSuperclass();
    if (superClass != null) {
      prt(superClass.getName());
      showSuperClasses(superClass);
    }
  }

  public static void showSuperClasses(Object o) {
    showSuperClasses(o.getClass());
  }

  public static void showInterfaces(Class c) {
    Class[] interfaces = c.getInterfaces();
    for (int i = 0; i < interfaces.length; i++) {
      prt(interfaces[i].getName());
      showInterfaces(interfaces[i]);
    }
  }

  public static void showInterfaces(Object o) {
    showInterfaces(o.getClass());
  }

  public static void showHierarchy(Class c) {
    Class superClass = c.getSuperclass();
    Class[] interfaces = c.getInterfaces();

    if (superClass != null) {
      prt("extends: ");
      prt(superClass.getName());
      showHierarchy(superClass);
    }

    for (int i = 0; i < interfaces.length; i++) {
      prt("implements:");
      prt(interfaces[i].getName());
      showHierarchy(interfaces[i]);
    }
  }

  public static void showHierarchy(Object o) {
    showHierarchy(o.getClass());
  }

  public static void prt(String s) {
    System.out.println(s);
  }

  public static void main(String[] args) {
    //showSuperClasses(new ArrayList());
    //showInterfaces(new ArrayList());
    showHierarchy(new Z1());
  }
}

interface A1 {}

interface A2
    extends A1 {}

interface B1 {}

interface B2
    extends B1 {}

interface C1 {}

interface C2
    extends C1 {}

class X1 implements A2{}
class Y1 implements B2{}
class Z1 extends X1 implements C2{}

说说 JavaScript 如何实现对象继承

1 原型链可以利用 JavaScript 原型,让一个引用类型继承另一个引用类型的属性和方法://父类 function SuperType() { this.property = true;...
  • deniro_li
  • deniro_li
  • 2017年03月23日 14:55
  • 391

没有父类的Java Class是如何从Object继承的

经常有Java初学者会问为什么一个没有父类的Java类会自动从java.lang.Object类继承。本文将从实践的角度来为大家进行深度剖析。 AD:2014WOT全球软件技术峰会北京站 课程视频发布...
  • congcongsuiyue
  • congcongsuiyue
  • 2014年09月26日 13:00
  • 1341

JAVA面向对象 类的继承

本页面更新日期: 2016年07月30日前言 继承是面向对象的三大特征之一. 也是实现软件复用的重要手段. Java继承具有单继承的特点, 每个子类只有一个直接父类. 继承的特点 ...
  • tmdlife
  • tmdlife
  • 2016年07月26日 20:10
  • 1363

Java学习笔记——类与对象(封装、继承与多态)

类与对象是在OO变成里面经常出现的字眼,简单的可以理解为类是一类对象的抽象,对象是某一个类的具体实现。面向对象的编程,其实主要就体现在封装、继承与多态这三个方面。下面将逐个的介绍这三个名词。 一、封...
  • kyoky_xxj
  • kyoky_xxj
  • 2013年04月23日 11:06
  • 1618

C++类和对象的继承和派生

1 实验内容及目的 l 实验目的 理解和掌握C++类和对象的继承和派生。 l 实验内容 创建一个MyPoint类来建模二维空间中的一个点。MyPoint类包含两个属性x和y,表示x轴和y轴坐标...
  • huangxuming1
  • huangxuming1
  • 2014年06月01日 11:12
  • 889

Object类,接口类与抽象类

1、Object类             a、Object类是所有Java的基类,所有的Java类都可以覆写其中的非私有,非静态。             b、在不明确指定某一个Java类的父类...
  • sinat_28979319
  • sinat_28979319
  • 2016年07月26日 20:38
  • 530

Kotlin语法(六)-类和继承

类 1.     声明类          Kotlin使用关键字*class *{:.keyword}声明类。类声明包括类名、类头(指定其类型参数,主构造函数等)和这个类的主干。类头和主体都是可选的...
  • tangxl2008008
  • tangxl2008008
  • 2016年08月13日 17:03
  • 4450

Yii框架中属性概念及Object基类的分析

属性(Property)属性用于表征类的状态,从访问的形式上看,属性与成员变量没有区别。你能一眼看出$object->foo中的foo是成员变量还是属性么?显然不行。但是,成员变量是就类的结构构成而言...
  • wxwrjgcs
  • wxwrjgcs
  • 2016年05月22日 23:28
  • 610

深入理解js面向对象之继承

先前整理过js作用域和this关键字的用法,以及分析过js面向对象各种方式,这些都是实现js面向对象所必须的。忘记的话看这里:js面向对象 首先来分析一下js中实现面向对象的重要成员protot...
  • u012545279
  • u012545279
  • 2013年10月23日 13:33
  • 1205

java中类继承的简单应用案例

问题描述: 某公司的雇员分为以下若干类: 1、Employee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份。方法:getSalary(intmonth) 根据参数月份来确定工资,如果...
  • henu2009220176
  • henu2009220176
  • 2013年08月25日 10:20
  • 2291
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:显示一个对象的继承等级,Class类的应用
举报原因:
原因补充:

(最多只允许输入30个字)