সাবক্লাসগুলি কি ব্যক্তিগত ক্ষেত্রের উত্তরাধিকারী?


245

এটি একটি সাক্ষাত্কারের প্রশ্ন।

সাবক্লাসগুলি কি ব্যক্তিগত ক্ষেত্রের উত্তরাধিকারী?

আমি "না" উত্তর দিয়েছি, কারণ আমরা "সাধারণ ওওপি উপায়" ব্যবহার করে সেগুলি অ্যাক্সেস করতে পারি না। তবে সাক্ষাত্কারকারী মনে করেন যে এগুলি উত্তরাধিকার সূত্রে প্রাপ্ত, কারণ আমরা এই ধরনের ক্ষেত্রগুলি পরোক্ষভাবে বা প্রতিবিম্ব ব্যবহার করে অ্যাক্সেস করতে পারি এবং সেগুলি এখনও অবজেক্টে বিদ্যমান।

আমি ফিরে আসার পরে, জাভাদোকটিতে আমি নীচের উদ্ধৃতিটি পেয়েছি :

একটি সুপারক্লাসে ব্যক্তিগত সদস্যরা

একটি সাবক্লাস তার অভিভাবক শ্রেণীর ব্যক্তিগত সদস্যদের উত্তরাধিকারী হয় না।

আপনি কি সাক্ষাত্কারের মতামতের জন্য কোনও যুক্তি জানেন?


33
আমি একবার একই পরিস্থিতিতে ছিলাম এবং আমি বুঝতে পেরেছিলাম এমনকি আমি এমন একটি সংস্থার জন্যও কাজ করতে চাই না যেখানে ইন্টারভিউয়ার আমার চেয়ে জাভা সম্পর্কে কম জানেন। :)
বিজিকলপ 17'11

48
একজন সাক্ষাত্কারকারক কখনও কখনও আপনার সাথে একমত হন না এমনকি যখন তিনি জানেন যে আপনি ঠিক বলেছেন। একজন ভাল সাক্ষাত্কার আপনার প্রযুক্তিগত জ্ঞানের চেয়ে আপনার সম্পর্কে আরও জানার চেষ্টা করবে।
অ্যান্ডি টমাস

4
@ ডিজিটালরোস জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশনটি কি খুব খারাপভাবে লেখা আছে? : RD01 উত্তর দেখার stackoverflow.com/questions/4716040/...
OscarRyz

9
@ অ্যান্ডি টমাস-ক্র্যামার আমি এমন লোকদের সাথে কাজ করতে চাই না যারা ইচ্ছাকৃতভাবে আমার প্রতিক্রিয়া পরীক্ষা করতে মিথ্যা বলছে।
বিজিকলপ

4
ঠিক আছে, আমি মনে করি আমাদের প্রথমে জাভাতে "উত্তরাধিকার" এর অর্থটি বের করা উচিত। সাবক্লাসের ব্যক্তিগত ক্ষেত্র নেই এবং সাবক্লাসের ব্যক্তিগত ক্ষেত্র রয়েছে তবে এটিতে অ্যাক্সেস করা সম্ভব নয়, যা জাভাতে উত্তরাধিকারের সঠিক অর্থ বোঝায়?
MengT

উত্তর:


238

এখানে প্রশ্ন / উত্তরের বেশিরভাগ বিভ্রান্তি উত্তরাধিকার সংজ্ঞাটিকে ঘিরে রয়েছে।

একথাও ঠিক যে, @DigitalRoss একটি ব্যাখ্যা হিসাবে অবজেক্ট একটি উপশ্রেণী তার সুপারক্লাস ব্যক্তিগত ক্ষেত্র থাকা আবশ্যক। যেমনটি তিনি বলেছেন যে কোনও প্রাইভেট সদস্যের অ্যাক্সেস না থাকার অর্থ এটি সেখানে নেই।

যাহোক. এটি কোনও শ্রেণীর জন্য উত্তরাধিকারের ধারণার চেয়ে পৃথক। যেমন জাভা জগতের ক্ষেত্রে, যেখানে শব্দার্থীদের প্রশ্ন রয়েছে সেখানে সালিস হ'ল জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন (বর্তমানে তৃতীয় সংস্করণ)।

জেএলএস যেমন বলেছে ( https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.2 ):

প্রাইভেট হিসাবে ঘোষিত কোনও শ্রেণীর সদস্যরা সেই শ্রেণীর সাবক্লাস দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হয় না। সুরক্ষিত বা জনসাধারণ হিসাবে ঘোষিত শ্রেণীর সদস্যরা কেবলমাত্র ক্লাসে ঘোষিত একটি প্যাকেজে ঘোষিত সাবক্লাস দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত।

এটি সাক্ষাত্কারকারীর দ্বারা উত্থাপিত সঠিক প্রশ্নের সমাধান করে: "সাব ক্লাসগুলি ব্যক্তিগত ক্ষেত্রের উত্তরাধিকারী করুন"। (আমার দ্বারা জোর দেওয়া)

উত্তর না তারা না। সাবক্লাসগুলির OBJECTS তাদের সুপারক্লাসগুলির ব্যক্তিগত ক্ষেত্রগুলি ধারণ করে। সাবক্লাসে নিজেই এর সুপারক্লাসের ব্যক্তিগত ক্ষেত্রগুলির কোনও সংখ্যা নেই।

