उदाहरण के निरंतर उपयोग से परहेज करते हुए मेरे पास तीन वर्ग, एक अमूर्त उपयोगकर्ता और दो विशिष्ट हैं: सामान्य यूज़र जिसमें एक या अधिक पता वस्तुओं का एक ऐरेलिस्ट होता है जो अलग-अलग (घरेलू, अंतर्राष्ट्रीय, कस्टम इत्यादि) हो सकता है और फिर एडमिन क्लास जिसमें एक विधि है जो सच होती है। उनमें दोनों में अधिक विधियां होती हैं जो एक-दूसरे से असंबंधित होती हैं।जावा विरासत और
abstract class User{
public User(String username, String pw){
...
}
public class NormalUser extends User{
...
private ArrayList<Address> addresses;
...
public void addAdress(ArrayList<Address> address){
addresses.addAll(address);
}
public class Admin extends User{
...
public boolean getIsAdmin(){
return true;
}
}
अब एक और कक्षा में अगर मैं उदाहरण के लिए इस तरह 4 उपयोगकर्ता वस्तुओं बनाने:
ArrayList<User> users;
users.add(new NormalUser("1", "pw");
users.add(new NormalUser("2", "pw");
users.add(new NormalUser("3", "pw");
users.add(new NormalUser("4", "pw");
users.add(new Admin("5", "pw"));
users.add(new NormalUser("6", "pw");
और कहते हैं कि मैं NormalUser में addAddress विधि का उपयोग करना चाहते हैं, तो मैं में specfic उपयोगकर्ता खिन्न करने के लिए है NormalUser करने के लिए उपयोगकर्ताओं, इससे पहले कि मैं इस तरह NormalUser में addAddress विधि का उपयोग कर सकते हैं:
if (user instanceof NormalUser){
NormalUser normal = (NormalUser) user;
normal.addAddress(...)
}
कारण है कि मैं दोनों NormalUser और व्यवस्थापक एक उपयोगकर्ता होना चाहते हैं तो मैं उनका संसाधन करूं है लॉग इन करते समय।
मैंने उपयोगकर्ता वर्ग में एडईमेल जोड़ने और फिर NormalUser क्लास में इसे ओवरराइड करने का विचार किया, लेकिन मुझे NormalUser क्लास में प्रत्येक विधि के लिए ऐसा करना होगा, साथ ही व्यवस्थापक इसे प्राप्त करेगा उपयोगकर्ता भी, जब इसे उस कार्यक्षमता की आवश्यकता नहीं होती है।
प्रश्न 1: क्या ऐसा करने का कोई बेहतर तरीका है जैसा कि मैंने उदाहरण का उपयोग करके सुना है एक बुरी चीज है? और जब भी मैं NormalUser क्लास के लिए विशिष्ट विधि का उपयोग करता हूं, तो मुझे हर बार उदाहरण का उपयोग करना होगा।
Quesiton 2: क्या वस्तु का एक ऐरेलिस्ट नियमित उपयोगकर्ता को विशिष्ट पते/(ऑब्जेक्ट्स) से जोड़ने का सबसे अच्छा तरीका है?
अभी कोई डेटाबेस शामिल नहीं है।
इसलिए उदाहरण के लिए उपयोगकर्ता एक 2 पतों एक घरेलू और एक अंतरराष्ट्रीय है, और उपयोगकर्ता ख सिर्फ एक घरेलू पता है, उपयोगकर्ता ग एक घरेलू और एक कस्टम पता आदि
धन्यवाद है।
पीएस। मैंने पिछली पोस्टों को व्यापक रूप से खोजा है लेकिन एक समाधान मिला है। मेरी जावा किताबों दोनों में वे दोनों उदाहरण का उपयोग करने के उदाहरण दिखाते हैं लेकिन इसका कोई बुरा अभ्यास नहीं है।
इस विशिष्ट मामले के रूप में, मुझे डर है कि मैं वास्तव में यह नहीं कह सकता कि कौन सा बेहतर है, लेकिन नहीं, 'exampleof' परिभाषा द्वारा एक बुरी चीज नहीं है। जब पॉलिमॉर्फिज्म अधिक उचित होता है तो आपको इसे अधिक उपयोग नहीं करना चाहिए। –
'exampleof' से संबंधित: आपको अपने डिज़ाइन पर पुनर्विचार करना चाहिए जैसे कि आप मूल' उपयोगकर्ता 'पर' addAddress' को कभी भी कॉल न करें। आपको केवल उस विधि को कॉल करना चाहिए जब आप कोड के ब्लॉक में हैं जो विशेष रूप से 'NormalUser' के लिए डिज़ाइन किया गया है। – toto2
क्या प्रशासन के पास एड्रेस नहीं होने का कोई अच्छा कारण है? – soulcheck