มรดกคืออะไร (ขยาย)?
การสืบทอดคือ: คลาสที่กำหนดใหม่เป็นปรากฏการณ์ของการได้รับแอตทริบิวต์และวิธีการจากคลาสที่มีอยู่ คลาสที่มีอยู่นี้เรียกว่าคลาสหลักและคลาสที่ได้รับคุณสมบัติและวิธีการจากคลาสแม่นี้เรียกว่าคลาสย่อย
Extendsdemo1.java
การคัดลอกรหัสมีดังนี้:
/*มรดกคืออะไร*/
คลาสสาธารณะ ExtedsDemo1 {
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {
รถบรรทุก t = รถบรรทุกใหม่ ();
T.Size = 100; เป็นการดีที่สุดที่จะใช้ตัวสร้างเพื่อเริ่มต้นตัวแปรสมาชิกหรือจัดเตรียมอินเทอร์เฟซ Set () และ GET ()
// อินสแตนซ์ของคลาสรถบรรทุกสืบทอดขนาดและสีคุณลักษณะจากคลาสรถ
// รถบรรทุกคันไหนมีกล่องเก็บสินค้ามากกว่ารถหนึ่งกล่อง
-
-
รถคลาส {// car
ขนาด int;
สีสตริง;
-
รถบรรทุกชั้นเรียนขยายรถ {// รถบรรทุก
กล่องบรรจุภัณฑ์
-
ประโยชน์ของการสืบทอด
1. การปรับปรุงการใช้ซ้ำของรหัส
2. ให้ความสัมพันธ์ระหว่างชั้นเรียนสร้างเงื่อนไขสำหรับความหลากหลาย
รูปแบบ (ขยาย) ที่สืบทอดมา
การคัดลอกรหัสมีดังนี้:
คลาสย่อยของคลาสขยาย superclass {
// ดำเนินการคำสั่ง;
-
คำหลักซุปเปอร์
1. การใช้คำหลัก Super นั้นเหมือนกับนี้
2. นี่แสดงถึงการอ้างอิงของคลาสนี้และ Super แสดงถึงการอ้างอิงของคลาสแม่
3. เมื่อสมาชิกที่มีชื่อเดียวกันปรากฏในคลาสย่อยและคลาสแม่คุณสามารถใช้ Super และสิ่งนี้เพื่อแยกความแตกต่าง
superdemo.java
การคัดลอกรหัสมีดังนี้:
/* การใช้งาน Super
* ผลลัพธ์ผลลัพธ์:
* super.i = 10, this.i = 20
-
ชั้นเรียนสาธารณะ Superdemo {
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {
subclass ใหม่ (). showmessage ();
-
-
คลาส superclass {
int i = 10;
-
คลาสย่อยของคลาสขยาย superclass {
int i = 20;
โมฆะสาธารณะ ShowMessage () {
System.out.printf ("super.i = %d, this.i = %d/n", super.i, this.i);
-
-
วิธีการแทนที่ที่สืบทอดมาจากคลาสแม่ (แทนที่)
1. เมื่อเมธอดเหมือนกับคลาสแม่จะปรากฏในคลาสย่อย (ค่าส่งคืนชื่อฟังก์ชันพารามิเตอร์ที่เป็นทางการ) การดำเนินการแทนที่จะเกิดขึ้น
overridedemo1.java
การคัดลอกรหัสมีดังนี้:
/* วิธีการแทนที่วิธีที่สืบทอดมาจากคลาสแม่ (แทนที่)
* ผลลัพธ์ผลลัพธ์:
* Superclass: ฉันสบายดี ~
* subclass: ฉันยอดเยี่ยม ~~~
-
ชั้นเรียนสาธารณะ overrededemo1 {
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {
subclass sc = subclass ใหม่ ();
Sc.Speak ();
-
-
คลาส superclass {
โมฆะสาธารณะพูด () {
System.out.println ("superclass: ฉันดี ~");
-
-
คลาสย่อยของคลาสขยาย superclass {
@Override //@Override หมายความว่าวิธีการต่อไปนี้จะมีการดำเนินการใหม่ เพิ่มความปลอดภัยของรหัสในระดับหนึ่ง
และความแข็งแกร่ง
โมฆะสาธารณะพูด () {
super.speak ();
System.out.println ("subclass: ฉันยอดเยี่ยม ~~~");
-
-
2. เมื่อแทนที่วิธีคลาสพาเรนต์คลาสเด็กไม่อนุญาตให้ใช้วิธีที่มีชื่อและพารามิเตอร์เดียวกันกับคลาสพาเรนต์ แต่มีประเภทการส่งคืนที่แตกต่างกัน
overridedemo2.java
การคัดลอกรหัสมีดังนี้:
/* เมธอดที่มีชื่อและพารามิเตอร์เดียวกันกับคลาสแม่ แต่มีประเภทการส่งคืนที่แตกต่างกันไม่ได้รับอนุญาตในคลาสย่อย
* ข้อความแสดงข้อผิดพลาด:
* overridedemo.java:20: ข้อผิดพลาด: f () ใน subclass ไม่สามารถแทนที่ f () ใน superclass
* สาธารณะ int f () {
-
* ประเภทการส่งคืน int ไม่เข้ากันกับโมฆะ
* overrededemo.java:19: ข้อผิดพลาด: วิธีการไม่แทนที่หรือใช้วิธีการจาก supertype
* @Override
-
* 2 ข้อผิดพลาด
-
ชั้นเรียนสาธารณะ overrededemo2 {
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {
-
-
คลาส superclass {
โมฆะสาธารณะ f () {
-
-
คลาสย่อยของคลาสขยาย superclass {
@Override
สาธารณะ int f () {
กลับ 1;
-
-
3. การอนุญาตการเข้าถึงของวิธีการของคลาสย่อยที่เขียนคลาสแม่จะต้องมากกว่าหรือเท่ากับวิธีการเขียนใหม่ในคลาสพาเรนต์
Overridedemo3.java
การคัดลอกรหัสมีดังนี้:
/* การอนุญาตการเข้าถึงวิธีการของคลาสย่อยแทนที่คลาสแม่ต้องมากกว่าหรือเท่ากับการอนุญาตการเข้าถึงของวิธีการคลาสแม่
* ข้อความแสดงข้อผิดพลาด:
* overridedemo.java:18: ข้อผิดพลาด: f () ในคลาสย่อยไม่สามารถแทนที่ f () ใน superclass
* void protected f () {
-
* พยายามกำหนดสิทธิ์การเข้าถึงที่อ่อนแอกว่า
* 1 ข้อผิดพลาด
-
ชั้นเรียนสาธารณะ overrededemo3 {
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {
-
-
คลาส superclass {
โมฆะสาธารณะ f () {
-
-
คลาสย่อยของคลาสขยาย superclass {
@Override
ได้รับการป้องกันโมฆะ f () {// เปลี่ยนการอนุญาตการเข้าถึงที่นี่เป็นสาธารณะ
-
-
เข้าถึงคอนโทรลเลอร์
อักขระควบคุมการเข้าถึงคือ: สาธารณะ, ป้องกัน, เริ่มต้น, ส่วนตัว
บางคนต้องการความรู้เล็กน้อยเกี่ยวกับแพ็คเกจดังนั้นฉันจะพูดถึงเรื่องนี้เมื่อฉันพูดถึงแพ็คเกจ