এটি কি কোনও পেডেন্টিক প্রকৃতির শব্দার্থক শব্দ? হ্যাঁ. এটি একটি দরকারী সাক্ষাত্কার প্রশ্ন? সম্ভবত না. তবে জেএলএস জাভা বিশ্বের জন্য সংজ্ঞা স্থাপন করে এবং এটি (এই ক্ষেত্রে) নির্বিঘ্নে করে does

সম্পাদনা করা হয়েছে (বাজরান স্ট্রস্ট্রপ থেকে একটি সমান্তরাল উদ্ধৃতি সরিয়ে দেওয়া হয়েছে যা জাভা এবং সি ++ এর মধ্যে পার্থক্যের কারণে সম্ভবত বিভ্রান্তি বাড়িয়েছে I'll আমি আমার উত্তরটি জেএলএসে রেখে দেব :)


3
@ ডিজিটাল কেন দীর্ঘশ্বাস ফেলল। আমি বুঝতে পেরেছি আপনি বিশ্বাস করেন ঠিক বলেছেন। আমি আপনার সাথে একমত নই যে অবজেক্টের উত্তরাধিকার হ'ল বেশিরভাগ প্রোগ্রামারকে শেখানো / ভাবনা। তবে জেএলএস সংজ্ঞাটি মূল প্রশ্নের ক্ষেত্রে সরাসরি প্রযোজ্য। এটি শব্দার্থবিরোধী হ্যাঁ, তবে জেএলএস আপনি বা আমি নয়, সংজ্ঞা নির্ধারণ করে
Robert_x44

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

1
@ ডিজিটাল তারা ক্লাসের বিষয়বস্তুতে রয়েছে। ক্লাস নিজেই না। সিমুলা তাদেরকে সংযুক্ত বস্তু বলেছিলেন। যখন একটি সাবক্লাসের একটি অবজেক্ট তৈরি করা হয়েছিল, তখন এটি কাঠের 'উপসর্গ অবজেক্টস' দিয়ে তৈরি হয়েছিল। সুপারক্লাস অবজেক্টটি একটি প্রিফিক্স অবজেক্ট ছিল যা নিজেই অন্যান্য উপসর্গের বস্তুগুলি ধারণ করতে পারে। আমি মনে করি যে জেএলএসের "স্পষ্টভাবে খারাপ শব্দ" আছে তা বলা অহঙ্কারজনক। আমরা কোন শব্দটি ব্যবহার করি, অবশ্যই উত্তরাধিকার। কিছুটা অস্পষ্ট পরিভাষা ব্যবহার করে ভুল নেই। এটা সব সময় এরকম ঘটে. তবে এর অর্থ এই নয় যে একটি সুনির্দিষ্ট সংজ্ঞা নেই।
robert_x44

1
@ ডিজিটাল আমরা অবশ্যই একমত হতে পারি যে শব্দটি বিভিন্ন উপায়ে ব্যবহৃত হয়। :) আমরা সম্ভবত একমত হতে পারি যে একটি সাক্ষাত্কারের প্রশ্ন যা একটি অস্পষ্ট শব্দটির উপর নির্ভর করে সম্ভবত এটি ভাল নয়।
Robert_x44

2
"সাবক্লাসের অবজেক্টগুলি তাদের সুপারক্লাসগুলির ব্যক্তিগত ক্ষেত্রগুলি ধারণ করে" এর জন্য কারও কাছে জাভা / ওরাকল থেকে রেফারেন্স রয়েছে? আমি এটির সাথে একমত, তবে এটি বলার কোনও অফিসিয়াল ডকুমেন্ট খুঁজে পাই না।
MengT

78

হ্যাঁ

এটা উপলব্ধি করা যখন যে গুরুত্বপূর্ণ হয় দুই ক্লাস, সেখানে শুধুমাত্র একটি অবজেক্ট।

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

না, আপনি এগুলি সরাসরি অ্যাক্সেস করতে পারবেন না। হ্যাঁ, তারা উত্তরাধিকারসূত্রে প্রাপ্ত। তারা আছে যাবে।

এটি একটি ভাল প্রশ্ন!


হালনাগাদ:

ত্রুটি, "না"

ঠিক আছে, আমি অনুমান করি আমরা সকলেই কিছু না কিছু শিখেছি। যেহেতু জেএলএস হ'ল "উত্তরাধিকারসূত্রে প্রাপ্ত নয়" শব্দগুচ্ছের উৎপত্তি, তাই "না" উত্তর দেওয়া সঠিক । যেহেতু সাবক্লাসগুলি ব্যক্তিগত ক্ষেত্রগুলিতে অ্যাক্সেস বা সংশোধন করতে পারে না, অন্য কথায়, এগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হয় না। কিন্তু সত্যিই হয় মাত্র এক বস্তু, এটা সত্যিই রয়েছে বেসরকারী ক্ষেত্র, এবং কেউ JLS এবং টিউটোরিয়াল বাক্যে কথন কুপথ লাগে তাই যদি, এটা বেশ গলি বুঝতে, জাভা বস্তু, এবং কি সত্যিই ঘটছে কঠিন হবে।

আপডেট করার জন্য আপডেট করুন:

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


