Kế thừa Java - Ghi đè

class A {
    public static int x = 10;
    public void display(){
        System.out.println(x);
    }
}
class B extends A {
    public static int x = 20;
}
public class Quiz{
    public static void main(String[] args) {
        A b = new B();
        b.display();
    }
}

Mọi người cho em hỏi 1 chút, sao b.display() nó lại ra 10 ạ? em tưởng nó ghi đè thì phải ra là 20 chứ nhỉ

bỏ static đi thì sẽ thấy khác ngay

4 Likes

bởi vì " variables in Java do not follow polymorphism and overriding is only applicable to methods, not variables."

chỉ có hàm mới có đa hình, biến ko có đa hình :V

biến mà đa hình thì chắc chương trình chạy chậm lắm, chậm có khi như hoặc thua python ấy :V
à trong cái link kia nó cũng có ghi lý do, là vì 1 biến chỉ được xác định bằng tên của nó, ko xác định bằng tên và kiểu, nên lỡ derived class nó “override” biến x thành 1 kiểu khác thì mấy method ở base class xài x hỏng hết :V

7 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?