2013-08-01 4 views
1

Прямо сейчас я готовлюсь к экзамену OCJP/SCJP. и я делаю все свои программы черезСкомпилируйте два класса в одном пакете

Командная строка. Я просто обнаружил одну проблему.

У меня есть два класса Class1 и Class2. Оба находятся в упаковке1.

package pack1; 

public class Class1 
{ 
     int var1 = 1; 
     private int var2 = 2; 
     public int var3 = 3; 
     protected int var4 = 4; 
} 

Я могу скомпилировать этот класс из pack1 direcory.

второго класса

package pack1; 
public class Class2 extends Class1 
{ 
     public void accessVars() 
     { 

       System.out.println(var1); 
       System.out.println(var2); 
       System.out.println(var3); 
       System.out.println(var4); 
     } 

     public static void main(String args[]) 
     { 
       Class2 c = new Class2(); 
       c.accessVars(); 
     } 
} 

я не могу скомпилировать этот класс из каталога pack1. я получаю «Не могу найти ошибку Symbol для Class1», но я могу скомпилировать ее извне, импортировав pack1.Class1;

Я знаю, почему это происходит, но я проверил в NetBeans, что они могут скомпилировать класс без импорта. Как ? Что я должен сделать для его создания в каталоге pack1.

Спасибо, Kshitij

ответ

2

Вы не можете получить доступ к private переменных вне класса. Изменение их общественного или protectd, если вы хотите, чтобы они были доступны в Class2

сделать следующим

javac pack1/Class1.java 
javac pack1/Class2.java 

Короче,

  • При компиляции упакованных файлов Java, а затем компилировать из каталог, из которого начинается структура пакета. например в вашем случае javac pack1.Class1.java
  • При попытке их запуска используйте полностью квалифицированные имена классов, например. java pack1.Class2

Вы можете прочитать это хороший учебник по how to compile and launch java programs in package structure

+0

работает. Можете ли вы объяснить это в двух или трех строках. – KSHiTiJ

+0

Я отредактировал ответ соответствующим образом и добавил некоторые ссылки ссылки –

+0

Пожалуйста, удалите выше code class1 и Class2. Я уже знаю различия между частными, общедоступными, защищенными и дефолтными. Моя ошибка касалась только компиляции. что вы решили его и объясните. Пожалуйста, удалите его после того, как я приму ваш ответ. – KSHiTiJ

1

Я думаю, ваша проблема здесь в Class2:

System.out.println(var2); 

var2 является частным в Class1, нет никакого способа это можно увидеть Class2

0

К компиляции-

javac pack1\Class1.java 
javac pack1\Class2.java 

Для RUN-

java pack.Class2 

Кроме того, как другие уже упоминалось, вы не можете получить доступ к закрытому члену другого класса. Вы можете дать получателям этих членов. Getters являются публичными.

например.в Class1-

public int getVar2(){ 
    return this.var2; 
} 

Теперь из Class2, вы можете DO-

System.out.println(c.getVar2()); 
Смежные вопросы