2
@ Ma99uS। অবশ্যই তারা পুনরায় ব্যবহার করা হয়। উত্তরাধিকার পুরো পয়েন্ট এটি। তাদের ছাড়া উদ্ভূত প্রকারটি পিতামাতার ধরণের উদাহরণ হতে পারে না এবং হতে পারে। ওওপি অর্থহীন হবে। পলিমারফিক ধরণের কাজ করা বন্ধ করে দেয় । কেবলমাত্র একটি অবজেক্ট রয়েছে তা বোঝা এবং আপনি পিতামাতার ধরণের একটি উদাহরণ ওওপি বোঝার জন্য গুরুত্বপূর্ণ to একেবারেই বুঝতে এটি আপনার অবশ্যই অতীত হওয়া উচিত past
ডিজিটালরোস

2
নিশ্চিত নয় যে পিতার উদাহরণটি খুব ভাল কারণ পিতা-মাতা শ্রেণি এখনও বেঁচে থাকতে পারে এবং সেই ক্ষেত্রটি থাকলেও ক্ষেত্রটি উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে। উত্তরাধিকার যদি সেইভাবে কাজ করে তবে আমি বেঁচে থাকতে আমার পিতার অর্থ উত্তরাধিকারী হতে পারি এবং তিনি একই অর্থও রাখতে পারতেন। আমার বাচ্চাদের প্রত্যেকেরই তার অর্থ এবং আমার অর্থ ছিল।
পিটার লরে

2
@ পিটার ল্যারি বিতর্ক করছেন না বা কিছুই করছেন না, তবে আমি যা মনে করি তা এখানে। পিতামাতার একটি ছিল car, সে এটি একটি privateলকারে রেখেছিল যা সন্তানের চাবি নয়। আপনি প্রকৃতপক্ষে উত্তরাধিকারী carকিন্তু এটি আপনার পক্ষে অকেজো। সুতরাং, ব্যবহারিকভাবে, আপনি উত্তরাধিকার দ্বারা উপকৃত হচ্ছেন না।
নিশান্ত

1
@DigitalRoss। আমি আপনার বক্তব্য পেতে। হ্যাঁ, আমরা বলতে পারি যে মূল্য আছে কারণ উত্তরাধিকারসূত্রে প্রাপ্ত পিতামহীন সংজ্ঞাটিও লোড করা হয়নি। :) আমি মনে করি যে JVM অনুষঙ্গটির আমরা খুঁজছি এই "কোন শব্দ" এর সঠিক উত্তর থাকবে M java.sun.com/docs/books/jvms
অস্কার রাইজ

5
-1, জাভা ভাষা নির্দিষ্টকরণ স্পষ্টভাবে বানান যে তারা উত্তরাধিকারসূত্রে হয় নি। কোন আইএফএস, কোনও বুট নেই। তারা সহজভাবে হয় না। উত্তরাধিকারের অন্য কোনও সংজ্ঞা জাভা প্রসঙ্গে ভুল।
বাইজিক্লপ

21

না। ব্যক্তিগত ক্ষেত্রগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হয় না ... এবং এজন্যই সুরক্ষিত আবিষ্কার হয়েছিল। এটি নকশা দ্বারা। আমি ধারণা করি এটি সুরক্ষিত সংশোধকটির অস্তিত্বকে ন্যায়সঙ্গত করেছে।


এখন প্রসঙ্গে আসছি। উত্তরাধিকার সূত্রে আপনি কী বোঝাতে চান - যদি এটি উত্পন্ন শ্রেণি থেকে তৈরি বস্তুটিতে থাকে? হ্যাঁ, এটা

আপনি যদি বোঝাতে চান এটি ডাইরেক্ট ক্লাসে কার্যকর হতে পারে। ভাল, না।

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

কার্যত, এটি উত্তরাধিকার সূত্রে প্রাপ্ত হয় নি। তবে আদর্শভাবে , এটি হয়।


ঠিক আছে, জাভা টিউটোরিয়ালটি সন্ধান করে তারা এটিকে উদ্ধৃত করে:

একটি সুপারক্লাসে ব্যক্তিগত সদস্যরা

একটি সাবক্লাস তার অভিভাবক শ্রেণীর ব্যক্তিগত সদস্যদের উত্তরাধিকারী হয় না। তবে, সুপারক্লাসের যদি তার ব্যক্তিগত ক্ষেত্রগুলি অ্যাক্সেস করার জন্য সর্বজনীন বা সুরক্ষিত পদ্ধতি থাকে তবে এগুলি সাবক্লাস দ্বারাও ব্যবহার করা যেতে পারে।

উল্লেখ করুন: http://download.oracle.com/javase/tutorial/java/IandI/subclasses.html

আমি একমত, যে ক্ষেত্র আছে। তবে, সাবক্লাসটি সেই ব্যক্তিগত ক্ষেত্রে কোনও সুযোগ সুবিধা পায় না। একটি সাবক্লাসের কাছে, ব্যক্তিগত ক্ষেত্রটি অন্য কোনও শ্রেণির কোনও ব্যক্তিগত ক্ষেত্রের সমান।

আমি বিশ্বাস করি এটি নিখুঁতভাবে দৃষ্টিভঙ্গির বিষয়। আপনি যুক্তিটি দু'দিকেই moldালতে পারেন। এটি উভয়ভাবেই ন্যায়সঙ্গত হওয়া উচিত।

 


2
এটি সঠিক নয়। আপনি এগুলি অ্যাক্সেস করতে পারবেন না, এটি সঠিক। কিন্তু তারা আছে হিসাবে আমি ব্যাখ্যা উত্তরাধিকারসূত্রে হবে।
ডিজিটালরোস

