2014-01-19 3 views
1

Я столкнулся с этим кодом в учебнике сокетов. Сначала мы создаем массив и поместить экземпляры clientThread в нем:java private class member

public class MultiThreadChatServer { 
... 
private static final clientThread[] threads = new clientThread[maxClientsCount]; 
... 
clientSocket = serverSocket.accept(); 
     int i = 0; 
     for (i = 0; i < maxClientsCount; i++) { 
      if (threads[i] == null) { 
      (threads[i] = new clientThread(clientSocket, threads)).start(); 
      break; 
      } 
     } 

А вот класс clientThread (часть):

class clientThread extends Thread { 

    private DataInputStream is = null; 
    private PrintStream os = null; 
    private Socket clientSocket = null; 
    private final clientThread[] threads; 
    private int maxClientsCount; 

    public clientThread(Socket clientSocket, clientThread[] threads) { 
    this.clientSocket = clientSocket; 
    this.threads = threads; 
    maxClientsCount = threads.length; 
    } 

    public void run() { 
    int maxClientsCount = this.maxClientsCount; 
    clientThread[] threads = this.threads; 

    try { 
     /* 
     * Create input and output streams for this client. 
     */ 
     is = new DataInputStream(clientSocket.getInputStream()); 
     os = new PrintStream(clientSocket.getOutputStream()); 
     os.println("Enter your name."); 
     String name = is.readLine().trim(); 
     os.println("Hello " + name 
      + " to our chat room.\nTo leave enter /quit in a new line"); 
     for (int i = 0; i < maxClientsCount; i++) { 
     if (threads[i] != null && threads[i] != this) { 
      threads[i].os.println("A new user"+name+"entered the chat room"); 
     } 
     } 

Моя проблема заключается в последней строке кода: нити [I] .os.println(). 'os' - частный член, как можно получить доступ к нему за пределами своего собственного класса или без метода getter?

+0

Пробег метода является членом clientThread. Почему он не должен иметь доступ к частному члену os на экземпляре clientThread? – odedsh

+1

@lakshman - в этом нет никакого отражения, и это не нужно. –

+0

Это в своем классе, насколько я могу судить ... –

ответ

4

Он работает для os, потому что экземпляр может обращаться к закрытым членам других экземпляров того же класса. Контроль доступа в Java определяется на уровне класса, а не на уровне экземпляра. Scala, например, имеет модификатор private[this], чтобы отметить участника как индивидуальный уровень экземпляра.

+0

Почему люди не читают полный вопрос? Это называется затенением. – Troubleshoot

+0

@ Устранение неполадок: я прочитал весь вопрос ... Позаботьтесь, чтобы объяснить свои мысли? –

+0

Подтверждает ли какой-либо орган этот ответ? Вы можете получить доступ к закрытым членам других объектов, если они принадлежат к одному классу? –

Смежные вопросы