Hỏi về interface trong java
Xin chào mọi người. Mình có Một vấn đề về java như thế này.
Mình code 1 interface trong interface chỉ có một phương thức duy nhất và 1 class (Tên : A) khác có implement interface. và trong class có 3 phương thức 1 của interface và 2 pt còn lại là get và set.
Vậy bây giờ mình tạo thêm 2 class (Tên: B, C ) nữa cũng implement interface.
Câu hỏi là : Làm sao để đối tượng của class A gọi tới phương thức ở class A mà lại thực hiện 2 phương thức ở 2 class mới tạo là (B, C). trong một hàm main ở class main.
Theo mình nghĩ thì không được
Có đó Bạn, mình đang làm cái bt có kiểu đó
Ý bạn là nó gọi phương thức trong interface hả? Trừ khi B và C vừa implements cái interface vừa extends của A. Ý bạn có phải là upcasting với downcasting trong kế thừa ko nhỉ?
Theo như bạn nói thì câu này có thể áp dụng khái niệm composition trong java, cụ thể được giải quyết như sau:
1 .Đầu tiên mình tạo một interface có tên là Interface , trong interface này có 1 abstract method tên là show()
2 . Tạo 2 class B và C implement interface ở trên và hiện thực hóa method show() của riêng nó
3 . Tạo class A cũng implement interface, nhưng trong class A sẽ có 2 instance variable của interface Interface, mình đặt tên là b và c. Và 2 variable này sẽ được khởi tạo trong contructor của class A
Đến đây, nếu bạn muốn có thêm method get, set thì tùy. Trong ví dụ này mình không cần, nếu thêm vào thì get, set cụ thể như sau:
4 . OK. Việc cuối cùng là tạo hàm main và gọi method của class A
Kết quả sẽ in ra là:
upcasting , downcasting Là j Bạn ?
Cảm ơn Bạn nha, Nhưng với yêu cầu là cái thằng a nó k được thay đổi code. Nhưng dù sao cũng cảm ơn Bạn tư duy thêm xíu chắc ok.
Theo mình biết là nó áp dụng trong kế thừa,
downcasting chỉ xh khi có upcasting trước rồi
vd : Có 2 class, class B extends class A
class A {
public void show(){
System.out.println(“this is A”);
}
}
class B extends A {
}
public class Upcasting {
public static void main(String [] args) {
B b1 = new B();
A a1 = (A) b1; // cách upcasting
a1.add(); // không thể gọi add() do đã bị che đi
a1.show();
}
vậy ý của bạn có phải là như này:
Lúc này class B và C vừa implement Interface vừa extend luôn class A
và cuối cùng trong hàm main sẽ như sau:
Kết quả vãn giống như trên:
Đúng ý bạn chưa nhỉ