Байгуулагч функыг дахин тодорхойлж болохгүй. Харин тэрний оронд удамшиж буй классын (цаашид subclass гэж нэрлэнэ) байгуулагч функц дотроос эцэг классын (цаашид superclass гэж нэрлэнэ) байгуулагч функцыг super() түлхүүр үгээр дуудаж хэрэглэнэ.
class Human {
public String name;
public int age;
public Human(String name, int age) {
this.name = name;
this.age = age;
}
public void whoAreYou() {
System.out.println("My name is "+ this.name + " and i'm "+ this.age);
}
}
public class Employee extends Human {
public String country;
public Employee(String name, int age, String country) {
super(name, age);
this.country = country;
}
public void whoAreYou() {
super.whoAreYou();
System.out.println("I'm from "+ this.country);
}
public static void main(String args[]) {
// Human классыг дангаар нь хэрэглэж үзэе
Human human = new Human("John", 30);
// Одоо Удамшсан классыг хэрэглэж үзэе
Employee emp = new Employee("Sarah", 25, "Brazil");
}
}
this түлхүүр үг нь тухайн классаа заадаг бол super түлхүүр үг нь superclass-аа заадаг. Override хийж буй method дотроос superclass-ын method руу super түлхүүр үг ашиглан хандсан байна. ( super.whoAreYou(); )
override буюу дахин тодорхойлохдоо дараах дүрмийг баримтална.
- superclass-ын method-той адил нэртэй байна.
- superclass-ын method-той адилхан буцах утгатай байна.
- superclass-ын method-той адил аргументтэй байна.
superclass-ын method ыг дахин тодорхойлоогүй үед тухайн method өөрөө дуудагдаж ажиллана.
Нэг классаас хэдэн ч удаа удамшуулж болно. Удамшил нь хэдэн ч давхар удамшилтай байж болно. Жишээлбэл Human -> Employee -> Engineer -> ITEngineer
Давхар удамшлийн үед subclass-ын байгуулагчаас зөвхөн түүний superclass-ын байгуулагчыг дуудна. superclass-ын superclass гэсэн ойлголт байхгүй. Өөрөөр хэлбэл ITEngineer классаас Employee классын байгуулагчыг дуудаггүй.
subclass нь superclass-ын бүх методыг болон хувьсагчуудыг удамшуулан (өвлөн) авдаг. Өөрөөр хэлбэл superclass дээр бичигдсэн кодыг тэр чигт нь subclass дээр COPY хийж байгаатай адил. (мэдээж байгуулагч функц, болон static method-уудаас бусад)
No comments:
Post a Comment