1
দুর্দান্ত উত্তর !!! +1 এর জন্য I believe it's purely matter of point-of-view.এবংjustified the existence of protected modifier.
রবি

14

এটি আপনার "উত্তরাধিকারী" এর সংজ্ঞা উপর নির্ভর করে। সাবক্লাসের কী এখনও ক্ষেত্রগুলি স্মৃতিতে রয়েছে? স্পষ্টভাবে. এটি সরাসরি তাদের অ্যাক্সেস করতে পারেন? না এটি সংজ্ঞাটির সূক্ষ্মতা মাত্র; মূল বিষয়টি হ'ল আসলে কী ঘটছে তা বোঝা।


সঠিক। তবে আমি মনে করি যে এই জাতীয় বেস প্রশ্নে সাধারণ উত্তর থাকতে হবে)
স্ট্যান কুরিলিন

আমি মনে করি এটি উত্তরাধিকারের জাভা সংজ্ঞা।
অস্কাররাইজ

অন্যথায় এটি আপনার "ক্ষেত্র" এর সংজ্ঞা উপর নির্ভর করে। একটি পূর্ণসংখ্যার ক্ষেত্র সংজ্ঞায়িত করতে "foo" হল একটি পূর্ণসংখ্যার আকারের স্টোরেজ লকার ভাড়া নেওয়া এবং এটিতে "ফু" চিহ্ন লাগানো। যদি ক্ষেত্রটি ব্যক্তিগত হিসাবে ঘোষিত হয়, উদ্ভূত শ্রেণি একটি লেবেলযুক্ত পূর্ণসংখ্যার আকারের স্টোরেজ লকারের উত্তরাধিকার সূত্রে প্রাপ্ত। উদ্ভূত শ্রেণি "ফিল্ড" উত্তরাধিকার সূত্রে প্রাপ্ত কিনা তা নির্ভর করে যে কেউ কলবিহীন স্টোরেজ লকারটিকে "ক্ষেত্র" বলে কিনা তা নির্ভর করে।
সুপারক্যাট

10

আমি কোড সহ ধারণাটি প্রদর্শন করব। সাবক্লাসগুলি প্রকৃতপক্ষে সুপার ক্লাসের ব্যক্তিগত ভেরিয়েবলের উত্তরাধিকারী হয়। একমাত্র সমস্যা হ'ল আপনি সুপার ক্লাসে প্রাইভেট ভেরিয়েবলের জন্য পাবলিক গেটর এবং সেটটার সরবরাহ না করা পর্যন্ত তারা শিশু অবজেক্টগুলিতে অ্যাক্সেসযোগ্য নয় ।

প্যাকেজ ডাম্প দুটি শ্রেণি বিবেচনা করুন। শিশু পিতামাতাকে প্রসারিত করে।

যদি আমি সঠিকভাবে মনে রাখি, মেমরির একটি শিশু অবজেক্ট দুটি অঞ্চল নিয়ে গঠিত। একটি হ'ল পিতা-মাতার অংশ এবং অন্যটি কেবলমাত্র সন্তানের অংশ। একটি শিশু শুধুমাত্র পিতামাতার একটি সর্বজনীন পদ্ধতির মাধ্যমে তার পিতামাতার কোডে ব্যক্তিগত বিভাগে অ্যাক্সেস করতে পারে।

এই ভাবে চিন্তা করুন। বোরাটের বাবা বলটকের একটি নিরাপদ রয়েছে $ 100,000 তিনি তার "ব্যক্তিগত" ভেরিয়েবল নিরাপদে ভাগ করতে চান না। সুতরাং, সেফের জন্য তিনি কোনও কী সরবরাহ করেন না। Borat নিরাপদ উত্তরাধিকারসূত্রে। কিন্তু, যদি সে এটি খুলতে না পারে তবে কী ভাল? যদি কেবল তার বাবা চাবি সরবরাহ করেছিলেন।

পিতামাতা -

package Dump;

public class Parent {

    private String reallyHidden;
    private String notReallyHidden;

    public String getNotReallyHidden() {
        return notReallyHidden;
    }

    public void setNotReallyHidden(String notReallyHidden) {
        this.notReallyHidden = notReallyHidden;
    }

}//Parent

শিশু -

package Dump;

public class Child extends Parent {

    private String childOnly;

    public String getChildOnly() {
        return childOnly;
    }

    public void setChildOnly(String childOnly) {
        this.childOnly = childOnly;
    }

    public static void main(String [] args){

        System.out.println("Testing...");
        Child c1 = new Child();
        c1.setChildOnly("childOnly");
        c1.setNotReallyHidden("notReallyHidden");

        //Attempting to access parent's reallyHidden
            c1.reallyHidden;//Does not even compile

    }//main

}//Child

10

না, তারা এর উত্তরাধিকার সূত্রে পায় না।

অন্য কোনও শ্রেণি এটি পরোক্ষভাবে উত্তরাধিকার সম্পর্কে কিছুই বলতে পারে না, তবে এনক্যাপসুলেশন সম্পর্কে কিছুই বলতে পারে না।

এই ক্ষেত্রে:

class Some { 
   private int count; 
   public void increment() { 
      count++;
   }
   public String toString() { 
       return Integer.toString( count );
   }
}

