2015-07-13 3 views
0
interface My{ 
     int x = 10; 
    } 
    class Temp implements My{ 
     int x = 20; 
     public static void main(String[] s){ 
       System.out.println(new Temp().x); 
     } 
    } 

Это печатает результат как 20. Есть ли способ получить доступ к x, принадлежащему интерфейсу в классе?Скрытие данных в интерфейсе java

+0

Почему бы вы поместить данные в интерфейсе. Разве абстрактный класс не был бы лучше подходит для этой цели? – bhspencer

+0

Я изучал интерфейсы, поэтому эта ситуация пришла мне в голову, и, возможно, я бы это сделал, потому что интерфейсы легкие по сравнению с абстрактными классами. –

+0

рассмотрите это http://stackoverflow.com/questions/2430756/why-are-interface-variables-static-and-final-by-default – bhspencer

ответ

2

Вы должны делать явное приведение к типу интерфейса:

System.out.println(((My)new Temp()).x); 

Однако обратите внимание, что x не связана с каким-либо экземпляром My. Поля интерфейса неявно static и final (более констант), то есть выше, может быть сделано с помощью:

System.out.println(My.x); 
0

Вы всегда можете использовать это.

interface My { 

    int x = 10; 
} 

class Temp implements My { 

    int x = 20; 

    public static void main(String[] s) { 
     System.out.println(new Temp().x);  // 20 
     System.out.println(My.x);    // 10 
    } 
} 

поля в Interface всегда static.

+0

@Pshemo, Спасибо за исправление. Обновлен мой ответ. –