30/09/2018, 18:13

Hỏi về lớp trừu tượng trong C# và Java

Ví dụ mình có lớp:

abstract class figure
{//do something here}

Thì mình muốn sử dụng nó

  • mình khai báo: figure a=new figure(); // báo lỗi
  • mình lại khai báo: figure [] a=new figure[n];// giá trị n kiểu int, dòng này chạy bình thường
    Mọi người giải thích cho mình tại sao có hiện tượng này nhé. Cảm ơn mọi người
... viết 20:16 ngày 30/09/2018

Lớp trừu tượng có một số phương thức chưa được định nghĩa
-> không thể khởi tạo đối tượng cụ thể được.

Chỉ có thể khởi tạo đối tượng của class được kế thừa từ lớp trừu tượng và lớp này phải định nghĩa đầy đủ các phương thức trừu tượng của lớp cha.

figure a=new figure[n];

Có thể khai báo như thế vì a lúc này chỉ là 1 mảng, chưa có đối tượng cụ thể nào được đưa vào bên trong mảng này cả. Chắc chắn sử dụng như sau sẽ bị lỗi:

a[0] = new figure();

Nhưng khi có class mới được định nghĩa như sau:

public class figure2 extends figure {
    // Define abstract function in here
}

thì lúc đó bạn có thể sử dụng:

a[0] = new figure2();
Lê Hồng Hiếu viết 20:14 ngày 30/09/2018

Mình chưa hiểu rõ chỗ

Có thể khai báo như thế vì a lúc này chỉ là 1 mảng, chưa có đối tượng cụ thể nào được đưa vào bên trong mảng này cả. Chắc chắn sử dụng như sau sẽ bị lỗi:

a[0] = new figure();

Ví dụ mình khai báo int []a=new int[n] thì sử dụng được còn đối với 1 class nào đó thì ko? Tại sao lại có sự khác biệt như vậy?

Le Hoai viết 20:14 ngày 30/09/2018

Vì kiểu nguyên thủy thì luôn có giá trị khởi tạo. VD khi bạn khai báo int i; thì i ở đây có giá trị là 0. Bạn search thêm default value để rõ hơn

Bài liên quan
0