ইন্টারফেস জাভা অবজেক্ট ক্লাস থেকে উত্তরাধিকারী


157

ইন্টারফেস Objectজাভা থেকে ক্লাস থেকে উত্তরাধিকারী ?

যদি না হয় তবে আমরা কীভাবে ইন্টারফেসের উদাহরণে অবজেক্ট ক্লাসের পদ্ধতিটি কল করতে পারি

public class Test {
    public static void main(String[] args) {
        Employee e = null;
        e.equals(null);
    }
}

interface Employee {
}

56
+1, দুর্দান্ত প্রশ্ন।
আইয়ুব

@ ইজেপি, প্রযুক্তিগতভাবে বলতে গেলে জাভা / আইও / সিরিয়ালাইজেবল.ক্লাসের মধ্যে কী আছে তা বিবেচ্য নয়। আমি মনে করি আপনি জাভা ল্যাং স্পেসটিকে জেভিএম স্পেকের সাথে বিভ্রান্ত করছেন।
আইয়ুব

@ আইউউব আমি যেমন এই স্পেসিফিকেশনগুলির কোনওটির উল্লেখ না করায় আমি আপনার বিষয়টি বুঝতে পারি না। Serializableএকটি ইন্টারফেস, সহজতম; javapএটির উপর দৌড়ানো আপনাকে জানায় যে এটি কী থেকে উত্তরাধিকার সূত্রে প্রাপ্ত; এবং এটি জাভা ভাষা নির্দিষ্টকরণ দ্বারা নির্ধারিত হয়। আপনি যদি ভাবেন যে জেভিএম স্পেসটি এর কোথাও আসে তবে দয়া করে আমাদের আলোকিত করুন।
মারকুইস

2
@ এজেপি, প্রশ্নটি জাভা ভাষার (যেমন জাভা ভাষার নির্দিষ্টকরণ) সম্পর্কে। জাভা / আইও / সিরিয়ালাইজেবল.ক্লাস যা যা থাকে তা জেভিএম স্পেক যা বলে তার সাথে সম্পর্কিত। প্রযুক্তিগতভাবে বলতে গেলে কোনও গ্যারান্টি নেই যে দুটি স্পেসিফিকেশনের বৈশিষ্ট্যের মধ্যে একের মধ্যে চিঠিপত্র রয়েছে।
আইয়ুব

আমি সাম্প্রতিক একটি ব্লগ পোস্টে এটি বিশদ দিয়েছি ।
আইয়ুব

উত্তর:


161

ইন্টারফেস Objectজাভা থেকে ক্লাস থেকে উত্তরাধিকারী ?

না, তারা না। এবং কোনও সাধারণ "রুট" ইন্টারফেস স্পষ্টতই সমস্ত ইন্টারফেসের দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হয় (শ্রেণীর ক্ষেত্রে যেমন) তবে। (*)

যদি না হয় তবে আমরা কীভাবে ইন্টারফেসের উদাহরণে অবজেক্ট ক্লাসের পদ্ধতিটি কল করতে পারি

একটি ইন্টারফেস স্পষ্টভাবে প্রতিটি পাবলিক পদ্ধতির জন্য একটি পদ্ধতি ঘোষণা করে Object। সুতরাং equalsপদ্ধতিটি স্পষ্টভাবে একটি ইন্টারফেসে সদস্য হিসাবে ঘোষণা করা হয় (যদি না এটি ইতিমধ্যে এটি একটি সুপারইন্টারফেস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়)।

এটি জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশনে বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে, .2 9.2 ইন্টারফেস সদস্যগণ

9.2 ইন্টারফেস সদস্য

[...]

  • একটি ইন্টারফেস কোন সরাসরি superinterfaces থাকে, তাহলে তারপর ইন্টারফেস পরোক্ষভাবে একটি পাবলিক বিমূর্ত সদস্য পদ্ধতি ঘোষণা মি স্বাক্ষর সহ গুলি , রিটার্ন টাইপ R , এবং ধারা ছোঁড়ার টি স্বাক্ষর সঙ্গে প্রতিটি সর্বজনীন দৃষ্টান্ত পদ্ধতি মি সংশ্লিষ্ট গুলি , রিটার্ন টাইপ R , এবং ধারা ছোঁড়ার টি ঘোষণা করা হয়েছেObject , যদি না একই স্বাক্ষর, একই রিটার্নের ধরণ এবং একটি সামঞ্জস্যপূর্ণ থ্রো ক্লজ সহ কোনও পদ্ধতি স্পষ্টভাবে ইন্টারফেস দ্বারা ঘোষণা না করে।