class UseIt { 
    void useIt() { 
        Some s = new Some();
        s.increment();
        s.increment();
        s.increment();
        int v = Integer.parseInt( s.toString() );
        // hey, can you say you inherit it?
     }
}

প্রতিবিম্বের মাধ্যমে আপনি countঅভ্যন্তরের মানও পেতে পারেন UseIt। এর অর্থ এই নয়, আপনি এটি উত্তরাধিকারী।

হালনাগাদ

মানটি থাকলেও এটি সাবক্লাস দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হয় না।

উদাহরণস্বরূপ একটি সাবক্লাস হিসাবে সংজ্ঞায়িত:

class SomeOther extends Some { 
    private int count = 1000;
    @Override
    public void increment() { 
        super.increment();
        count *= 10000;
    }
}

class UseIt { 
    public static void main( String ... args ) { 
        s = new SomeOther();
        s.increment();
        s.increment();
        s.increment();
        v = Integer.parseInt( s.toString() );
        // what is the value of v?           
     }
}

প্রথম উদাহরণের মতো ঠিক একই অবস্থা। বৈশিষ্ট্যটি countলুকানো রয়েছে এবং সাবক্লাসটি মোটেই উত্তরাধিকার সূত্রে প্রাপ্ত নয়। তবুও, ডিজিটালরোস যেমন উল্লেখ করেছে, মান রয়েছে তবে উত্তরাধিকার হিসাবে নয়।

এইভাবে রাখুন। যদি আপনার বাবা ধনী হন এবং আপনাকে ক্রেডিট কার্ড দেয় তবে আপনি তার অর্থ দিয়ে জিনিস কিনতে পারবেন, তবে এর অর্থ এই নয় যে আপনি সমস্ত অর্থ উত্তরাধিকার সূত্রে পেয়েছেন , তাই না?

অন্যান্য আপডেট

যদিও এটি বৈশিষ্ট্য রয়েছে তা জানা খুব আকর্ষণীয়

স্পষ্টভাবে এটি বর্ণনা করার সঠিক শব্দটি আমার কাছে নেই, তবে এটি জেভিএম এবং এটি যেভাবে কাজ করে তা "উত্তরাধিকারসূত্রে নয়" পিতামাতার সংজ্ঞাটিও বোঝায়।

আমরা আসলে পিতামাতাকে পরিবর্তন করতে পারি এবং সাবক্লাসটি এখনও কাজ করবে।

উদাহরণস্বরূপ :

//A.java
class A {
   private int i;
   public String toString() { return ""+ i; }
}
// B.java
class B extends A {}
// Main.java
class Main {
   public static void main( String [] args ) {
      System.out.println( new B().toString() );
    }
}
// Compile all the files
javac A.java B.java Main.java
// Run Main
java Main
// Outout is 0 as expected as B is using the A 'toString' definition
0

// Change A.java
class A {
   public String toString() {
      return "Nothing here";
   }
}
// Recompile ONLY A.java
javac A.java
java Main
// B wasn't modified and yet it shows a different behaviour, this is not due to 
// inheritance but the way Java loads the class
Output: Nothing here

আমার ধারণা সঠিক শব্দটি এখানে পাওয়া যাবে: জাভাটিএম ভার্চুয়াল মেশিনের স্পেসিফিকেশন


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

1
তারা আছে বহুরুপী ধরনের এ সব কোন অর্থ আছে করার জন্য উত্তরাধিকারসূত্রে হবে। আমার ব্যাখ্যা দেখুন। এটি সত্য যে আপনি তাদের সাথে ঝাঁকুনি দিতে পারবেন না, তবে তারা সেখানে রয়েছে। তারা আছে যাবে।
ডিজিটালরোস

আপনার কোডটিতে কোনও উত্তরাধিকার নেই (প্রসারিত / প্রয়োগ) কীওয়ার্ড রয়েছে যাতে উত্তরাধিকারের উদাহরণ না হয়।
fmucar

1
আহ, তারা যদি সেখানে থাকে তবে তারা সেখানে কীভাবে পেল? কারণ সাবক্লাস তাদের সংজ্ঞায়িত করেছে? না। কারণ ওহ, হুম, ভুল, উত্তরাধিকার সূত্রে প্রাপ্ত ?
ডিজিটালরোস

1
encapsulationবনাম উপর দুর্দান্ত পয়েন্ট inherit, আমার ধারণা এই উত্তরটি আরও বেশি ভোটের প্রাপ্য।
এরিক ওয়াং

6

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

নীচের ফাইলটি প্যারেন্টক্লাস.জভা হিসাবে সংরক্ষণ করুন এবং এটি নিজে চেষ্টা করুন ->

public class ParentClass {
  private int x;

  public int getX() {
    return x;
  }

  public void setX(int x) {
    this.x = x;
  }
}

class SubClass extends ParentClass {
  private int y;

  public int getY() {
    return y;
  }

  public void setY(int y) {
    this.y = y;
  }

  public void setXofParent(int x) {
    setX(x); 
  }
}

class Main {
  public static void main(String[] args) {
    SubClass s = new SubClass();
    s.setX(10);
    s.setY(12);
    System.out.println("X is :"+s.getX());
    System.out.println("Y is :"+s.getY());
    s.setXofParent(13);
    System.out.println("Now X is :"+s.getX());
  }
}

Output:
X is :10
Y is :12
Now X is :13

