สนับสนุนโดย

วันศุกร์ที่ 30 พฤศจิกายน พ.ศ. 2561

final กับการใช้งานแบบง่ายๆ

คำว่า final แปลกันตรงตัวก็คือ สุดท้าย หมายความว่าอะไรที่มีคำว่า final จะไม่ถูกเปลี่ยนแปลงแก้ไข ไม่ว่าจะสืบทอดคลาสไปก็ตาม พูดง่ายๆ ภาษาชาวบ้านคือ ไม่ยอมให้ override ได้อีก



มาดูโค้ดกันครับ
package hellojava;

public class FinalExample {
    public static void main(String[] args) {
        Kerry k = new Kerry();
        k.x();
        k.y();
    }
}

class Delivery {
    final void x() {
        System.out.println("x value");
    }
}

class Kerry extends Delivery {
    void x() {
        System.out.println("kerry x value");
    }
    void y() {
        System.out.println("y value");
    }
}
ผลการทำงาน
Exception in thread "main" java.lang.VerifyError: class hellojava.Kerry overrides final method x.()V
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at hellojava.FinalExample.main(FinalExample.java:6)

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

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