[...]


এই পোস্টটি এখানে একটি নিবন্ধ হিসাবে আবার লেখা হয়েছে


(*) নোট করে একটি হচ্ছে এর ধারণা উপপ্রকার সমমানের নয় থেকে ইনহেরিট : কোন সুপার ইন্টারফেসের সাথে ইন্টারফেস প্রকৃতপক্ষে এর উপশাখাকে হয় Object( । § 4.10.2 ক্লাস এবং ইন্টারফেস প্রকারভেদ মধ্যে Subtyping ) যদিও তারা উত্তরাধিকারী না Object


1
@ আইউব যদি আমরা কোনও ইন্টারফেস প্রয়োগ করি তবে আমরা কেন সেই ইন্টারফেসটি বাস্তবায়িত করছে এমন শ্রেণিতে "সমান" পদ্ধতির প্রয়োগ করব না don't আমার ধারণা অনুসারে, ক্লাস প্রয়োগের ক্ষেত্রে আমাদের ইন্টারফেসের পদ্ধতিগুলি প্রয়োগ করতে হবে অন্যথায় শ্রেণিটি বিমূর্ত হবে।
বিকাশ মঙ্গল

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

3
আমি এখানে পয়েন্ট পেয়েছি। তবে একটি প্রশ্ন- কেন আমাদের এটি দরকার? Objectইন্টারফেসে ক্লাসের পদ্ধতিগুলি ঘোষণা না করা হলে কী পার্থক্য হত ?
বিকাশ মঙ্গল

2
আমাদের যদি এটি না থাকে তবে প্রশ্নে প্রোগ্রামটি সংকলন করবে না। সেখানে চালু আছে equalsপদ্ধতি Employeeইন্টারফেস।
আইয়ুব

1
এই প্রশ্নোত্তরটি এখনও আমাকে মনে করিয়ে দেয় যে অভিজ্ঞতার পরেও আমার মূল বিষয়গুলি শক্তিশালী করার দিকে মনোনিবেশ করা উচিত।
আনন্দ জে। কধি

13

Object যে কোনও ইন্টারফেসের একটি সুপারটাইপ [1]

তবে, একটি ইন্টারফেস না implements, extends, বা, "থেকে উত্তরাধিকারী" Object

Objectইন্টারফেসে পদ্ধতি যুক্ত করার জন্য জেএলএসের একটি বিশেষ ধারা রয়েছে [২]

[১] http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.10.2

[২] http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#9.2


এটি সবচেয়ে সঠিক উত্তর। গ্রহণযোগ্য হওয়া উচিত। যেমন একটি পদ্ধতি যা গ্রহণ করে java.lang.Objectতা কোনও ইন্টারফেসের ধরণের রেফারেন্স গ্রহণ করবে। তবুও আপনি Objectকোনও সংকলক ত্রুটি ছাড়াই একটি স্পষ্টভাবে ইন্টারফেস কাস্ট করতে পারেন ।
এনএমএম

12

.classইন্টারফেস প্রতিনিধিত্ব করে এমনগুলি সহ প্রতিটি ফাইলে আসলে একটি সুপারক্লাস ক্ষেত্র রয়েছে।

একটি ইন্টারফেসের জন্য এটি সর্বদা নির্দেশ করে java.lang.Object। তবে এটি কোনও কিছুর জন্য ব্যবহৃত হয় না।

এটি দেখার আরেকটি উপায় হ'ল:

interface MyInterface {
    // ...
}

public myMethod(MyInterface param) {
    Object obj = (Object) param;
    // ...
}

এখানে cast (Object) paramালাই সর্বদা বৈধ, যা বোঝায় যে প্রতিটি ইন্টারফেস প্রকারের একটি সাব টাইপ java.lang.Object


4
.Class ফাইলটি। জাভা ফাইলের একটি নিদর্শন। জাভা ভাষায় কেন কিছু কাজ করে তা নিয়ে তর্ক করার জন্য ফলাফল। ক্লাস ফাইলটি পিছনে যুক্তি দেখায়।
আইয়ুব

