what is inheritance java tutorial with examples
Αυτό το σεμινάριο εξηγεί την έννοια της κληρονομικότητας στην Java, σχετικούς όρους όπως λέξεις-κλειδιά «επεκτείνεται» και «σούπερ», υποκατηγορία, superclass, σχέσεις Is-A, HAS-A κ.λπ.
Αφού μάθουμε για τους τρεις πυλώνες του OOP, δηλαδή την αφαίρεση, την ενθυλάκωση και τον πολυμορφισμό στην Java, φτάνουμε στον τελευταίο πυλώνα του OOP, δηλαδή στην κληρονομιά.
Ξεκινώντας με αυτό το σεμινάριο θα συζητήσουμε την κληρονομιά στην Java στα επόμενα δύο σεμινάρια.
=> Διαβάστε μέσω της σειράς Easy Java Training.
Τι θα μάθετε:
Κληρονομικότητα στην Ιάβα
Η κληρονομικότητα στην Java μπορεί να οριστεί ως μια τεχνική ή μια διαδικασία στην οποία ένα αντικείμενο μιας κλάσης αποκτά τη συμπεριφορά και τις ιδιότητες ενός άλλου αντικειμένου. Αυτό γίνεται με την κληρονομιά της τάξης ή τη δημιουργία σχέσης μεταξύ δύο τάξεων.
Για παράδειγμα, ένας βάτραχος είναι αμφίβιο. Όπως και άλλα ζώα της τάξης των Αμφιβίων, ο Frog μπορεί να έχει πολλά χαρακτηριστικά που είναι κοινά σε άλλα ζώα. Εδώ λοιπόν ένα Αμφίβιο είναι ένα είδος και ζώα όπως οι βάτραχοι είναι μέλη του.
Αν πρέπει να εκπροσωπήσουμε τα είδη των αμφιβίων και τα μέλη του σε μια αναπαράσταση λογισμικού χρησιμοποιώντας το OOP, τότε αυτό που θα κάνουμε είναι να αναπτύξουμε μια τάξη «Αμφίβια» που περιέχει ιδιότητες ή συμπεριφορά που είναι κοινή για τα αμφίβια γενικά.
Με αυτόν τον τρόπο δεν χρειάζεται να αντιγράφουμε τις κοινές ιδιότητες και συμπεριφορά για κάθε αμφίβιο ζώο που περιγράφουμε. Θα δημιουργήσουμε απευθείας ένα μάθημα για αμφίβια ζώα και κληρονομικά από την τάξη των Αμφιβίων όπως φαίνεται παρακάτω.
Έτσι, μια γενική ιδέα πίσω από το χαρακτηριστικό 'Κληρονομικότητα' είναι ότι μπορούμε να δημιουργήσουμε νέες τάξεις κληρονομούμε από τις ήδη υπάρχουσες τάξεις. Κληρονομώντας από τις ήδη υπάρχουσες τάξεις, χρησιμοποιούμε τις ιδιότητες και τη συμπεριφορά αυτών των τάξεων. Εκτός αυτού, μπορούμε να προσθέσουμε περισσότερες ιδιότητες ή / και συμπεριφορά στη νέα μας τάξη.
Η δυνατότητα κληρονομικότητας απεικονίζει ένα « γονέας-παιδί Σύνδεση ή σχέση στην Java. Η τάξη από την οποία κληρονομείται η νέα τάξη ονομάζεται « Γονική τάξη 'Ενώ η νέα τάξη ονομάζεται' Παιδική τάξη '.
Η κληρονομικότητα χρησιμοποιείται κυρίως:
- Για παράκαμψη μεθόδου ώστε να μπορούμε να επιτύχουμε πολυμορφισμός χρόνου εκτέλεσης .
- Προς την επαναχρησιμοποιήστε τον κωδικό . Κληρονομώντας από τις ήδη υπάρχουσες τάξεις, διασφαλίζουμε το επαναχρησιμοποίηση κωδικού.
Κοινή ορολογία που χρησιμοποιείται στην κληρονομικότητα
- Επαναχρησιμοποίηση: Μηχανισμός με τον οποίο οι νέες τάξεις επαναχρησιμοποιούν πεδία ή ιδιότητες και μεθόδους μιας υπάρχουσας τάξης.
- Τάξη: Η κλάση είναι μια συλλογή αντικειμένων που έχουν κοινές ιδιότητες. Μια τάξη μπορεί να θεωρηθεί πρότυπο ή μπλε εκτύπωση για τα αντικείμενα.
- Υποκατηγορία / Παιδική τάξη: Μια τάξη που κληρονομεί από μια άλλη τάξη είναι μια υποκατηγορία ή μια θυγατρική τάξη ή μια παράγωγη τάξη.
- Super Class / Γονική τάξη: Μια τάξη που κληρονομείται από άλλη τάξη για την απόκτηση ιδιοτήτων και μεθόδων ονομάζεται κλάση γονέα ή superclass ή βασική τάξη.
Η ακόλουθη ιεραρχία κληρονομιάς είναι ένα παράδειγμα που δείχνει ένα superclass και μια υποκατηγορία.
Έχουμε μια τάξη υπαλλήλων με πεδία OrganisationName και EmployeeId. Μπορεί επίσης να έχει άλλα πεδία όπως το όνομα του υπαλλήλου, το τμήμα και άλλα στοιχεία του υπαλλήλου.
Στη συνέχεια, έχουμε μια άλλη τάξη με το όνομα «SoftwareDeveloper» με τον μισθό και τα προνόμια του τομέα. Η κλάση SoftwareDeveloper κλάσης κληρονομείται από την κατηγορία υπαλλήλων, και ως εκ τούτου αποκτά επίσης τις ιδιότητες της κλάσης υπαλλήλων.
Όπως φαίνεται στο παραπάνω διάγραμμα, εδώ η κλάση υπαλλήλων είναι μια κλάση Super ή Base και το SoftwareDeveloper είναι μια υποκατηγορία ή μια παράγωγη κλάση.
Λέξη-κλειδί «επεκτείνεται» στην Java
Στην Java, η λέξη-κλειδί «επεκτείνεται» χρησιμοποιείται για να κληρονομήσει την τάξη.
Η γενική σύνταξη της κληρονομιάς Java δίνεται παρακάτω:
class SubClass extends SuperClass { //subclass methods and fields }
Όπως φαίνεται παραπάνω, η λέξη-κλειδί «επεκτείνεται» εμφανίζεται μετά το όνομα κλάσης στη σύνταξη δήλωσης τάξης.
Η λέξη-κλειδί «επεκτείνεται» υποδηλώνει ότι δημιουργούμε μια νέα τάξη «SubClass» που θα κληρονομήσει τις ιδιότητες και τη συμπεριφορά από το «SuperClass». Με άλλα λόγια, η λέξη-κλειδί επεκτείνει δείχνει ότι χτίζουμε μια νέα κλάση SubClass στην υπάρχουσα λειτουργικότητα του SuperClass.
Η κληρονομιά που εφαρμόζεται με τη λέξη-κλειδί 'επεκτείνεται' είναι η κληρονομιά κλάσης. Στο επόμενο σεμινάριο, θα συζητήσουμε μια άλλη λέξη-κλειδί «εργαλεία» χρησιμοποιώντας την οποία μπορούμε να κληρονομήσουμε διεπαφές.
Ένα παράδειγμα της κλάσης Employee-SoftwareDeveloper που έχουμε εξηγήσει παραπάνω μπορεί να αναπαρασταθεί ως:
class Employee{ String OrganizationName; int EmployeeId; } class SoftwareDeveloper extends Employee{ float Salary; float Perks; }
IS-A και HAS-A Σχέση
Εξετάστε την ακόλουθη δομή τάξης:
class Mammal{ } class Cow extends Mammal{ }
Πώς μπορούμε λοιπόν να ερμηνεύσουμε την παραπάνω δομή; Καθώς η τάξη των αγελάδων επεκτείνεται ή κληρονομεί το θηλαστικό, μπορούμε να πούμε «αγελάδα ΕΙΝΑΙ ΕΝΑ Θηλαστικό 'ή' Αγελάδα ΕΙΝΑΙ ένα είδος Θηλαστικό ζώο'. Ως εκ τούτου, κάθε φορά που εκφράζουμε τέτοιες σχέσεις, η συγκεκριμένη σχέση είναι η σχέση «IS_A».
Στην παραπάνω δομή, χρησιμοποιήσαμε την ιεραρχία κληρονομιάς για να εκφράσουμε το γεγονός ότι το ένα είδος είναι άλλου είδους. Έτσι, στην παραπάνω δομή, χρησιμοποιήσαμε μια κληρονομιά για να δείξουμε τη σχέση μεταξύ αγελάδας και θηλαστικού.
Ομοίως, μπορούμε να εκφράσουμε μερικές ακόμη σχέσεις IS-A ως εξής:
Δίνεται παραπάνω είναι μερικά από τα κοινά παραδείγματα σχέσεων που μπορούμε να εκφράσουμε χρησιμοποιώντας κληρονομιά στην Java.
Γενικά, οι σχέσεις IS-A μπορούν να εκφραστούν χρησιμοποιώντας κληρονομιά.
Ας δούμε το παρακάτω παράδειγμα:
Στο παραπάνω διάγραμμα, βλέπουμε ότι ένα όχημα φαίνεται να έχει δύο μέρη, δηλαδή κινητήρα και φρένο. Πώς λοιπόν μπορούμε να βάλουμε αυτό το σενάριο με λόγια;
Μπορούμε να πούμε ότι «ένα όχημα περιέχει ένας κινητήρας και ένα όχημα περιέχει ένα φρένο ».
Επομένως, αυτό που εκφράζουμε εδώ δεν είναι η σχέση «IS-A» αλλά μια σχέση περιορισμού στην οποία καθορίζουμε ένα αντικείμενο ως μέρος ενός άλλου αντικειμένου.
5 παραδείγματα γλωσσών προγραμματισμού υψηλού επιπέδου
Στο παραπάνω παράδειγμα, ένας κινητήρας είναι ένας μέρος του όχημα. Δεν είναι « περίπου Όχημα. Αυτό είναι το ' ΕΧΕΙ ΕΝΑ 'Ή σχέση περιορισμού ή σύνθεσης στην Java. Η σχέση Has-a στην Java εκφράζεται συμπεριλαμβάνοντας ένα αντικείμενο ως μέλος της τάξης.
Έτσι, εάν ακολουθήσουμε το ίδιο παράδειγμα οχήματος παραπάνω, τότε μπορούμε να το εκφράσουμε ως εξής:
class Engine{ } class Brake { } class Vehicle{ Engine e; Brake b; }
Έτσι, ένα όχημα έχει κινητήρα και φρένο. Εκφράζοντας τη σχέση με τον παραπάνω τρόπο, δεν ενδιαφερόμαστε για την εσωτερική εφαρμογή του κινητήρα ή του φρένου. Η κατηγορία οχημάτων θα ενημερώσει τις κατηγορίες κινητήρων και φρένων τι χρειάζεται και αυτές οι κατηγορίες θα το παρέχουν.
Όπως και η σχέση IS-A, η σχέση HAS-A είναι επίσης χρήσιμη για την επαναχρησιμοποίηση του κώδικα.
Σε αυτό το σεμινάριο, θα συζητήσουμε λεπτομερώς την κληρονομιά (IS-A) και στο επόμενο σεμινάριο, θα συζητήσουμε τον περιορισμό ή τη σύνθεση (HAS-A).
Παράδειγμα κληρονομικότητας Java
Ας εφαρμόσουμε ένα απλό παράδειγμα στην Java για να δείξουμε κληρονομικότητα.
//example class demonstrating Inheritance in Java class BaseClass { public void display() { System.out.println('BaseClass::Display'); } } //create a new class from BaseClass class DerivedClass extends BaseClass { public void print() { System.out.println('DerivedClass::print'); } } class Main { public static void main(String() args) { //create an object of DerivedClass DerivedClass d1 = new DerivedClass(); d1.display(); //call BaseClass method d1.print(); //call DerivedClass method } }
Παραγωγή:
Το παραπάνω πρόγραμμα δείχνει ένα απλό παράδειγμα κληρονομιάς. Ένα BaseClass με μία μέθοδο δηλώνεται. Στη συνέχεια δηλώνεται μια άλλη κλάση DerivedClass που επεκτείνει το BaseClass. Αυτή η τάξη έχει επίσης μία μέθοδο.
Στην κύρια μέθοδο του προγράμματος, δημιουργούμε ένα αντικείμενο DerivedClass και χρησιμοποιώντας αυτό το αντικείμενο ονομάζουμε το BaseClass καθώς και τη μέθοδο DerivedClass.
Η έξοδος εμφανίζει τα μηνύματα που εκτυπώνονται και με τις δύο μεθόδους. Καθώς το DerivedClass επεκτείνει τη μέθοδο BaseClass και BaseClass είναι δημόσια, είναι ορατή στο DerivedClass.
«Σούπερ» λέξη-κλειδί στην Java
Στην κληρονομιά, ασχολούμαστε με σούπερ γυαλιά ή τάξεις γονέων και παιδικές τάξεις. Αν πρέπει να έχουμε ενδιάμεση πρόσβαση σε μέλη της superclass, συμπεριλαμβανομένων μεταβλητών, μεθόδων ή κατασκευαστών, τότε πρέπει να έχουμε κάποιο μηχανισμό. Αυτός ο μηχανισμός πρόσβασης στα μέλη της κατηγορίας βάσης παρέχεται στην Java χρησιμοποιώντας μια «σούπερ» λέξη-κλειδί.
Λοιπόν, σε ποια σενάρια χρησιμοποιούμε την «σούπερ» λέξη-κλειδί στην Java;
Παρακάτω αναφέρονται σενάρια στα οποία μια «σούπερ» λέξη-κλειδί μπορεί να είναι χρήσιμη.
- Όταν η κατηγορία super / base και sub / turunan έχει τα ίδια ονόματα για μέλη και θέλουμε να αποκτήσουμε πρόσβαση σε μέλη superclass τότε χρησιμοποιούμε την super λέξη-κλειδί.
- Όταν θέλουμε να αποκτήσουμε πρόσβαση στον κατασκευαστή superclass από την υποκατηγορία, τότε χρησιμοποιούμε την super λέξη-κλειδί για να επικαλεστούμε τη λέξη-κλειδί superclass.
Στο παραπάνω σχήμα, έχουμε δείξει μια δομή κληρονομιάς. Στη βάση καθώς και στην παράγωγη κλάση, έχουμε μια μεταβλητή String myStr. Στο derivassClass, έχουμε μια συνάρτηση printStr (). Σε αυτήν τη μέθοδο, χρησιμοποιήσαμε τη λέξη-κλειδί «super» για πρόσβαση στη μεταβλητή myStr από την βασική κλάση.
Στο σχήμα, έχουμε δείξει τα βέλη που δείχνουν τη μεταβλητή μέλους της βασικής κατηγορίας και την μεταβλητή κλάσης που προέρχεται.
Ας δούμε τώρα τα παραδείγματα προγραμματισμού της χρήσης της υπερ-λέξης-κλειδιού για πρόσβαση σε διάφορα μέλη superclass.
# 1) Πρόσβαση σε μεταβλητή μέλους Superclass
Το ακόλουθο πρόγραμμα Java δείχνει τη χρήση μιας «σούπερ» λέξης-κλειδιού για την πρόσβαση μεταβλητών από την βασική κλάση.
class Baseclass { String myStr; } class Subclass extends Baseclass { String myStr; public void printdetails() //Baseclass and Subclass have variables with same name { super.myStr = 'Super'; //refers to parent class member myStr = 'Sub'; System.out.println('Superclass myStr :' + super.myStr+' and Subclass myStr:'+myStr); } } class Main{ public static void main(String() args) { Subclass cobj = new Subclass(); cobj. printdetails (); } }
Παραγωγή:
Το παραπάνω πρόγραμμα δείχνει τον τρόπο πρόσβασης στις μεταβλητές μέλους της βασικής κλάσης από την κλάση που προέρχεται όταν οι μεταβλητές μελών δηλώνονται με το ίδιο όνομα τόσο στη βάση όσο και στην παράγωγη κλάση.
Εδώ, έχουμε τη μεταβλητή myStr που δηλώνεται στη βάση καθώς και στην παράγωγη κλάση. Στη μέθοδο printdetails, αναφερόμαστε στη μεταβλητή myStr της βασικής κλάσης χρησιμοποιώντας το 'super.myStr' ενώ η μεταβλητή κλάσης παραγόμενου myStr έχει άμεση πρόσβαση χωρίς προσδιορισμό.
pl sql ερώτηση συνέντευξης για έμπειρους
# 2) Πρόσβαση στη μέθοδο Superclass
Στη συνέχεια, θα δούμε πώς να καλέσουμε τη μέθοδο βασικής κλάσης όταν η μέθοδος στην βασική κλάση και η μέθοδος στην παράγωγη κλάση έχουν τα ίδια ονόματα.
Το παρακάτω πρόγραμμα το αποδεικνύει.
class Parent { String myStr; public void print() //parent class method { myStr = 'Parent class myStr'; System.out.println(myStr); } } class Child extends Parent { String myStr; public void print() //child class method with same name as parent { super.print(); //call Parent class print() method myStr = 'Child class myStr'; System.out.println(myStr); } } class Main{ public static void main(String() args) { Child c_obj = new Child(); c_obj.print (); } }
Παραγωγή:
# 3) Πρόσβαση στον κατασκευαστή Superclass
Όταν κληρονομούμε μια τάξη από την άλλη, σημειώστε ότι οι κατασκευαστές δεν κληρονομούνται.
Εάν θέλουμε να εκτελέσουμε οποιεσδήποτε οδηγίες από τους κατασκευαστές superclass πριν εκτελέσουμε τον κατασκευαστή κλάσης που προέρχεται, τότε μπορούμε επίσης να καλέσουμε τον κατασκευαστή superclass χρησιμοποιώντας τη λέξη-κλειδί «super».
Για να καλέσουμε τον κατασκευαστή superclass χρησιμοποιούμε τη μέθοδο κλήσης.
σούπερ (λίστα παραμέτρων…)
Η ακόλουθη μέθοδος δείχνει την πρόσβαση σε υπερκατασκευαστές στην Java.
class Parent { String myStr; public Parent(String name) //base class constructor { myStr = name; } } class Child extends Parent { String myStr; public Child(String name1, String name2) { super(name1); //call base class constructor and pass argument value this.myStr = name2; } public void printDetails() //print details of both constructors { System.out.println('From base class constructor: ' +super.myStr); System.out.println('From derived class constructor: ' + myStr); } } class Main{ public static void main(String() args) { Child cobj = new Child('Super constructor string','Child constructor string'); cobj.printDetails(); } }
Παραγωγή:
Όπως μπορούμε να δούμε από το παραπάνω πρόγραμμα, έχουμε καλέσει τον κατασκευαστή του superclass από τον κατασκευαστή της παραγόμενης κλάσης. Σημειώστε ότι, κατά συνθήκη, όποτε θέλουμε να αποκτήσουμε πρόσβαση στον κατασκευαστή του superclass, θα πρέπει να είναι η πρώτη δήλωση στον κατασκευαστή της παραγόμενης κλάσης.
Δεδομένου ότι η βασική κλάση έχει έναν παραμετροποιημένο κατασκευαστή, μεταβιβάζουμε επίσης την κατάλληλη παράμετρο στο super call ενώ καλούμε τον κατασκευαστή.
Εάν δεν υπάρχει ρητή κλήση στον υπερκατασκευαστή όπως παραπάνω, τότε ο μεταγλωττιστής προσθέτει πάντα μια σιωπηρή κλήση στο super () αυτόματα. Αλλά σημειώστε ότι αυτό θα είναι μια κλήση στον προεπιλεγμένο κατασκευαστή του superclass.
Συχνές Ερωτήσεις
Q # 1) Τι είναι η κληρονομικότητα στην Java;
Απάντηση: Μια διαδικασία με την οποία μια τάξη αποκτά τις ιδιότητες και τη συμπεριφορά μιας άλλης τάξης ονομάζεται κληρονομιά. Στην Java, μια τάξη κληρονομείται από μια άλλη τάξη χρησιμοποιώντας τη λέξη-κλειδί «επεκτείνεται».
Η κληρονομικότητα προάγει την επαναχρησιμοποίηση του κώδικα καθώς κληρονομώντας μπορούμε να αποκτήσουμε και να χρησιμοποιήσουμε τις ήδη υπάρχουσες ιδιότητες και συμπεριφορά μιας κληρονομικής τάξης χωρίς να χρειαστεί να γράψουμε διπλό κώδικα.
Q # 2) Γιατί χρησιμοποιείται η κληρονομικότητα στην Java;
Απάντηση: Η κληρονομικότητα χρησιμοποιείται κυρίως για τη βελτίωση της επαναχρησιμοποίησης της εφαρμογής. Χρησιμοποιώντας κληρονομιά μπορούμε να χρησιμοποιήσουμε έτοιμα μαθήματα στην εφαρμογή μας. Δεν χρειάζεται να γράψουμε τον κωδικό μας εάν έχουμε τη λειτουργικότητα έτοιμη.
Η δεύτερη χρήση της κληρονομιάς είναι στην παράκαμψη μεθόδου. Για να εφαρμόσουμε τον πολυμορφισμό χρόνου εκτέλεσης, χρησιμοποιούμε την κληρονομιά.
Q # 3) Ποια είναι τα πλεονεκτήματα της κληρονομικότητας;
Απάντηση: Η επαναχρησιμοποίηση είναι το βασικό πλεονέκτημα της κληρονομιάς. Η κοινή χρήση κώδικα μέσω κληρονομιάς οδηγεί επίσης σε καλύτερη αναγνωσιμότητα και καλύτερη οργάνωση του κώδικα.
Μπορούμε επίσης να επιτύχουμε πολυμορφισμό χρόνου εκτέλεσης μέσω μεθόδου παράκαμψης χρησιμοποιώντας κληρονομικότητα.
Q # 4) Ποια είναι τα χαρακτηριστικά της Κληρονομικότητας;
Απάντηση: Οποιοδήποτε χαρακτηριστικό ή χαρακτηριστικό που αποκτήθηκε από την παλαιότερη γενιά γίνεται μέσω κληρονομιάς. Για παράδειγμα, Το χαρακτηριστικό του φωτός-ματιού που εμφανίζεται σε πολλές οικογένειες είναι ένα παράδειγμα κληρονομιάς.
Από άποψη προγραμματισμού, η κληρονομιά παρέχει τη δυνατότητα επαναχρησιμοποίησης και παράκαμψης μεθόδου.
Ε # 5) Είναι σούπερ () απαραίτητο;
Απάντηση: Όχι. Επειδή εάν δεν καλέσουμε το super (), ο μεταγλωττιστής το κάνει εμμέσως για εμάς. Αλλά τότε η σιωπηρή επίκληση του super () είναι ο προεπιλεγμένος κατασκευαστής βασικής κλάσης. Επομένως, εάν χρειαζόμαστε έναν παραμετροποιημένο κατασκευαστή από μια βασική κλάση, τότε πρέπει να το ονομάσουμε ρητά.
συμπέρασμα
Σε αυτό το σεμινάριο, παρουσιάσαμε την έννοια της Κληρονομικότητας στην Java. Η κληρονομικότητα είναι η διαδικασία απόκτησης των ιδιοτήτων και της συμπεριφοράς μιας τάξης σε μια άλλη τάξη. Συζητήσαμε τον βασικό ορισμό και την ορολογία που χρησιμοποιούμε στην κληρονομιά εδώ.
Συζητήσαμε επίσης τις σχέσεις Is-A και Has-A στην Java. Η κληρονομικότητα χρησιμοποιείται για την εφαρμογή μιας σχέσης Is-A.
Στη συνέχεια συζητήσαμε τις λέξεις-κλειδιά «επεκτείνεται» και «σούπερ» στην Java που χρησιμοποιούνται σε σχέση με την κληρονομιά. Το Extends χρησιμοποιείται για την εφαρμογή κληρονομιάς. Η υπερ-λέξη-κλειδί χρησιμοποιείται για να αναφέρεται στον κατασκευαστή, τη μέθοδο ή τη μεταβλητή της βασικής κλάσης από την κλάση που προέρχεται.
=> Ανατρέξτε στον τέλειο οδηγό εκπαίδευσης Java εδώ.
Συνιστώμενη ανάγνωση
- Εκπαιδευτικό μάθημα κλάσης Java Scanner με παραδείγματα
- Τι είναι το Java Java | Java Vector Class Tutorial με παραδείγματα
- Java Enum: Java Enumeration Tutorial με παραδείγματα
- Java String length () Μέθοδος με παραδείγματα
- Java Float Tutorial με παραδείγματα προγραμματισμού
- Κληρονομικότητα σε C ++
- Τύποι κληρονομικότητας σε C ++
- Έννοιες Python OOPs (Μαθήματα Python, Αντικείμενα και Κληρονομικότητα)