Все суперклассы класса

#java #oop

#java #ооп

Вопрос:

У меня есть класс, который распространяется на другой класс, и этот класс распространяется на другой класс.

 class 1 extends class 2 
class 2 extends class 3 
class 3 extends class 4 
class 4 extends class 5 
class 5 extends class 6 
  

Теперь я хочу найти все суперклассы класса 1.

Кто-нибудь знает, как я мог бы сделать это на java?

Ответ №1:

Используйте Class.getSuperClass() для обхода иерархии.

 Class C = getClass();
while (C != null) {
  System.out.println(C.getName());
  C = C.getSuperclass();
}
  

Комментарии:

1. Просто чтобы убедиться, это привело бы к выводу: 1,2,3,4,5,6, если бы это было C.getSimpleName() вместо C.getName()?

Ответ №2:

Вы можете использовать getSuperclass() вплоть до Object .

Но сначала прочитайте документ, чтобы понять, что он возвращает в случае интерфейсов и т.д. На той же странице есть и другие методы, с которыми можно поиграть.

Комментарии:

1. о да!! хороший … спасибо .. вызывайте цикл, пока я не получу объект как суперкласс !!:) …

2. Да, или null … смотрите документ 🙂

Ответ №3:

В качестве варианта с узким циклом вместо этого вы можете использовать for цикл:

 for (Class super_class = target_class.getSuperclass();
     super_class != null;
     super_class = super_class.getSuperclass())
  // use super class here
  

Ответ №4:

Рекурсивно вызывайте, getSuperclass начиная с экземпляра Class1 , пока не достигнете Object .

Ответ №5:

Используйте отражение:

 public static List<Class> getSuperClasses(Object o) {
  List<Class> classList = new ArrayList<Class>();
  Class clazz = o.getClass();
  Class superclass = clazz.getSuperclass();
  classList.add(superclass);
  while (superclass != null) {   
    clazz = superclass;
    superclass = class.getSuperclass();
    classList.add(superclass);
  }
  return classList;
}
  

Комментарии:

1. Это приведет к добавлению null в коллекцию, если вы передадите экземпляр Object методу. Вы должны выполнить все вызовы class.getSuperclass() в цикле while.

Ответ №6:

Другие ответы верны в отношении использования Class.getSuperclass() . Но вам придется делать это неоднократно. Что-то вроде

 Class superClass = getSuperclass();
while(superClass != null) {
    // do stuff here
    superClass = superClass.getSuperclass();
}