दूसरों के रूप में समझा दिया है, वहाँ एक "सबपैकेज" जावा में जैसी कोई चीज नहीं है: सभी संकुल अलग कर रहे हैं और अपने माता-पिता से कुछ भी नहीं प्राप्त करती हैं।
किसी अन्य पैकेज से संरक्षित वर्ग के सदस्यों तक पहुंचने का एक आसान तरीका कक्षा का विस्तार करना और सदस्यों को ओवरराइड करना है।
उदाहरण के लिए, पैकेज a.b
में ClassInA
तक पहुँचने के लिए:
package a.b;
import a.ClassInA;
public class ClassInAInB extends ClassInA{
ClassInAInB(String data){ super(data); }
@Override
protected byte[] getDataAsBytes(){ return super.getDataAsBytes(); }
}
आप अधिभावी वर्ग का उपयोग करने देता है कि:
package a;
public class ClassInA{
private final String data;
public ClassInA(String data){ this.data = data; }
public String getData(){ return data; }
protected byte[] getDataAsBytes(){ return data.getBytes(); }
protected char[] getDataAsChars(){ return data.toCharArray(); }
}
कि पैकेज है कि तरीकों को ओवरराइड करता है में एक वर्ग आप ClassInA
में की जरूरत बनाने के अन्य पैकेज में कक्षा के स्थान पर:
package a.b;
import java.util.Arrays;
import a.ClassInA;
public class Driver{
public static void main(String[] args){
ClassInA classInA = new ClassInA("string");
System.out.println(classInA.getData());
// Will fail: getDataAsBytes() has protected access in a.ClassInA
System.out.println(Arrays.toString(classInA.getDataAsBytes()));
ClassInAInB classInAInB = new ClassInAInB("string");
System.out.println(classInAInB.getData());
// Works: getDataAsBytes() is now accessible
System.out.println(Arrays.toString(classInAInB.getDataAsBytes()));
}
}
ध्यान दें कि यह केवल संरक्षित सदस्यों के लिए काम करता है, जो कक्षाओं को विस्तारित करने के लिए दृश्यमान हैं, न कि पैकेज-निजी सदस्य, जो नहीं हैं। उम्मीद है कि यह किसी की मदद करता है!
http://stackoverflow.com/questions/2388253/separation-of-junit-classes-into-special-test-package – Abdull
http://stackoverflow.com/questions/13809713/java-package-in-package –
एक तरफ के रूप में, परीक्षणों को केवल पैकेज के बाहर से देखने योग्य आपकी ऑब्जेक्ट्स के * व्यवहार * का परीक्षण करना चाहिए। अपने परीक्षणों से पैकेज-स्कोप विधियों/कक्षाओं तक पहुंचने से मुझे पता चलता है कि परीक्षण शायद कार्यान्वयन का परीक्षण नहीं कर रहे हैं। मेवेन या ग्रेडल जैसे निर्माण उपकरण का उपयोग करके, वे आपके परीक्षणों को उसी कक्षा में चलाने के लिए आसान बना देंगे लेकिन अंतिम जार (एक अच्छी बात) में शामिल नहीं किया जाएगा, इस प्रकार उनके पास अलग-अलग पैकेज नाम होने की आवश्यकता नहीं है। फिर भी उन्हें अलग-अलग पैकेजों में डाल देना * यह लागू करना है कि आप निजी/डिफ़ॉल्ट दायरे तक नहीं पहुंचते हैं * और इस प्रकार केवल सार्वजनिक एपीआई का परीक्षण करते हैं। – derekv