สนับสนุนโดย

วันพุธที่ 5 ธันวาคม พ.ศ. 2561

การ casting สำหรับ object

ตัวอย่างนี้จะมีความยากขึ้นเล็กน้อย เพราะเป็นเรื่องของ oop อีกระดับนึง เวลาที่เราสร้าง object โดยปกติเราก็จะใช้

ClassName objectName = new ClassName();

เช่น

Book b = new Book();

แต่มันมีปัญหาว่าหากคลาสมีการสืบทอดกันไปหลายๆ ชั้น แล้วเราต้องการแปลงชนิดให้ตรงกัน จะทำอย่างไร เพราะตอนสร้าง object อาจจะต้องทำการ new จากอีกคลาส

ลองมาดูแนวทางตัวอย่างกันก่อน กฏมีว่า ด้านขวาต้องเป็น ลูก ด้านซ้ายต้องเป็น แม่ จึงจะทำการ new object ได้

เช่นโค้ดนี้
package myPackage;

public class CastingExample {
    public static void main(String[] args) {
        A a = new A();
        B b = new B();
        B c = new A();  // error
        A d = new B();
    }
}

class A {
    
}

class B extends A {
    
}

ทีนี้ปัญหาก็คือหากเราต้องการบังคับให้แปลงชนิด เพื่อให้ตรงกันให้ได้จะทำอย่างไร ในภาษา java ใช้เครื่องหมาย () ครอบ และข้างในใส่ชื่อ class เช่น (A) new B(); เป็นต้น

ตัวอย่างโค้ด
package myPackage;

public class CastingExample {

    public static void main(String[] args) {
        A a = new A();
        B b = new B();
        A d = new B();
        A c = (A) new B();
        
        System.out.println("b = " + b);
    }
}

class A {

}

class B extends A {

}

ผลการทำงาน
b = myPackage.B@15db9742

ไม่มีความคิดเห็น:

แสดงความคิดเห็น