যদি আমরা সাবক্লাসের পদ্ধতিতে প্যারেন্টক্লাসের প্রাইভেট ভেরিয়েবল এক্স ব্যবহার করার চেষ্টা করি তবে এটি কোনও পরিবর্তনের জন্য সরাসরি অ্যাক্সেসযোগ্য নয় (যার অর্থ উত্তরাধিকারসূত্রে নয়)। কিন্তু এক্সকে সাবক্লাসে সেটএক্সএক্সপ্যারেন্ট () পদ্ধতিতে করা অরিজিনাল ক্লাসের পদ্ধতি দ্বারা (সেট) (অথবা) চাইল্ডক্লাস অবজেক্ট ব্যবহার করে সংশোধন করা যেতে পারে সেটএক্স () পদ্ধতি বা সেটএক্সফেরেন্ট () পদ্ধতি যা শেষ পর্যন্ত সেটএক্স () বলে calls সুতরাং এখানে সেটএক্স () এবং গেটএক্স () হল প্যারেন্টক্লাসের প্রাইভেট মেম্বার এক্স এর ধরণের গেট।

আর একটি সহজ উদাহরণ হ'ল ক্লক সুপারক্লাসে ব্যক্তিগত সদস্য হিসাবে ঘন্টা এবং মিনিট এবং জনসাধারণ হিসাবে উপযুক্ত গেটর এবং সেটার পদ্ধতি রয়েছে। তারপরে ডিজিটালক্লক আসে ঘড়ির সাব-ক্লাস হিসাবে। এখানে যদি ডিজিটালক্লকের অবজেক্টটিতে ঘন্টা এবং মিনিট সদস্য না থাকে তবে জিনিসগুলি স্ক্রু আপ করা হবে।


2
ওরাকল ডক অনুসারে - একটি সাবক্লাস তার পিতামাতা শ্রেণীর ব্যক্তিগত সদস্যদের উত্তরাধিকার সূত্রে পায় না। তবে, সুপারক্লাসের যদি তার ব্যক্তিগত ক্ষেত্রগুলি অ্যাক্সেস করার জন্য সর্বজনীন বা সুরক্ষিত পদ্ধতি থাকে তবে এগুলি সাবক্লাস দ্বারাও ব্যবহার করা যেতে পারে।
dganesh2002

4

ঠিক আছে, এটি একটি খুব আকর্ষণীয় সমস্যা আমি অনেক গবেষণা করেছি এবং এই সিদ্ধান্তে পৌঁছেছি যে একটি সুপারক্লাসের ব্যক্তিগত সদস্যরা সাবক্লাসের অবজেক্টগুলিতে সত্যই উপলব্ধ (তবে অ্যাক্সেসযোগ্য নয়)। এটি প্রমাণ করার জন্য, এখানে প্যারেন্ট ক্লাস এবং শিশু ক্লাসের সাথে একটি নমুনা কোড রয়েছে এবং আমি শিশু শ্রেণীর অবজেক্টটি একটি টেক্সট ফাইলে লিখছি এবং ফাইলটিতে 'ভাবেশ' নামে একটি প্রাইভেট সদস্য পড়ছি, তাই প্রমাণ করে এটি শিশুটিতে উপলব্ধ indeed ক্লাস তবে অ্যাক্সেস মডিফায়ারের কারণে অ্যাক্সেসযোগ্য নয়।

import java.io.Serializable;
public class ParentClass implements Serializable {
public ParentClass() {

}

public int a=32131,b,c;

private int bhavesh=5555,rr,weq,refw;
}

import java.io.*;
import java.io.Serializable;
public class ChildClass extends ParentClass{
public ChildClass() {
super();
}

public static void main(String[] args) {
ChildClass childObj = new ChildClass();
ObjectOutputStream oos;
try {
        oos = new ObjectOutputStream(new FileOutputStream("C:\\MyData1.txt"));
        oos.writeObject(childObj); //Writing child class object and not parent class object
        System.out.println("Writing complete !");
    } catch (IOException e) {
    }


}
}

MyData1.txt খুলুন এবং 'ভাवेश' নামে প্রাইভেট সদস্য অনুসন্ধান করুন। আপনি বলছেন কি দয়া করে আমাকে জানান।


3

দেখে মনে হবে যে সাবক্লাসটি ব্যক্তিগত ক্ষেত্রগুলির উত্তরাধিকার সূত্রে আসে কারণ এই খুব ক্ষেত্রগুলি সাবক্লাসের অভ্যন্তরীণ কার্যত ব্যবহার করে (দার্শনিকভাবে বলতে থাকে)। একটি সাবক্লাস, এর কনস্ট্রাক্টরে, সুপারক্লাস কনস্ট্রাক্টরকে ডাকে। সুপারক্লাস প্রাইভেট ফিল্ডস স্পষ্টতই সাবক্লাসকে সুপারক্লাস কনস্ট্রাক্টর বলা হয়ে উত্তরাধিকার সূত্রে প্রাপ্ত হয় যদি সুপারক্লাস নির্মাণকারী তার নির্মাণকারীতে এই ক্ষেত্রগুলির সূচনা করে থাকে। এটি কেবল একটি উদাহরণ। তবে অবশ্যই অ্যাকসেসর পদ্ধতি ছাড়াই সাবক্লাস সুপারক্লাসের ব্যক্তিগত ক্ষেত্রগুলিতে অ্যাক্সেস করতে পারে না (এটি ফোনের রিসেট করার জন্য ব্যাটারিটি বের করার জন্য কোনও আইফোনের পিছনের প্যানেলটি পপ করতে না পারার মতো ... তবে ব্যাটারিটি এখনও রয়েছে)।

