Home / ພື້ນຖານ Java / Inheritance
Inheritance ເປັນຄຸນສົມບັດໃນການຂຽນໂປຣແກຣມເຊີງວັດຖຸທີ່ຮຽກວ່າຄຸນສົມບັດການສືບຕອດ ໂດຍທີ່ຄາດສາມາດສືບຕອດສະມາຊິກຂອງມັນຈາກຄາດຫຼັກ (super class) ໄປທີຄາດຍ່ອຍ (delivered class) ໂດຍການສືບຕອດໃນພາສາ Java ນັ້ນສະມາຊິກທັງໝົດຈະຖືກສືບຕອດໄປທີຄາດຍ່ອຍ ຍົກເວັ້ນສະມາຊິກທີ່ມີການເຂົ້າເຖິງໃນລະດັບທີເປັນ private ແລະ constructor ຂອງມັນ
ໃນການສືບຕອດຄາດ ນອກຈາກມັນຈະໄດ້ຮັບສະມາຊິກຈາກຄາດແມ່ແລ້ວ ຍັງສາມາດເພີ່ມສະມາຊິກ ແລະ ເມຕອດຂອງມັນເອງໄດ້ ເຮັດໃຫ້ມັນມີຄວາມສາມາດເພີ່ມຫຼາຍຂຶ້ນ ນິ້ເປັນຮູບແບບການສືບຕອດຂອງຄາດໃນພາສາ Java ອີກດ້ວຍ
class DeliveredClass extends SuperClass {
...
}
ໝາຍເຫດ: ໃນການສືບຕອດນັ້ນຈະໃຊ້ຄຳສັ່ງ extends ໂດຍ SuperClass ນັ້ນເປັນຄາດຫຼັກທີ່ຈະສືບຕອດໄປທີ່ DeliveredClass ຫຼື ຄາດລຸກ
class Person {
String name;
int age;
public Person () {
}
public Person (String name, int age) {
this.name = name;
this.age = age;
}
public void introduce () {
System.out.println("My name is " + name);
}
}
ໝາຍເຫດ: ແມ່ນເປັນຄາດ Person ໂດຍເຮົາຈະໃຊ້ຄາດນີ້ໃນການສືບຕອດຄຸນສົມບັດໃຫ້ກັບຄາດອື່ນ ເຊິ່ງໝາຍຄວາມວ່າຄາດນີ້ຈະເປັນ super class ນັ້ນເອງ
class Artist extends Person {
String genre;
public Artist (String name, int age){
this.name = name;
this.age = age;
}
public void playMusic () {
System.out.println(name + " is playing " + genre + " music.");
}
}
class Athlete extends Person {
String sport;
public Athlete (String name, int age){
this.name = name;
this.age = age;
}
public void playSport () {
System.out.println(name + " is playing " + sport + ".");
}
}
ໝາຍເຫດ: ຄາດ Artist ເປັນຄາດທີ່ສືບຕອດມາຈາກຄາດ Person ນັ້ນໝາຍຄວາມວ່າສະມາຊິກທັງໝົດຂອງ Person ຍົກເວັ້ນ constructor ແລະ ສະມາຊິກທີ່ເປັນ private ຈະບໍ່ຖືກສືບຕອດມານຳ ແລະ ເຮົາໄດ້ເພີ່ມຕົວແປຣໃຫ້ກັບຄາດນີ້ ຄື genre ເປັນຕົວແປຣສຳລັບປະເພດດົນຕີທີ່ມັກຫລິ້ນ ແລະ ເມຕອດ playMusic() ຫລິ້ນດົນຕີ
ຕໍ່ມາເປັນຄາດ Athlete ການສືບຕອດນັ້ນເປັນເຊັ່ນດຽວກັນກັບຄາດ Artist ເພາະສືບຕອດມາຈາກຄາດດຽວກັນ ແລະ ເຮົາໄດ້ເພີ່ມຕົວແປຣໃຫ້ກັບຄາດນີ້ ຄື sport ເປັນຕົວແປຣສຳລັບກີລາທີ່ມັກຫລິ້ນ ແລະ ເມຕອດ playSport() ເພື່ອຫລິ້ນຫຼິນກິລານັ້ນ
ເຮົາຍັງສ້າງ constructor ໃຫ້ກັບຄາດທັງສອງດ້ວຍ ເພາະວ່າ constructor ບໍ່ໄດ້ສືບຕອດ ຕໍ່ມາເປັນຕົວຢ່າງການໃຊ້ງານ ໂຄ້ດທັງໝົດ ແລະ ເຮັດການສ້າງອອບເຈັກ
public class InheritanceExample {
public static void main (String[] args) {
Artist art = new Artist("Marcus", 20);
Athlete ath = new Athlete("Danny", 25);
art.genre = "Trip Hop";
ath.sport = "Football";
art.introduce();
art.playMusic();
System.out.println();
ath.introduce();
ath.playSport();
}
}
class Person {
String name;
int age;
public Person () {
}
public Person (String name, int age) {
this.name = name;
this.age = age;
}
public void introduce () {
System.out.println("My name is " + name);
}
}
class Artist extends Person {
String genre;
public Artist (String name, int age){
this.name = name;
this.age = age;
}
public void playMusic () {
System.out.println(name + " is playing " + genre + " music.");
}
}
class Athlete extends Person {
String sport;
public Athlete (String name, int age){
this.name = name;
this.age = age;
}
public void playSport () {
System.out.println(name + " is playing " + sport + ".");
}
}
ໃນຕົວຢ່າງເຮົາໄດ້ສ້າງອອບເຈັກຈາກຄາດທັງສອງຂຶ້ນມາ ແລະ ກຳນົດຄ່າເຮົາສັງເກດວ່າໃນຄອນສະຕັກເຕີ delivered class ທັງສອງເຮົາໄດ້ໃຊ້ຄຳສັ່ງ this.name ກໍ່ຄືຕົວແປຣທີ່ສືບຕອດມາຈາກ super ຄາດ ແລ ະໃນເມຕອດ Main ຄຳສັ່ງ art.introduce() ແລະ ath.introduce() ຄືເມຕອດທີ່ຖືກສືບຕອດມາເຊັ່ນກັນ ສັງເກດວ່າເຮົາບໍ່ຕ້ອງປະກາດອີກໃນຕອນທີ່ສ້າງ delivered class ເຊິ່ງນິ້ເປັນອີກເຫດຜົນໜຶ່ງເຮັດໃຫ້ເຮົາສາມາດນຳໂຄ້ດເກົ່າມາໃຊ້ໄດ້ ໂດຍບໍ່ຕ້ອງຂຽນໃໝ່ທັງໝົດ
My name is Marcus
Marcus is playing Trip Hop music.
My name is Danny
Danny is playing Football.
ໃນການສືບຕອດຈາກ super class ມາຍັງ delivered class ນັ້ນ delivered class ຍັງສາມາດ override ການເຮັດວຽກງານຂອງເມຕອດໃນ super class ໄດ້ ໂດຍການ override ເມຕອດໃນພາສາ Java ນັ້ນຈະໃຊ້ຄຳສັ່ງ @Override ນຳໜ້າເມຕອດທີ່ຕ້ອງການຈະໃຊ້ງານ
class Artist extends Person {
String genre;
public Artist (String name, int age){
this.name = name;
this.age = age;
}
@Override
public void introduce () {
System.out.println("My name is " + name);
System.out.println("I'm an artist.");
}
public void playMusic () {
System.out.println(name + " is playing " + genre + " music.");
}
}
class Athlete extends Person {
String sport;
public Athlete (String name, int age){
this.name = name;
this.age = age;
}
@Override
public void introduce () {
System.out.println("My name is " + name);
System.out.println("I'm an athlete.");
}
public void playSport () {
System.out.println(name + " is playing " + sport + ".");
}
}
ໝາຍເຫດ: ຈາກຕົວຢ່າງເປັນການ override ເມຕອດ introduce() ຈາກ super class ເພື່ອໃຫ້ບອກຄຳທັກທາຍທີ່ແຕກຕ່າງກັນອອກໄປສຳລັບແຕ່ອາຊີບ ຕອນນີ້ໃຫ້ເຮົາຄັດລອກຄາດທັງສອງໄປແທນທີແບບເກົ່າ ທີ່ບໍ່ມີການ override ແລ້ວຣັນໂປຣແກຣມໃໝ່
My name is Marcus
I'm an artist.
Marcus is playing Trip Hop music.
My name is Danny
I'm an athlete.
Danny is playing Football.
ເຊິ່ງຈະໄດ້ຜົນລັບຂອງການເຮັດວຽກ ການແນະນຳຈະຕ່າງກັນອອກໄປສຳລັບແຕ່ລະຄາດ ເຊິ່ງເກີດຈາກການ Override ເມຕອດ introduce()
ໝາຍເຫດ: ເຮົາສາມາດເຮັດການ Override ເມຕອດ ໂດຍບໍ່ຕ້ອງໃຊ້ຄຳສັ່ງ @Override ກໍ່ໄດ້ ຄອມໄພລຣີຂອງພາສາຈະຮູ້ອັດຕະໂນມັດວ່າເຮົາເຮັດການ Override ເມື່ອມີເມຕອດທີ່ຊ້ຳກັນກັບ super class
ນອກຈາກຄຳສັ່ງ this ທີ່ເປັນຄຳສັ່ງບອກການເຂົ້າເຖິງສະມາຊິກໃນຄາດປະຈຸບັນແລ້ວ ເຮົາຍັງສາມາດເຂົ້າເຖິງສະມາຊິກຫລື constructor ຂອງ super class ໄດ້ໂດຍການໃຊ້ຄຳສັ່ງ super ມັນໃຊ້ກັບຄາດ ຫລື ເມຕອດທີ່ຖືກ Override ມາເບິ່ງຕົວຢ່າງການໃຊ້ຄຳສັ່ງ super ໃນພາສາ Java
class Artist extends Person {
String genre;
public Artist (String name, int age){
super(name, age);
}
@Override
public void introduce () {
super.introduce();
System.out.println("I'm an artist.");
}
public void playMusic () {
System.out.println(name + " is playing " + genre + " music.");
}
}
class Athlete extends Person {
String sport;
public Athlete (String name, int age){
super(name, age);
}
@Override
public void introduce () {
super.introduce();
System.out.println("I'm an athlete.");
}
public void playSport () {
System.out.println(name + " is playing " + sport + ".");
}
}
ຈາກຕົວອຢ່າງຂ້າງເທິງ ເຮົາໄດ້ໃຊ້ຄຳສັ່ງ super ໃນ constructor ຂອງຄາດຍ່ອຍໃນຄຳສັ່ງ super(name, age) ເພາະມາມັນມີການເຮັດວຽກງານຄືກັນກັບຄາດແມ່ ເຮົາບໍ່ຈຳເປັນຕ້ອງຂຽນໃໝ່ ຕໍ່ມາເຮົາໄດ້ໃຊ້ໃນເມຕອດ introduce super.introduce() ເພື່ອຮຽກການທັກທາຍຈາກ super class ເຊັ່ນກັນ ເມື່ອເຮົານຳຄາດຂ້າງເທິງໄປຣັນມັນຈະໄດ້ຜົນລັບທ໌ເຊັ່ນດຽວກັນກັບຕົວຢ່າງໃນ override ກ່ອນໜ້າ
ໃນບົດນີ້ ເຮົາໄດ້ຮຽນຮູ້ກ່ຽວກັບ Inheritance (ຄຸນສົມບັດການສືບຕອດ) ໃນພາສາ Java ເຊິ່ງເຮົາໄດ້ເຫັນວ່າເຮົາສາມາດນຳຄຸນສົມບັດຂອງຄາດເດີມມາໃຊ້ ໂດຍບໍ່ຕ້ອງຂຽນໃໝ່ທັງໝົດ ນອກຈາກນີ້ຢັງເພິ່ມເຕິມຄຸນສົມບັດ ແລະ ເມຕອດເພີ່ມເຂົ້າໄປໄດ້ ເຮົາຢັງໄດ້ຮຽນຮູ້ກ່ຽວກັບການ override ເມຕອດຈາກ super class ແລະ ການໃຊ້ຄຳສັ່ງ super