Java.lang.Object ক্লাস ক্লাস হায়ারার্কির রুট বা সুপারক্লাস, যা java.lang package-এ থাকে। সকল প্রিডিফাইনড ক্লাস এবং ইউজার-ডিফাইনড ক্লাস Object ক্লাস থেকে সাবক্লাস।
কেন object ক্লাস সুপারক্লাস
Re-usability (পুনর্ব্যবহারযোগ্যতা)
- প্রতিটি অবজেক্টের ১১টি কমন প্রপার্টি রয়েছে, এই প্রপার্টিগুলো প্রতিটি জাভা ডেভেলপার দ্বারা ইমপ্লিমেন্ট করা আবশ্যক।
- ডেভেলপারের ওপর থেকে এই বোঝা কমাতে SUN একটি ক্লাস ডেভেলপ করেছিল Object নামে যেটি এই ১১টি প্রপার্টি ১১টি মেথড দিয়ে ইমপ্লিমেন্ট করেছিল।
- এই সব মেথডের জেনেরিক লজিক সব সাবক্লাসের জন্য কমন, যদি এই লজিক সাবক্লাসের রিকোয়ারমেন্ট স্যাটিসফাই না করে তবে সাবক্লাস এটি ওভাররাইড করতে পারে।
Runtime polymorphism (রানটাইম পলিমরফিজম)
- রানটাইম পলিমরফিজম অর্জনের জন্য যাতে আমরা একটি সিঙ্গেল মেথড লিখতে পারি যেকোনো টাইপের ক্লাস অবজেক্ট আর্গুমেন্ট হিসেবে রিসিভ এবং রিটার্ন টাইপ হিসেবে পাঠাতে পারি।
প্রতিটি ক্লাস অবজেক্টের কমন ফাংশনালিটি
দুটি অবজেক্ট তুলনা করা
- public boolean equals(Object obj)
হ্যাশকোড রিট্রিভ করা
- public int hashcode()
রানটাইম ক্লাস অবজেক্ট রেফারেন্স রিট্রিভ করা
- public final Class getClass()
অবজেক্ট ইনফরমেশন স্ট্রিং ফরম্যাটে রিট্রিভ করা
- public String toString()
অবজেক্ট ক্লোনিং
- protected Object clone() throws CloneNotSupportedException
অবজেক্ট ক্লিন-আপ কোড / রিসোর্স রিলিজিং কোড
- protected void finalize() throws Throwable
কারেন্ট থ্রেডকে wait() কল করার পর্যন্ত অপেক্ষা করানো
- public final void wait() throws InterruptedException
কারেন্ট থ্রেডকে নির্দিষ্ট সময় পর্যন্ত wait() কল করার জন্য অপেক্ষা করানো
- public final void wait(long timeout) throws InterruptedException
কারেন্ট থ্রেডকে নির্দিষ্ট সময় এবং ন্যানোসেকেন্ড পর্যন্ত wait() কল করার জন্য অপেক্ষা করানো
- public final void wait(long timeout, int nano) throws InterruptedException
ওয়েটিং থ্রেডকে অবজেক্ট লক আভেলেবিলিটি নোটিফাই করা
- public final void notify()
ওয়েটিং থ্রেডগুলোকে অবজেক্ট লক আভেলেবিলিটি নোটিফাই করা
- public final void notifyAll()
উদাহরণ
class Thing extends Object implements Cloneable {
public String id;
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
public boolean equals(Object obj) {
boolean result = false;
if ((obj!=null) && obj instanceof Thing) {
Thing t = (Thing) obj;
if (id.equals(t.id)) result = true;
}
return result;
}
public int hashCode() {
return id.hashCode();
}
public String toString() {
return "This is: "+id;
}
}
public class Test {
public static void main(String args[]) throws Exception {
Thing t1 = new Thing(), t2;
t1.id = "Raj";
t2 = t1; // t1 == t2 and t1.equals(t2)
t2 = (Thing) t1.clone(); // t2!=t1 but t1.equals(t2)
t2.id = "Adithya"; // t2!=t1 and !t1.equals(t2)
Object obj = t2;
System.out.println(obj); //Thing = Adithya
}
}
আউটপুট
This is: Adithya