পিএসএস উত্তরাধিকারের বহু সংজ্ঞা যেগুলির মধ্যে আমি এসেছি তার মধ্যে একটি: "উত্তরাধিকার - একটি প্রোগ্রামিং প্রযুক্তি যা একটি উত্পন্ন শ্রেণিকে তার বেসিক শ্রেণীর (জোর দেওয়া আমার) এবং আচরণের উত্তরাধিকার সূত্রে একটি বেস শ্রেণীর কার্যকারিতা বাড়িয়ে তোলার অনুমতি দেয়।"

সাবক্লাস দ্বারা অ্যাক্সেসযোগ্য না হলেও ব্যক্তিগত ক্ষেত্রগুলি হ'ল সুপারক্লাসের উত্তরাধিকার সূত্রে প্রাপ্ত রাজ্য।


1

আমি উত্তর যে জাভা ব্যক্তিগত ক্ষেত্র হবে করছে উত্তরাধিকার হিসেবে প্রাপ্ত। আমাকে প্রদর্শনের অনুমতি দিন:

public class Foo {

    private int x; // This is the private field.

    public Foo() {
        x = 0; // Sets int x to 0.
    }

    //The following methods are declared "final" so that they can't be overridden.
    public final void update() { x++; } // Increments x by 1.
    public final int getX() { return x; } // Returns the x value.

}


public class Bar extends Foo {

    public Bar() {

        super(); // Because this extends a class with a constructor, it is required to run before anything else.

        update(); //Runs the inherited update() method twice
        update();
        System.out.println(getX()); // Prints the inherited "x" int.

    }

}

আপনি যদি কোনও প্রোগ্রাম চালনা করেন Bar bar = new Bar();তবে আপনি সর্বদা আউটপুট বাক্সে "2" নম্বরটি দেখতে পাবেন। কারণ পূর্ণসংখ্যা "x" পদ্ধতিগুলির সাথে আবদ্ধ হয় update()এবং getX()তারপরে এটি প্রমাণ করা যায় যে পূর্ণসংখ্যা উত্তরাধিকারসূত্রে প্রাপ্ত।

বিভ্রান্তিটি হ'ল কারণ আপনি সরাসরি "x" পূর্ণসংখ্যা অ্যাক্সেস করতে পারবেন না, তখন লোকেরা যুক্তি দেয় যে এটি উত্তরাধিকার সূত্রে প্রাপ্ত নয়। তবে ক্লাসের প্রতিটি অ-স্থিতিশীল জিনিস, তা ক্ষেত্র বা পদ্ধতি হ'ল উত্তরাধিকার সূত্রে প্রাপ্ত।


3
"ধারণ করে" এর অর্থ "উত্তরাধিকারসূত্রে" নয়;)
স্টান কুরিলিন

1

জাভাতে মেমরি লেআউট ভিজ-এ-ভিজ ইনরিয়েন্স

এখানে চিত্র বর্ণনা লিখুন

প্যাডিং বিট / প্রান্তিককরণ এবং ভিটিএবিএল-তে অবজেক্ট ক্লাসের অন্তর্ভুক্তি বিবেচনা করা হয় না। সুতরাং সাবক্লাসের অবজেক্টটির সুপার ক্লাসের প্রাইভেট সদস্যদের জন্য জায়গা রয়েছে। তবে সাবক্লাসের অবজেক্ট থেকে এটি অ্যাক্সেস করা যায় না ...


1

না , ব্যক্তিগত ক্ষেত্রগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হয় না। একমাত্র কারণ হ'ল সাবক্লাসগুলি সেগুলি সরাসরি অ্যাক্সেস করতে পারে না ।


0

আমি বিশ্বাস করি, উত্তরটি পুরোপুরি সেই প্রশ্নের উপর নির্ভরশীল, যা জিজ্ঞাসা করা হয়েছে। মানে, যদি প্রশ্ন হয়

আমরা কি তাদের সাব-ক্লাস থেকে সরাসরি সুপার-ক্লাসের বেসরকারী ক্ষেত্রটি অ্যাক্সেস করতে পারি ?

তারপরে উত্তরটি হ'ল না , যদি আমরা অ্যাক্সেস সুনির্দিষ্ট বিশদটি জানতে পারি তবে উল্লেখ করা আছে, ব্যক্তিগত সদস্যরা কেবলমাত্র ক্লাসের মধ্যেই অ্যাক্সেসযোগ্য।

তবে, যদি প্রশ্ন হয়

আমরা কি তাদের সাব-ক্লাস থেকে সুপার-ক্লাসের প্রাইভেট ফিল্ড অ্যাক্সেস করতে পারি?

যার অর্থ, এটি গুরুত্বপূর্ণ নয়, আপনি ব্যক্তিগত সদস্যকে অ্যাক্সেস করতে কী করবেন। সেক্ষেত্রে আমরা সুপার-ক্লাসে সর্বজনীন পদ্ধতি তৈরি করতে পারি এবং আপনি ব্যক্তিগত সদস্যকে অ্যাক্সেস করতে পারেন। সুতরাং, এক্ষেত্রে আপনি ব্যক্তিগত সদস্যকে অ্যাক্সেস করার জন্য একটি ইন্টারফেস / সেতু তৈরি করছেন।