অবজেক্ট অবজেক্ট = (অবজেক্ট) প্যারাম; সংকলন ত্রুটি ছুঁড়ে না। তবে মাইআইন্টারফেসের পদ্ধতিগুলি (জনসাধারণ) আপত্তিজনকভাবে দৃশ্যমান নয়। সুতরাং মাইইন্টারফেসটি ধরে নিতে পারে না প্রতিটি ইন্টারফেসের প্রকারটি জাভা.এলংয়ের একটি উপপ্রকার
.অবজেক্ট

5

এটি কারণ employee e = ...যে পড়তে পারে যে একটি শ্রেণি প্রয়োগ করে যা কার্যকর করেemployee , এবং ভেরিয়েবলকে বরাদ্দ করা হয় e। প্রতিটি শ্রেণি যা একটি ইন্টারফেস প্রয়োগ করে কেবল অবজেক্টকে প্রচ্ছন্নভাবে প্রসারিত করে, তাই আপনি যখন করেন তখন e.equals(null)ভাষাটি জানে যে আপনার একটি ক্লাস রয়েছে যা একটি সাব টাইপ employee

জেভিএম আপনার কোডের (যেমন থ্রো NullPointerException) রানটাইম চেক করবে ।


উত্তরগুলি নামকরণের কনভেনশনগুলিতে মেনে চলতে হবে।
লিউ ব্লাচ

3

ইন্টারফেস হ'ল অবজেক্ট ক্লাসের উত্তরাধিকারী, আমরা
কোনও ইন্টারফেস ধরণের রেফারেন্সের মাধ্যমে কীভাবে অবজেক্ট শ্রেণির পদ্ধতিগুলি অ্যাক্সেস করতে পারি তা কোনও ইন্টারফেস Objectবর্গ উত্তরাধিকার সূত্রে পায় না , তবে এটি Objectশ্রেণীর সমস্ত পদ্ধতিতে অ্যাক্সেসযোগ্যতা সরবরাহ করে । একটি ইন্টারফেসের সদস্যরা হলেন:

Those members declared in the interface.
Those members inherited from direct superinterfaces.
If an interface has no direct superinterfaces, then the interface implicitly 

Objectশ্রেণিতে ঘোষিত প্রতিটি পাবলিক ইনস্ট্যান্স পদ্ধতির সাথে সম্পর্কিত একটি সর্বজনীন বিমূর্ত সদস্য পদ্ধতি ঘোষণা করে
যদি ইন্টারফেস স্পষ্টভাবে কেস যেখানে মি হতে ঘোষিত হয় এ ধরনের একটি পদ্ধতি মি ঘোষণা এটি একটি কম্পাইল-টাইম ত্রুটি finalমধ্যে Object

এখন এটি স্পষ্ট হয়ে গেছে যে সমস্ত সুপারিনটারফেসে abstractপ্রতিটি publicপদক্ষেপে বর্ণিত পদ্ধতি অনুসারে সদস্য পদ্ধতি রয়েছে Object

উত্স: http://ohmjavaclasses.blogspot.com/2011/11/is-intreface-inherits-object-clashow.html


0

যে কোনও শ্রেণি যে কোনও ইন্টারফেস বাস্তবায়ন Objectকরে তা সংজ্ঞা দ্বারাও উত্পন্ন হয় ।


0

" রেফারেন্স ধরনের java.lang.Object থেকে সমস্ত উত্তরাধিকারী । ক্লাস, enums, অ্যারে, এবং ইন্টারফেস সমস্ত রেফারেন্স ধরনের হয়। "

এর থেকে উদ্ধৃত: http://docs.oracle.com/javase/tutorial/reflect/class/index.html দ্বিতীয় বাক্যটি পরিষ্কার হতে হবে।


Classes, enums, and arrays (which all inherit from java.lang.Object) as well as interfaces are all reference types: এটি ইন্টারফেস অবজেক্ট থেকে উত্তরাধিকার সূত্রে বলে না। কেবল ক্লাস, এনাম এবং অ্যারে।
945

তারা এটি পরিবর্তন করেছে :)
dalvarezmartinez1

এমনকি "তারা এটি পরিবর্তন করেছে" (যা আমি সন্দেহ করি), টিউটোরিয়ালটি ভুল হতে পারে। আদর্শিক রেফারেন্স হ'ল জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন (জেএলএস)।
লিউ ব্লাচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.