हाय! मागील धड्यांमध्ये, आम्ही वारसा या संकल्पनेशी थोडक्यात परिचित झालो आहोत. आज, आम्ही या विषयावर पुन्हा स्पर्श करू, परंतु पुन्हा खूप खोलवर नाही. भविष्यात आम्ही याबद्दल अधिक तपशीलवार धडा घेणार आहोत. आज आम्ही फक्त काही व्यावहारिक उदाहरणे पाहू आणि जावामधील एका मनोरंजक ऑपरेटरशी परिचित होऊ.
इनहेरिटन्स ही एक प्रोग्रॅमिंग यंत्रणा आहे (जावासह) जी तुम्हाला विद्यमान वर्गावर आधारित नवीन वर्ग घोषित करू देते. व्युत्पन्न वर्ग नंतर पालक वर्गाच्या फील्ड आणि पद्धतींमध्ये प्रवेश मिळवतो. आम्हाला याची गरज का असेल? बरं, कल्पना करा की तुम्हाला एका प्रोग्राममध्ये अनेक कार क्लासेस तयार करण्याची आवश्यकता आहे: ट्रक, रेसकार, सेडान, पिकअप इ. कोणताही कोड लिहिण्यापूर्वी, तुम्हाला खात्री आहे की या सर्व वर्गांमध्ये बरेच साम्य आहे: सर्व कारचे मॉडेल असते. नाव, उत्पादनाचे वर्ष, इंजिनचा आकार, कमाल वेग इ. या परिस्थितीत, आपण हे करू शकता:
वारसा
तर, वारसा म्हणजे काय?
- प्रत्येक वर्गात ही फील्ड तयार करा (तुम्ही तयार करताच प्रत्येक नवीन कार वर्गात त्यांना जोडणे)
- सर्व कारसाठी सामान्य फील्ड पालक वर्गात आणा आणि नंतर वर्गातील विशिष्ट प्रकारच्या कारसाठी सर्व वर्ग मिळविण्यासाठी विस्तारित
Car
कीवर्ड वापरा .Car
public class Car {
private String model;
private int maxSpeed;
private int yearOfManufacture;
public Car(String model, int maxSpeed, int yearOfManufacture) {
this.model = model;
this.maxSpeed = maxSpeed;
this.yearOfManufacture = yearOfManufacture;
}
}
public class Truck extends Car {
public Truck(String model, int maxSpeed, int yearOfManufacture) {
super(model, maxSpeed, yearOfManufacture);
}
}
public class Sedan extends Car {
public Sedan(String model, int maxSpeed, int yearOfManufacture) {
super(model, maxSpeed, yearOfManufacture);
}
}
कमीतकमी, आम्ही कोडची अनावश्यक डुप्लिकेशन टाळतो (आणि प्रोग्राम लिहिताना आम्ही नेहमी त्यासाठी प्रयत्न केला पाहिजे). शिवाय, आमच्याकडे एक सोपी आणि समजण्याजोगी वर्ग रचना आहे, ज्यामध्ये सर्व कारसाठी समान फील्ड एका वर्गात एकत्रित केल्या आहेत. जर ट्रकमध्ये काही विशेष फील्ड असतील जे इतर कारमध्ये नसतील तर ते वर्गात घोषित केले जाऊ शकतात Truck
. पद्धतींसाठीही तेच आहे. सर्व कारमध्ये काही सामान्य वर्तन असते ज्याचे वर्णन पद्धतींद्वारे केले जाऊ शकते, उदा. कार सुरू करणे, वेग वाढवणे/ब्रेक इ. या सामान्य पद्धती पालक वर्गामध्ये एकत्रित केल्या जाऊ शकतात Car
आणि प्रत्येक विशिष्ट प्रकारची कार त्यांच्या व्युत्पन्न वर्गांमध्ये त्यांच्या अद्वितीय क्रिया परिभाषित करू शकते. .
public class Car {
public void gas() {
// Accelerate
}
public void brake() {
// Brake
}
}
public class F1Car extends Car {
public void pitStop() {
// Only race cars make pit stops
}
public static void main(String[] args) {
F1Car formula1Car = new F1Car();
formula1Car.gas();
formula1Car.pitStop();
formula1Car.brake();
}
}
आम्ही वर्गात सर्व कारसाठी सामान्य पद्धती जोडल्या Car
. परंतु, "फॉर्म्युला 1" रेस कारचे प्रतिनिधित्व करणारा वर्ग पहा F1Car
. पिट स्टॉप (तात्काळ कार देखभालीसाठी थांबे) फक्त शर्यतींमध्ये केले जातात, म्हणून आम्ही ही विशिष्ट कार्यक्षमता संबंधित व्युत्पन्न वर्गात जोडली. 
ऑपरेटरचे उदाहरण
जावामध्ये, विशिष्ट वर्गाच्या आधारे एखादी वस्तू तयार केली गेली आहे की नाही हे तपासण्यासाठी एक विशेष ऑपरेटर आहे, उदाहरणार्थ . चेकच्या निकालानुसार ते खरे किंवा खोटे परत येते. आमच्या कारच्या उदाहरणातील वर्ग वापरून ते कसे कार्य करते ते पाहू:
public class Truck extends Car {
public static void main(String[] args) {
Truck truck = new Truck();
System.out.println(truck instanceof Car);
}
}
आउटपुट: खरे ऑपरेटर खरेinstanceof
परत करतो , कारण आमच्याकडे एक वस्तू आहे आणि सर्व ट्रक कार आहेत. वर्गातून वर्ग काढला आहे . सर्व ट्रक सामान्य पालक, वर्गावर आधारित तयार केले जातात . ऑपरेटर कसा वापरला जातो ते बारकाईने पहा . तुम्ही ते एका कालावधीशिवाय लिहा, कारण ते एक ऑपरेटर आहे, पद्धत नाही ("ऑब्जेक्ट इन्स्टन्स ऑफ क्लास"). चला दुसरा मार्ग वापरून पाहू: Truck
Truck
Car
Car
instanceof
public static void main(String[] args) {
Car car = new Car();
System.out.println(car instanceof Truck);
}
आउटपुट: असत्य वर्ग Car
(आणि कार ऑब्जेक्ट्स) वर्गातून प्राप्त होत नाही Truck
. सर्व ट्रक कार आहेत, परंतु सर्व कार ट्रक नाहीत. Car
वस्तू वर्गावर आधारित नाहीत Truck
. आणखी एक उदाहरण:
public static void main(String[] args) {
Car car = new Car();
Truck truck = new Truck();
System.out.println(car instanceof Object && truck instanceof Object);
}
आउटपुट: ट्रू येथे तर्कशास्त्र देखील सोपे आहे: जावामधील सर्व वर्ग, तुम्ही तयार केलेल्या वर्गांसह, वर्गातून उतरतात Object
(जरी तुम्ही "विस्तारित ऑब्जेक्ट" लिहीत नसले तरीही - हे आधीच निहित आहे). हे कसे आणि कधी उपयोगी पडेल? पद्धत ओव्हरराइड करताना ऑपरेटरचा instanceof
वापर सामान्यतः केला जातो equals()
. उदाहरणार्थ, equals
वर्गात पद्धत कशी लागू केली जाते ते येथे आहे String
:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
उत्तीर्ण केलेल्या ऑब्जेक्टशी a तुलना करण्यापूर्वी String
, पद्धत चाचणी करते की ऑब्जेक्ट एक स्ट्रिंग आहे की नाही? त्यानंतरच ते दोन वस्तूंच्या गुणधर्मांची तुलना करू लागते. जर ही चाचणी अस्तित्वात नसेल तर, मूल्य आणि लांबी फील्ड असलेली कोणतीही वस्तू या पद्धतीमध्ये पास केली जाऊ शकते आणि स्ट्रिंगशी तुलना केली जाऊ शकते, जे नक्कीच चुकीचे असेल.
GO TO FULL VERSION