"প্যাকেজ ব্যক্তিগত" সদস্য অ্যাক্সেস ডিফল্ট (নো-সংশোধক) অ্যাক্সেসের সমার্থক নয়?


95

"প্যাকেজ বেসরকারী" শব্দটি সম্পর্কে আমি কিছুটা বিভ্রান্ত হয়ে পড়েছি যা কিছু ডকুমেন্টেশন ব্যবহার করে "ডিফল্ট অ্যাক্সেস" ব্যবহার করে। প্যাকেজ-প্রাইভেট এবং ডিফল্ট অ্যাক্সেস উভয়ই সুরক্ষার সমার্থক নয়?


7
সুতরাং, প্যাকেজ ব্যক্তিগত অ্যাক্সেস প্রকাশ করার জন্য কোনও কীওয়ার্ড নেই? এটি কেবল অ্যাক্সেস সংশোধক নির্দিষ্ট না করেই বোঝানো হয়েছে?
টার্টলটোস

5
টার্টলটোস, এটি ঠিক, এবং জাভা 8-তে এটি কিছুটা বিভ্রান্তিকর হতে পারে, যেহেতু default(ইন্টারফেস) পদ্ধতির সামনে সংশোধনকারী রাখা সম্ভব since তবে এটি কোনও এক্সেস মডিফায়ার নয়! সমস্ত অ্যাক্সেস মডিফায়ার এবং তাদের স্কোপগুলি এই টেবিলটিতে স্পষ্টভাবে ভিজ্যুয়ালাইজড ।
আইয়ুব

উত্তর:


137

হ্যাঁ, এটি প্রায় একই রকম। সংরক্ষিত পরিবর্তক নির্দিষ্ট করে সদস্য শুধুমাত্র নিজস্ব প্যাকেজ মধ্যে অ্যাক্সেস করা যেতে পারে এবং (প্যাকেজ-ব্যক্তিগত মত) ছাড়াও আরেক প্যাকেজের মধ্যে তার বর্গ একটি উপশ্রেণী দ্বারা।


এখানে অনেক ভাল উত্তর ছিল, তবে এটি একটি এটিকে সহজ এবং বিন্দুতে ব্যাখ্যা করেছে, তাই আমি এটি গ্রহণ করছি
টার্টলটোস

23
তার মূল্য লক্ষ করেন, ইন্টারফেস সদস্য ডিফল্ট অ্যাক্সেস না প্যাকেজ-ব্যক্তিগত।
পিটার লরি

4
@ পিটারলাউরে ওহ? ইন্টারফেস সদস্যদের জন্য তখন ডিফল্ট অ্যাক্সেসটি কী?
আর্টঅফ ওয়ারফেয়ার

8
কোনও ক্ষেত্রের জন্য ডিফল্ট হ'ল public static finalএকটি পদ্ধতির জন্য public abstract, এনাম বা টীকা দেওয়ার জন্য publicএবং এটি একটি শ্রেণীর জন্যpublic static
পিটার ল্যারি

36

"ডিফল্ট" অ্যাক্সেস মডিফায়ার (যার মধ্যে একটিও স্পষ্টভাবে দেওয়া হয় না) হ'ল "প্যাকেজ-প্রাইভেট", যার অর্থ একই প্যাকেজের কেবল জিনিসগুলি সেগুলিতে অ্যাক্সেস করতে পারে। যাইহোক, একই প্যাকেজে থাকা ক্লাসগুলির মধ্যে উত্তরাধিকারের সম্পর্ক সম্পর্কে কিছুই বোঝায় না - এটি নিখুঁত একটি নামকরণের সম্মেলন।

"সুরক্ষিত" এর অর্থ হ'ল কেবল একই প্যাকেজটিতে ক্লাসই নয়, সাবক্লাসগুলিও (যে প্যাকেজটি এই সাবক্লাসে রয়েছে তা নির্বিশেষে) এটি অ্যাক্সেস করতে সক্ষম হবে।


সুরক্ষিত সম্পর্কে আপনার কথাটি ভুল .. একই প্যাকেজ শ্রেণীর উদাহরণগুলি সুরক্ষিত সদস্যদের অ্যাক্সেস করতে পারে ..
গুরসেল কোকা

15

ক্লাসগুলির জন্য ডিফল্ট অ্যাক্সেস প্যাকেজ-ব্যক্তিগত, তবে ইন্টারফেস সদস্যদের জন্য ডিফল্ট অ্যাক্সেস সর্বজনীন।

যেমন

public interface I {
   int A = 1;
// same as
   public static final int A = 1;

   void method();
// same as
   public abstract void method();

   class C { }
// same as
   public static class C { }
}

ইন্টারফেসের জন্য ডিফল্ট অ্যাক্সেসের নিয়ম ক্লাসগুলির মতো নয়।


3

