Chuyển đến nội dung chính

Java:Đa hình trong Java

Đa hình là gì?

Hiểu một cách đơn giản đa hình là tại từng thời điểm đối tượng sẽ có các hình thái khác nhau trong những hoàn cảnh khác nhau.
Ví dụ : Khi bạn ở trong trường học là sinh viên thì có nhiệm vụ học, nghe giảng, vào thư viện đọc sách… nhưng khi bạn ở nhà lại đóng vai trò là thành viên trong gia đình có nhiệm vụ làm việc nhà…rồi khi bạn vào siêu thị thì bạn đóng vai trò là khách hàng mua hàng. Vì vậy, ta hiểu đa hình của đối tượng là trong từng trường hợp, hoàn cảnh khác nhau thì đối tượng có khả năng thực hiện các công việc khác nhau.
tính đa hình trong lập trình hướng đối tượng

Tính đa hình trong lập trình OOP Java

– Lớp cha được đại diện bởi các lớp con khác nhau gọi là đa hình. Tức là tại từng thời điểm đối tượng cha thực sự là đối tượng con nào đó.
– Ví dụ :
1
2
3
Animal a = new Animal();
a = new Cow(); // tại thời điểm, a là đối tượng Cow
a = new Buffalo(); // tại thời điểm này a là đối tượng Buffalo
– Trình biên dịch (compiler) chỉ biết kiểu dữ liệu của đối tượng khi khai báo. Tuy nhiên, giai đoạn runtime thì JVM xác định được đối tượng thực sự.
– Đa hình không áp dụng cho các thành phần tĩnh (static) của lớp.
– Vấn đề chuyển đổi kiểu dữ liệu là cơ bản hiện thực của đa hình.
– Ví dụ :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Animal {
  public void saySomething() {
    System.out.println("Umm...");
 }
}
class Cow extends Animal {
  public void saySomething() {
    //super.saySomething();
    System.out.println("Moo!");
 }
}
class Buffalo extends Animal {
  public void saySomething() {
    //super.saySomething();
    System.out.println("Bah!");
 }
}
// Sử dụng
public class TestPoly {
 public static void main(String[] args) {
   Animal a = new Animal();
   Cow c = new Cow();
   Buffalo b = new Buffalo();
     a.saySomething();
     a=c;
   a.saySomething();
   a=b;
   a.saySomething();
 }
}

Lời kết : Tính đa hình trong lập trình hướng đối tượng java là một trong những thuộc tính quan trọng, vì vậy bạn không thể bỏ qua thuộc tính này dù nhiều lúc hơi khó hiểu một chút. Bạn nên đọc lại 1 lần nữa những nội dung trên nếu vẫn còn chưa nắm rõ tính chất này.
Với đa hình, tham chiếu có thể thuộc kiểu lớp cha của lớp của đối tượng được
tạo
. Khi ta khai báo một biến tham chiếu thuộc kiểu lớp cha, nó có thể được gắn với
bất cứ đối tượng nào thuộc một trong các lớp con.
Đặc tính này cho phép ta có những thứ thú vị kiểu như mảng đa hình. Ví dụ,
trong Hình 7.2, ta khai báo một mảng kiểu Animal, nghĩa là một mảng để chứa các
đối tượng thuộc loại Animal. Nhưng sau đó ta lại gắn vào mảng các đối tượng thuộc
các lớp con tùy ý của Animal. 

Ví dụ về đa hình tại runtime trong Java

Trong ví dụ, chúng ta tạo hai lớp Bike và Splendar. Lớp Splendar kế thừa lớp Bike và ghi đè phương thức run() của nó. Chúng ta gọi phương thức run bởi biến tham chiếu của lớp cha. Khi nó tham chiếu tới đối tượng của lớp con và phương thức lớp con ghi đè phương thức của lớp cha, phương thức lớp con được triệu hồi tại runtime.
Khi việc gọi phương thức được quyết định bởi JVM chứ không phải Compiler, vì thế đó là đa hình tại runtime.
class Bike{  
  void run(){System.out.println("dang chay");}  
}  
class Splender extends Bike{  
  void run(){System.out.println("chay an toan voi 60km");}  
  
  public static void main(String args[]){  
    Bike b = new Splender();//day la upcasting  
    b.run();  
  }  
}  

