2016-01-22 3 views
0

Предположим, у меня есть два классаЕсть ли способ получить имя класса, используя унаследованный метод суперкласса?

class A { 
public static String getMyClassname() 
{ 
    // return the class name it was called on 
} 
} 


class B extends A{} 

Есть ли утилита в Java, что позволяет мне, если я называю A.getMyClassname() я получаю A и если я называю B.getMyClassname(), я хотел бы получить B?

+0

Я потратил достаточно времени на поиск в google и stackoverflow для этого вопроса, и я придерживаюсь правил вопросов здесь. Итак, если вы видите, что этот вопрос не полезен и собирается его проголосовать, пожалуйста, по крайней мере, объясните, почему. –

ответ

0

Да, если вы сделаете метод нестатический

class A { 

    public String getMyClassname() { 
     return this.getClass().getSimpleName(); 
    } 
} 


class B extends A {} 

Вы можете сделать

A a = new A(); 
B b = new B(); 

System.out.println(a.getMyClassname()); 
System.out.println(b.getMyClassname()); 

Выход

A 
B 
1

Зачем использовать статические? Просто переопределите эту функцию, не используя static, а затем вызовите метод.

Что-то вроде этого:

class A { 
    public String getMyClassname() 
    { 
     return "A" 
    } 
} 


    class B extends A { 
    @override 
    public String getMyClassname() 
    { 
     return "B" 
    } 
} 
Смежные вопросы