คลาส anonymous ใน Java สามารถมีเมธอดอื่นที่ไม่ใช่ superclass ได้หรือไม่? [ซ้ำ]

Dec 27 2020

ฉันรู้ว่าคลาสที่ไม่ระบุตัวตนนั้นดีสำหรับการลบล้างและอื่น ๆ แต่ฉันสงสัยว่าคุณสามารถเพิ่มเมธอดอื่น ๆ ที่ไม่มีในคลาสพาเรนต์ได้หรือไม่เช่นในตัวอย่างด้านล่างนี้

นี่คือคลาสของฉันกับ wieBenIk เป็นวิธีเดียว

public class Driehoek {

//methoden
public void wieBenIk(){
    System.out.println("ik ben een driehoek");
}

}

และนี่คือคลาสนิรนามของฉันที่ฉันได้เพิ่ม newMethod

ชั้นสาธารณะ Main {

public static void main(String[] args) {

    Driehoek test = new Driehoek(){

        @Override
        public void wieBenIk() {
            System.out.println("overrided by anonymous class");
        }

        public void newMethod(){
            System.out.println("I am a new method");
        }
    };

    test.newMethod();

}

}

คำถามของฉันคือเหตุใด test.newMethod () จึงไม่ทำงาน ไม่ใช่ชั้นเด็กเหมือนอีกเหรอ? ขอบคุณทุกคนที่ช่วยฉัน

คำตอบ

SJuan76 Dec 27 2020 at 05:44

การทดสอบจะประกาศเป็นตัวอย่างของDriehoek เป็นเช่นนี้สำหรับคอมไพเลอร์ก็จะมีสมาชิกของDriehoek

ในทำนองเดียวกันถ้าคุณกำหนด

Object test = new Driehoek() {....};

สำหรับการทดสอบคอมไพเลอร์จะมีให้เฉพาะสมาชิกObjectเท่านั้น

หากคุณเพิ่มสมาชิกเพิ่มเติมในคลาสที่ไม่ระบุชื่อคอมไพลเลอร์จะไม่ทราบว่าการทดสอบมีวิธีการเหล่านั้นพร้อมใช้งาน ดังนั้นจึงไม่อนุญาตให้คุณใช้