জাভাতে কোনও 'সাবক্লাস-কেবল' অ্যাক্সেস মডিফায়ার নেই কেন?


17

জাভাতে, পদ্ধতির জন্য চারটি অ্যাক্সেস মডিফায়ার রয়েছে:

public - যে কোনও শ্রেণি এই পদ্ধতিটি ব্যবহার করতে পারে।

protected - একই প্যাকেজের ক্লাস এবং যে কোনও প্যাকেজের সাবক্লাসগুলি এই পদ্ধতিটি ব্যবহার করতে পারে।

private - শুধুমাত্র এই শ্রেণিটি এই পদ্ধতিটি ব্যবহার করতে পারে।

no modifier ("প্যাকেজ বেসরকারী") - একই প্যাকেজের কেবল ক্লাসগুলি এই পদ্ধতিটি ব্যবহার করতে পারে।

প্রায়শই যা ঘটে তা হ'ল আমি একটি সুপারক্লাসে দরকারী পদ্ধতি থাকতে চাই, যা সমস্ত উপশ্রেণী ব্যবহার করতে পারে। তবে অন্যান্য শ্রেণীর পক্ষে এই পদ্ধতিটি অ্যাক্সেস করা কোনও অর্থবোধ করে না এবং এক অর্থে এটি এনক্যাপসুলেশনটি ভেঙে দেয়।

সুতরাং আমাকে সুপারক্লাসে এই দরকারী পদ্ধতিগুলি ঘোষণা করতে হবে publicবা protectedযা কমপক্ষে প্যাকেজে অন্য সমস্ত শ্রেণীর কাছে তাদের প্রকাশ করে। যদিও সেগুলি কেবলমাত্র সাবক্লাস দ্বারা ব্যবহার করা বোঝানো হয়েছিল।

subclasses-onlyজাভাতে অ্যাক্সেস মডিফায়ার না থাকার কোনও কারণ আছে কি ? এটি আমার কাছে খুব অদ্ভুত বলে মনে হচ্ছে। আমি কিছু অনুপস্থিত করছি?

এছাড়াও, subclasses-onlyযখন আপনি কেবল পরিবর্তনশীলগুলিকে কেবল সাবক্লাসে প্রকাশ করতে চান তখন অ্যাক্সেস মডিফায়ারও কার্যকর হবে। আমার কাছে যা অনেক ঘটে।

উত্তর:


10

কারণ আপনি সুরক্ষিত মডিফায়ার ব্যবহার করে এবং কেবলমাত্র পিতামাত্ত শ্রেণি এবং তার সাবক্লাসগুলি একই প্যাকেজের মধ্যে রয়েছে তা প্রয়োগ করে আপনি কেবল সাবক্লাস-কেবলমাত্র সংশোধককে অনুকরণ করতে পারেন ।

এটি প্রকৃতপক্ষে একটি ভাল অনুশীলন, কারণ প্যাকেজগুলি সংহতি হিসাবে কেবল বড় প্রকল্পগুলি সংগঠিত করতে সহায়তা করে না, তবে তারা এটিও দেখায় যে একই প্যাকেজের ক্লাসগুলির সংযোগের কিছু স্তর থাকতে পারে।


15
"এবং বলছেন যে কেবল পিতামাত্ত শ্রেণি এবং এর উপক্লাসগুলি একই প্যাকেজে রয়েছে" - এখন, কেউ কীভাবে এটি করতে পারে ?!
জিমিবি

1
এবং তারপরে আপনি প্যাকেজ-কেবল অ্যাক্সেস সংশোধক ব্যবহার করতে পারবেন না। এবং আপনার একটি নির্বোধ পরিমাণ প্যাকেজ দরকার। এটি ব্যবহারিক সমাধান নয়।
ব্যবহারকারী 253751

13

জাভাতে মূলত এমন একটি সংশোধক ছিল। এটি private protectedজাভা 1.0 তে লিখিত ছিল কিন্তু সরানো হয়েছিল।

আমি ধরে নিই যে এটি একটি রায় কল ছিল যে অতিরিক্ত জটিলতা ব্যয়যোগ্য নয়।

প্রতিটি ভাষার বৈশিষ্ট্যের একটি ব্যয় থাকে: নতুন প্রোগ্রামারগুলিকে এটি শেখানোর ক্ষেত্রে; ডকুমেন্টেশনে; সংকলক, জেভিএম, এবং ডিভাইসগুলিতে এটি প্রয়োগে; প্রোগ্রামের সঠিকতা সম্পর্কে যুক্তিতে; ভবিষ্যতের ভাষার বিবর্তনকে সীমাবদ্ধ করতে; এবং আরও। ভাষা বৈশিষ্ট্যগুলি একে অপরের সাথে যোগাযোগ করে, সম্ভাব্যভাবে এন 2 ইন্টারঅ্যাকশনগুলির সাথে।