Nhận xét

Bài đăng phổ biến từ blog này

Entry Test của FPT

IQ - Kiểm tra tư duy logic (8/20) - GMAT- Kiểm tra khả năng tính toán trong thời gian ngắn (8/20) - Tiếng Anh (18-> 25/50) - Các bài thi chuyên môn - FE (8/20) IQ: lên mạng tìm "IQ test" là ra đầy. + GMAT: Những câu trắc nghiệm tính toán đơn giản kiểu như sau:  1 . Một shop thời trang sale off quần jeans 15 %, quần jeans giá 450 $, người mua đưa 500 $, hỏi cashier trả lại bao nhiêu $ tiền thừa.? 2 . 100 % là 180 , vậy 150 là bao nhiêu %? Tiếng anh: Cỡ như thi TOEIC thôi. Chuyên môn: Mobile thì trắc nghiệm Java. Qúa trình tuyển như sau :v Lần 1: Test IQ, Tiếng Anh( mình làm í ẹ khoảng 50% mà vẫn được) , Java Lân 2: được gọi điện lên :)) + Gioi thiệu bản thân + Họ chỉ hỏi các câu căn bản như: -. OOP: là gì, 4 tính chất, ví dụ, khác nhau giữa interface và abstract - CODE: hầu toàn các bài toán vòng for :)) , cẩn thận mấy câu kế thừa. SQL (distinct, view, function, cursor, store procedure, ...v.v.), nhớ có câu cộng 2 số int không dùng biến đệm hơi khoai haha + Nói ch...

Java: Java Package-Thư viện trong Java

Giới thiệu về Package Các bạn mới học lập trình Java thường không dể ý tới package vì các bạn toàn tạo file .java vào cùng 1 chỗ, không cần sắp xếp, không cần quản lý truy nhập. Nhưng để tăng kỹ năng lập trình với Java, các bạn cần phải tìm hiểu về package trong Java. Các bạn có thể tham khảo định nghĩa sau: Package được dùng để đóng gói các lớp trong chương trình lại với nhau thành một khối. Đây là cách tốt nhất để lưu trữ các lớp gần giống nhau hoặc có cùng một module thành một khối thống nhất – để đáp ứng 1 khối chức năng. Từ đây mình sẽ giới thiệu thêm với các bạn các câu lệnh nhâp khẩu,nó có định dạng như sau : Định dạng :  import javaPackageNameImport;    Nó giống như khai báo thư viện ở các ngôn ngữ lập trình khác.Như vậy,chỉ khi các bạn nhập khẩu chúng,các bạn mới có thể sử dụng thư viện mà chúng cung cấp cho ta. VD :    import java.util.Date;   import java.text.SimpleDateFormat; Lưu ý : -Các câu lệnh nhập khẩu rất nhiều và...

phỏng vấn Embedded C và C++?

Có vài điểm rất nhỏ, các bạn không để ý có thể dẫn đến bất lợi (nếu không muốn nói là rớt) ở vòng hồ sơ hoặc khi đi phỏng vấn. Mình liệt kê rất cụ thể ra những chuyện mình đã thấy qua nhiều lần (người thật, việc thật), hy vọng cho các bạn thêm kinh nghiệm. Lưu ý: Những chuyện này rất chủ quan, có thể chỉ đúng trong môi trường của mình và hoàn toàn không đúng trong môi trường khác. Gửi email CV đến không có Cover Letter, chỉ đính kèm mỗi file PDF là cái CV. CV ghi : tiếng Anh: Trung Bình, C: Trung Bình,... nhưng bên dưới lại ghi ưu điểm_:  là người ham học hỏi... CV bằng tiếng Việt và lại viết sai chính tả tiếng Việt. CV ghi quá nhiều về các hoạt động tình nguyện, hiến máu, blah blah... nhưng phần kĩ thuật lại có 3 dòng thôi. Mặc đồ thể dục của trường và đi dép lê đến PV. Đến muộn PV (em ấy bảo bị kẹt xe). Đưa yêu cầu, em ấy không hiểu đề nhưng ngại không dám hỏi lại, dẫn đến viết hoàn toàn sai. Hỏi ngay câu căn bản đầu tiên em ấy đã nói không biết và  đổ do trường kh...