Ví dụ có lớp A, kế thừa từ B và C
Cả B và C đều có hàm Color() chẳng hạn.
A chưa có hàm Color() này.
Vậy khi 1 biến của A gọi hàm Color, thì nó sẽ gọi của B hay C ?
Làm sao để phân biệt được ?
Ví dụ có lớp A, kế thừa từ B và C
Cả B và C đều có hàm Color() chẳng hạn.
A chưa có hàm Color() này.
Vậy khi 1 biến của A gọi hàm Color, thì nó sẽ gọi của B hay C ?
Làm sao để phân biệt được ?
Nếu bạn viết lớp nào trước thì lớp A sẽ kế thừa lớp đó trước
VD:
public class A:B,C
{
....
}
Trường hợp này thì A sẽ kế thừa hàm của B trước
Giờ mình muốn gọi hàm color của lớp B hoặc C thì phải làm sao?
bạn chỉ cần gọi trực tiếp hàm color thôi, bởi vì mình đã kế thừa r nên k cần gọi theo kiểu truyền cục bộ nữa.
VD:
interface B
{
void color();
}
public class A:B
{
public void color()
{
...
}
}
Theo mình nó sẽ như thế này (dùng hàm super)
public void colorB()
{
super();
}
Bạn gọi hàm colorB() từ class A thì thì nó sẽ gọi hàm color từ classB đấy
Người ta hỏi c++ mấy thánh rep bằng java.
em sẽ gặp lỗi sau nếu không khai báo gì.
error: request for member ‘color’ is ambiguous
muốn sử dụng đa kế thừa và dùng hàm color, em phải override:
class A: public B, public C {
void color();
};
void A::color() {
B::color();
cout << "----" << endl;
C::color();
}
Bổ sung thêm.
java, C# chỉ cho phép kế thừa từ 1 class và nhiều interface. khi đó method từ class đã implement, và từ interface thì chưa.
Nên gọi method từ class A mà chưa khai báo, mặc định nó là method của class. vì đã được implement.