অন্যান্য ওওপি ভাষার মতো সি ++ এর friend functionধারণা রয়েছে, যার দ্বারা আমরা অন্যান্য শ্রেণীর ব্যক্তিগত সদস্যকে অ্যাক্সেস করতে পারি।


0

আমরা সহজেই বলতে পারি যে যখন একটি সুপারক্লাস উত্তরাধিকার সূত্রে প্রাপ্ত হয়, তখন সুপারক্লাসের ব্যক্তিগত সদস্যরা প্রকৃতপক্ষে সাবক্লাসের ব্যক্তিগত সদস্য হয়ে যায় এবং আরও উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে না বা সাবক্লাসের অবজেক্টগুলিতে অলক্ষিত হয় না।


0

একটি বেসরকারী শ্রেণীর সদস্য বা কনস্ট্রাক্টর কেবলমাত্র শীর্ষ স্তরের শ্রেণির ( .67.6 ) এর অভ্যন্তরে অ্যাক্সেসযোগ্য যা সদস্য বা নির্মাতার ঘোষণাকে ঘিরে রেখেছে। এটি সাবক্লাস দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হয় না। https://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6


-1

একটি সাবক্লাস তার অভিভাবক শ্রেণীর ব্যক্তিগত সদস্যদের উত্তরাধিকারী হয় না। তবে, সুপারক্লাসের যদি তার ব্যক্তিগত ক্ষেত্রগুলি অ্যাক্সেস করার জন্য সর্বজনীন বা সুরক্ষিত পদ্ধতি থাকে তবে এগুলি সাবক্লাস দ্বারাও ব্যবহার করা যেতে পারে।


-2

ব্যক্তিগত সদস্যরা (রাষ্ট্র এবং আচরণ) উত্তরাধিকার সূত্রে প্রাপ্ত। তারা (পারে) শ্রেণীর দ্বারা ইনস্ট্যান্ট করা বস্তুর আচরণ এবং আকারকে প্রভাবিত করতে পারে। এগুলি উল্লেখ করার দরকার নেই যে সমস্ত এনক্যাপুলেশন-ব্রেকিং ব্যবস্থার মাধ্যমে তারা সাবক্লাসগুলিতে খুব ভালভাবে উপস্থিত রয়েছে বা তাদের প্রয়োগকারীরা ধরে নিতে পারে।

যদিও উত্তরাধিকারের একটি "ডিফাক্টো" সংজ্ঞা রয়েছে, তবে এটির অবশ্যই "দৃশ্যমানতা" দিকগুলির কোনও যোগসূত্র নেই, যা "না" উত্তর দ্বারা ধরে নেওয়া হয়।

সুতরাং, কূটনৈতিক হওয়ার দরকার নেই। জেএলএস এই সময়ে ঠিক ভুল।

তারা "উত্তরাধিকার সূত্রে প্রাপ্ত নয়" এমন কোনও অনুমান অনিরাপদ এবং বিপজ্জনক।

সুতরাং দুটি ডিফাক্টো (আংশিকভাবে) বিবাদী সংজ্ঞাগুলির মধ্যে (যা আমি পুনরাবৃত্তি করব না), কেবলমাত্র একটিই অনুসরণ করা উচিত যা নিরাপদ (বা নিরাপদ)।


1
-1। জেএলএস ভাষাটি সংজ্ঞায়িত করে, জেএলএসের পক্ষে "ভুল" হওয়া অসম্ভব। এছাড়াও, যদি এনক্যাপসুলেশন ভেঙে এমন কোনও ব্যবস্থা থাকে তবে এর অর্থ ক্ষেত্রটি উত্তরাধিকার সূত্রে প্রাপ্ত নয়; কেবলমাত্র এমন কোনও ব্যবস্থা আছে যা এনক্যাপসুলেশনকে বিকৃত করে।
এসএল বার্থ - মনিকা

একটি সংজ্ঞা নিজেই বিভিন্ন উপায়ে ভুল হতে পারে। এ নিয়ে আরও আলোচনা করা আমার উদ্দেশ্য নয়। এখানে আর্গুমেন্টটি মেকানিজমগুলিকে ভেঙে দেয় না যা এনক্যাপসুলেশন (godশ্বর বা খারাপ তারা যেমন হতে পারে) ভঙ্গ করে তবে ক্ষেত্র / পদ্ধতিটি সেখানে রয়েছে যা আপনার সাবক্লাসের আচরণ এবং অবস্থাকে প্রভাবিত করে। সুতরাং এটি "উত্তরাধিকারসূত্রে প্রাপ্ত"। কেউ ক্লাসে 100kb প্রাইভেট বাইট অ্যারে ব্যবহার করতে পারে এবং কেবল ধরে নিতে পারে যে তার (জাম্বো) বংশধররা এর উত্তরাধিকারী নয়। বিন্দুটি মিস করবেন না এবং এটিকে একটি ভাল বা খারাপ অনুশীলন হিসাবে বিচার করুন (অতিরঞ্জিতভাবে একটি বিষয় তৈরি করতে সহায়তা করে): এটি একটি পূর্বদর্শন, বৈধ পদক্ষেপ action ব্যক্তিগত সদস্যরা "উত্তরাধিকার সূত্রে প্রাপ্ত"।
gkakas
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.