প্যাকেজ-ব্যক্তিগত এবং ডিফল্ট অ্যাক্সেস প্রতিশব্দ। যার প্লেসগুলি একই প্যাকেজে রয়েছে তাদের অবজেক্টের সুরক্ষিত সদস্যকেও কোনও অ্যাক্সেস অ্যাক্সেস করতে পারে। কোনও বস্তু তার প্যাকেজ সম্পর্কে কোনও শর্ত ছাড়াই তার সুপারক্লাসের সুরক্ষিত সদস্যকে অ্যাক্সেস করতে পারে। একটি দৃ concrete় উদাহরণ হিসাবে:

package ab;

class A {
   protected void foo() {}
   void dd(){}
}

class C {
   void aa(){
       A a = new A();
       a.foo(); //legal
       a.dd();  //legal
   }
}


package sub;

class D extends A{
      void ac(){
         foo(); //legal ..
         dd();  //illegal.. because dd has default access.. 
      }

class E {
    void ee(){
       A a = new A();
       a.foo(); //illegal
       a.dd();  //illegal     
    }

ডাউনভিটার এই ব্যাখ্যাটির কী ভুল তা ব্যাখ্যা করতে পারে? .. খারাপ কথা বলা ছাড়া ..
গুরসেল কোকা

6
আমি ডাউনভোটার নই, তবে আমার ধারণা এটি ঠিক কারণ নয়; কোনও বস্তু প্যাকেজ নির্বিশেষে সুপার ক্লাসের সুরক্ষিত সদস্যদের অ্যাক্সেস করতে পারে ।
অ্যাড্রিয়ান পেট্রেস্কু

1

'প্যাকেজ ব্যক্তিগত' এবং ডিফল্ট অ্যাক্সেস একই। প্রায় 1.1.2 / 3 এর কাছাকাছি সংকলকের প্রারম্ভিক রিলিজগুলিতে, 'প্যাকেজ' ছিল একটি অনুমোদিত মডিফায়ার, তবে উপেক্ষা করা, যার অর্থ কোনও সংশোধক নয়, অর্থাত্ 'প্যাকেজ ব্যক্তিগত'। এর অল্প সময়ের মধ্যেই /*package*/এ জাতীয় পরিস্থিতিতে (একটি মন্তব্য হিসাবে) রাখার জন্য একটি স্বল্প সময়ের ফ্যাশন ছিল was একইভাবে সেই সময় আপনি সিঙ্ক্রোনাইজ করা ক্লাসগুলির মতো জিনিসগুলি ঘোষণা করতে পারেন, যদিও আবার কোনও আসল শব্দার্থিক প্রভাব ছিল না।

এগুলির কোনওটিই 'সুরক্ষিত' এর মতো নয়, যা অন্যান্য প্যাকেজগুলিতে উত্পন্ন ক্লাস পর্যন্ত প্রসারিত।


0

থেকে জাভা ভাষা ফটকা খেলা

  • .6..6.৫ উদাহরণ: ডিফল্ট-অ্যাক্সেস ক্ষেত্র, পদ্ধতি এবং কনস্ট্রাক্টর যদি জনসাধারণ, সুরক্ষিত বা ব্যক্তিগত কোনও অ্যাক্সেস সংশোধক নির্দিষ্ট না করে থাকে তবে শ্রেণীর সদস্য বা কনস্ট্রাক্টর সেই প্যাকেজ জুড়ে অ্যাক্সেসযোগ্য যেখানে ক্লাসটির ক্লাসের ঘোষণা রয়েছে সদস্য ঘোষিত হয় তবে শ্রেণি সদস্য বা কনস্ট্রাক্টর অন্য কোনও প্যাকেজে অ্যাক্সেসযোগ্য নয়।

যদি কোনও সার্বজনীন শ্রেণীর ডিফল্ট অ্যাক্সেস সহ কোনও পদ্ধতি বা নির্মাতা থাকে, তবে এই পদ্ধতি বা নির্মাণকারী অ্যাক্সেসযোগ্য নয় বা এই প্যাকেজের বাইরে ঘোষণা করা সাবক্লাস দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত


4
তবে "প্যাকেজ বেসরকারী" সম্পর্কে কী। এটি জেএলএসে নেই।
টম হাটিন -

-1

ডিফল্ট এবং প্যাকেজ-প্রাইভেট উভয়ই সমান, যার অর্থ উভয় যে কোনও শ্রেণীর দ্বারা একই প্যাকেজে না আসা পর্যন্ত ব্যবহৃত হতে পারে।

প্যাকেজ-ব্যক্তিগত শব্দ, আসলে অর্থ দ্বারা বলা হয় ব্যক্তিগত পরিবর্তক হিসাবে ব্যক্তিগত মানে শুধুমাত্র একই ক্লাসে পাওয়া যায় এবং অন্য কোন ক্লাস বা উপশ্রেণী একই প্যাকেজ মধ্যে অথবা ছাড়াই এটি অ্যাক্সেস করতে পারেন।

সুতরাং প্যাকেজ-ব্যক্তিগত মানে ডিফল্ট হিসাবে একই ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.