Protected অ্যাক্সেস স্পেসিফায়ার একই প্যাকেজের ভিতরে দৃশ্যমান এবং সাবক্লাসেও দৃশ্যমান, যেখানে Default হলো একটি প্যাকেজ লেভেল অ্যাক্সেস স্পেসিফায়ার যা শুধু একই প্যাকেজের ভিতরে দৃশ্যমান।
Protected Access Specifier
- Protected একই প্যাকেজের ভিতরে পাবলিকের মত কাজ করে এবং প্যাকেজের বাইরে প্রাইভেটের মত।
- Protected প্যাকেজের বাইরেও পাবলিকের মত কাজ করে কিন্তু শুধু সাবক্লাস অবজেক্টের সাপেক্ষে।
- Protected ফিল্ড বা মেথড ক্লাস এবং ইন্টারফেসের জন্য ব্যবহার করা যায় না।
- সুপারক্লাসে protected ডিক্লেয়ার করা ফিল্ড, মেথড এবং কন্সট্রাক্টর শুধু অন্যান্য প্যাকেজের সাবক্লাসগুলো দ্বারা অ্যাক্সেস করা যায়।
- একই প্যাকেজের ক্লাসগুলিও protected ফিল্ড, মেথড এবং কন্সট্রাক্টর অ্যাক্সেস করতে পারে, এমনকি যদি সেগুলো protected মেম্বারের ক্লাসের সাবক্লাস না হয়।
উদাহরণ
public class ProtectedTest {
// protected ভেরিয়েবল
protected int age = 30;
protected String name = "Adithya";
/**
* এই মেথডটি protected হিসেবে ডিক্লেয়ার করা হয়েছে।
*/
protected String getInfo() {
return name + " is " + age + " years old.";
}
public static void main(String[] args) {
System.out.println(new ProtectedTest().getInfo());
}
}
আউটপুট
Adithya is 30 years old.
Default Access Specifier
- কোনো ক্লাসের মেম্বার যদি কোনো অ্যাক্সেস স্পেসিফায়ার ছাড়াই লিখা হয়, তবে সেটি Default মाना হয়।
- Default একই প্যাকেজের ভিতরে পাবলিকের মত কাজ করে এবং প্যাকেজের বাইরে প্রাইভেটের মত।
- কোনো ক্লাসের Default মেম্বারগুলো একই প্যাকেজের যেকোনো জিনিসের কাছে উপলব্ধ কিন্তু প্যাকেজের বাইরে কোনো শর্তে উপলব্ধ নয়।
- Default অ্যাক্সেস শুধু প্যাকেজ লেভেলে সীমাবদ্ধ করে, ক্লাস এক্সটেন্ড করলেও ডিফল্ট ডেটা মেম্বার অ্যাক্সেস করা যায় না।
উদাহরণ
public class DefaultTest {
// অ্যাক্সেস মডিফায়ার ছাড়া ভেরিয়েবল
int age = 25;
String name = "Jai";
/**
* এই মেথডটি ডিফল্ট অ্যাক্সেস স্পেসিফায়ারের সাথে ডিক্লেয়ার করা হয়েছে
*/
String getInfo() {
return name + " is " + age + " years old.";
}
public static void main(String[] args) {
System.out.println(new DefaultTest().getInfo());
}
}
আউটপুট
Jai is 25 years old.