01/10/2018, 09:27

Java Core và Java Swing

Mình có 2 câu hỏi:
1> Khi nào sử dụng Jpanel khi nào dùng Jframe ?
2> Khi học về Interface, sách có đoạn code và câu hỏi như sau:

mong các tiền bối đi trước cho mình xin câu trả lợi. Thanks!

Quân viết 11:35 ngày 01/10/2018
  1. Về khi nào dùng thì bạn xem dkix định nghĩa sẽ rõ.
  2. Nói 2 câu lệnh gọi qua interface bằng với gọi qua chính object cũng đúng, lí do là vì kết quả khi thực hiện là giống nhau, tuy nhiên 2 câu lệnh ob.getNext() và threeOb.getNext() là hoàn toàn khác nhau về bản chất, do đó nếu chỉ quan tâm tới kết quả thì coi như là giống nhau, còn muốn hiểu sâu thì không
Duy viết 11:27 ngày 01/10/2018

câu 2. Bản chất nó khá giống với đa hình (Polymophism).Trong trường hợp này cái bạn đang làm là cha new con (Series ob = new ByTows() ). Bạn cứ hiểu thế này cho dễ : trong thời gian compile time (đang viết code), ob chỉ có thể dùng những method của cha, tức là trong ByTows hoặc ByThree mà có các method khác thì ob ko gọi như bình thường được mà phải ép kiểu. Còn trong thời gian runTime (code đang chạy),nó sẽ chạy method của tk con --> trong trường hợp này nó sẽ chạy getNext() của ByTows hay ByThree thay vì tk cha Series.

Nguyen Trong Dung viết 11:30 ngày 01/10/2018

Vậy tại sao lại cần gán như thế? sao lại không gọi luôn bằng chính đối tượng của thực thể mà phải thông qua Interface nhỉ ?

Tynk Huynk viết 11:28 ngày 01/10/2018

Tùy thuộc vào từng hoàn cảnh bạn à:
Case 1: Nếu bạn tạo class implement 1 interface và chỉ override lại các phương thức của interface đó, x thì bạn có thể khai báo biến reference kiểu class hoặc interface cũng được.

Case 2: Nếu bạn tạo class implement 1 interface, ngoài override lại các phương thức của interface đó, bạn định nghĩa thêm vài method cho class đó. VD:

interface Bird{
    eat();
}

class Penguin{
    @Override
    eat(){
    // write code here
    }
    swim(){
     // this method is for Penguin, not for all Birds
    }

}

Gỉa sử bạn có 2 câu lệnh sau:

Bird penguin = new Penguin();
penguin.swim();

Nó sẽ bị lỗi câu lệnh thứ 2 bởi vì interface Bird ko khai báo method swim, khi bạn gọi phương thức từ biến reference, Compiler sẽ không quan tâm tới kiểu Object mà biến reference trỏ tới mà chỉ quan tâm đến kiểu biến reference, ở VD này là Bird. Chính vì vậy, ta phải dùng kiểu class Penguin (là nơi khai báo và định nghĩa method swim())

 Penguin penguin = new Penguin();
 penguin.swim();
Duy viết 11:41 ngày 01/10/2018

Kế thừa sinh ra để làm điều đó mà bạn.Sau này sẽ có những bài liên quan đến nhiều Obj thuộc 1 class, cách này sẽ giúp tiết kiệm đc code thay vì gọi bằng chính đối tượng của Obj

Tynk Huynk viết 11:42 ngày 01/10/2018

Câu 1: Ở đâu có JFrame thì ở đó có JPanel, tưởng tượng JFrame là 1 cái khung tranh và JPanel là 1 bức tranh trong cái khung ấy. Và 1 khung tranh có thể có nhiều bức tranh.

Bài liên quan
0