2015-09-23 4 views
1

Мой фон - это C++, и мы можем получить доступ к открытым полям родительского класса с дочерним классом. Пример:Доступ к родительскому полю с дочерним объектом Java

#include <iostream> 
class A{ 
    public: 
     void show(){ 
      std::cout << "A"; 
     } 
}; 
class B:public A{ 
    public: 
     void show(){ 
      std::cout << "B"; 
     } 
}; 
int main(){ 
    B obj; 
    obj.A::show(); // it will print A. 
} 

Как я могу это сделать в Java Inheritance?

public class Serial { 
    public void show(){ 
     System.out.println("Serial"); 
    } 
} 
public class Testing extends Serial 
{ 
    @Override 
    public void show(){ 
     System.out.println("Testing"); 
    } 
    public static void main(String[] args){ 
     Testing obj=new Testing(); 
     obj.show(); // it print Testing but how to Print Serial? 
    } 

} 

У меня также есть другой вопрос об переопределении, но из-за правил Stackoverflow. Я задам отдельный вопрос.

Итак, что должно быть синтаксисом для печати/доступа класса родительского класса Java с ссылкой на объект класса класса Child? Я пробовал. obj.super.show(); и т. Д., Но не работает.

+1

Скрытие реализации базового класса в C++ в основном плохая идея. – Wolf

ответ

1

super можно использовать только с классом. Не вне его.

С тех пор, как вы избегаете, вы не можете напрямую вызвать метод super.

Вам разрешено делать только

obj.show(); 

Если вы все еще хотите вызвать супер метод, вы можете изменить свой метод как

@Override 
    public void show(){ 
     super.show(); 
     System.out.println("Testing"); 
    } 

Update:

Coming Родителю и Резервные типы возврата детей,

Эта статья может помочь

http://codeinventions.blogspot.in/2014/11/covariant-contravariant-and-class-invariant-example-and-difference-in-java.html

+0

SURESH Почему я не могу назвать супер в основном? из-за статического ключевого слова? –

+0

№ 'супер' может быть только у ребенка, а не на стороне этого класса. –

+0

@Suresh, но main также внутри дочернего класса. –