জাভা প্রোগ্রাম স্পেস এবং ভিএম স্পেকের মাধ্যমে জাভা প্রোগ্রামাররা কত শতাংশ পড়েছেন? আমি বাজি ধরছি এটি একটি ছোট শতাংশ, যা বোঝার এবং ইঞ্জিনিয়ারিং পণ্যগুলির জন্য আমরা নির্ভর করতে পারি তার জন্য এমনকি আরও সহজ ভাষার পক্ষে যুক্তিযুক্ত

সুবিধার private protectedবৈশিষ্ট্য ছোট ছিল যেহেতু প্যাকেজ modularity এর প্রধান ইউনিট।


1
সুতরাং 1.0 এর আগে একটি জাভা সংস্করণ ছিল?
ইয়িস্রি

1
১৯৯৯ সালে @ মারকইইসরি জাভাতে সর্বজনীন আলফা এবং বিটা প্রকাশ হয়েছিল এবং তাদের বিরুদ্ধে বেশ কয়েকটি কোড লেখা হয়েছিল।
ডেভিড মোলস

4

ক্লাসের পদ্ধতি এবং যথাযথতা সম্পর্কে আপনার শ্রেণীর সাথে কাজ করা একজন কাল্পনিক বিকাশকারী সাথে আবরণ হিসাবে অ্যাকসেস নিয়ন্ত্রণ হিসাবে ভাবা যেতে পারে ...

আপনি: বলুন যে আপনি এক্স করতে চান, আপনি পদ্ধতিটিকে ডক্স বলে থাকেন .. দেব: আমাকে আরও বলুন..তর্ক কী?

এটি সর্বজনীন ...

আপনি: ডক্সের অভ্যন্তরে আমি কল করি ... ডিইভি: ওহ, খুব বেশি তথ্য, আমি সে সম্পর্কে পাত্তা দিই না। আমি এটি কীভাবে ব্যবহার করতে হয় তা জানতে চাই। আমাকে অন্য কিছু বলুন।

এটি ব্যক্তিগত ...

আপনি: সাবক্লাসিং করার সময়, আমার কাছে ডক্স এবং ডু ডু কল রয়েছে যা এটি করে .. ডিইভি: হ্যাঁ, আমি সাবক্লাস করছি, আমাকে আরও বলুন ...

এটি সুরক্ষিত ...

আপনি: আমি এক ঘন্টার মধ্যে ছুটিতে যাচ্ছি, আমি পরের 6 মাসের জন্য চলে যাব। বস বলছেন এই কুকুরছানাটি আপনার! বাই। ডিভি: অপেক্ষা করুন এখনও যাবেন না, আমাকে সব কিছু বলুন ...

এটি প্যাকেজ।

আপনি: পদ্ধতিটি করুন যখন এই ক্লাসটি কেবলমাত্র ডাকে এবং এটি দশ বছরে পরিবর্তিত হয়নি। এটি ... ডিভি: ওহ, আমরা 50 মিনিটে নেমেছি। পরবর্তী সম্পত্তি, এবং দ্রুত কথা বলুন।

এটি ব্যক্তিগত সুরক্ষিত ...


3

এটি ইতিমধ্যে বিদ্যমান। এটি সুরক্ষিত

প্যাকেজের মধ্যে কী ক্লাস রয়েছে তা আপনার নিয়ন্ত্রণে রয়েছে। যদি প্যাকেজে অন্য কোনও শ্রেণি না থাকে এবং প্রদত্ত পরিবর্তনশীল বা পদ্ধতি সুরক্ষিত থাকে তবে এটি 'কেবলমাত্র সাবক্লাস'।

এটি বলেছিল, আবারও, প্যাকেজের মধ্যে কী ক্লাস রয়েছে তা আপনার নিয়ন্ত্রণে রয়েছে। আপনি কেবল সুরক্ষিত পদ্ধতি বা ভেরিয়েবল ব্যবহার না করা বেছে নিতে পারেন।


3
নির্দিষ্ট সংরক্ষিত সিস্টেম প্যাকেজগুলি বাদ দিয়ে, আমি কি কোনও প্যাকেজে ক্লাস যুক্ত করতে পারি না, এমনকি আপনার একটিরও যে আপনি আমার ক্লাস যুক্ত করার ইচ্ছা করেন না?
ডেভিড মোলস

@ ডেভিড আইআইআরসি হ্যাঁ, তবে এটি আপনাকে অন্য জেআর থেকে প্যাকেজ ক্ষেত্রগুলিতে অ্যাক্সেস করতে দেবে না এমনকি যদি আপনি এটি একই প্যাকেজে রেখে দেন তবে এটি অন্য জেআরে থাকলেও আপনি এটি অ্যাক্সেস করতে পারবেন না। তবে, আপনি যদি একই জারের মধ্যে উল্লেখ করছেন, তবে হ্যাঁ, আপনি এটি অ্যাক্সেস করতে পারবেন, তবে আপনি যদি জেআরটিকে প্রশ্নে পরিবর্তন করতে সক্ষম হন তবে আপনি সহজেই অ্যাক্সেসের সংশোধক পরিবর্তন করতে পারেন।
পোকেচু 22

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