Chương trình này lỗi gì vậy?

class A
{
    public static void main(String[] args)
    {
          B b = new A();
    }
}

class B extends A
{
     // tosomething
}

ai giai thích giúp mình lỗi này với.

Hô hô hô, viết ngược rồi. Đúng là phải:

A a = new B();

Không có chuyện lớp con = new lớp cha đâu nhé.

3 Likes

mình biết là nó lỗi rồi nhưng giải thích về cái lỗi này ý, mình đang ôn kiểm tra về oop.

Thằng B kế thừa thằng A nên mỗi đối tượng kiểu B sẽ có nhiều thuộc tính hơn hoặc bằng một đối tượng kiểu A.
Vì vậy new A() là không đủ để mô tả một B

3 Likes

Trước hết là ngược cái đã. Vì sao ngược?
Kế thừa là lưu giữ những thứ có trước và quan trọng là mở rộng. Để đảm bảo tính “mở rộng” này, không cho phép lớp con = new lớp cha.
Ví dụ cụ thể:

class A{
    int i;
    boolean b;
    String s;
    // ...
}

class B extends A{ // extends - mở rộng
    Object o;
    Xxx x;
    // ...
}

Như bạn đã thấy, lớp con sẽ nhiều thuộc tính/phương thức hơn so với lớp cha.
Nếu khai báo dữ liệu kiểu con thì cần điền đủ dữ liệu cho nó. Nhưng bạn lại new lớp cha, có dữ liệu ít (không đủ).
Vẫn có trường hợp lớp con chỉ kế thừa mà không thêm thắt gì cả. Nhưng để đảm bảo tính “mở rộng” (trong tương lai) thì lớp con = new lớp cha không được phép.

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