Học nhanh Java cho người mới bắt đầu
Công ty Vĩnh Cửu tuyển dụng lập trình viên Java

1- Giới thiệu

Trước hết học Java cần những gì, bạn xem tại:
Tài liệu hướng dẫn này dành cho người mới bắt đầu với Java. Cách trình bầy trong tài liệu này là giới thiệu giới thiệu thật ngắn gọn tất cả những thứ cơ bản cho người mới bắt đầu và đi đôi với thực hành nhỏ. Nếu bạn là một người mới làm quen với Java. Bạn lên đọc và thực hành trọn vẹn tài liệu này, trước khi tìm hiểu chi tiết các khái niệm ở các tài liệu khác.

2- Tạo mới Project

Trước hết chúng ta tạo mới một Project, nó sẽ được sử dụng trong hướng dẫn này.
Nhập vào tên project:
  • BasicJavaTutorial
Đây là hình ảnh Project vừa được tạo ra:
Chú ý: Để có thể gõ được các ngôn ngữ khác tiếng Anh trong Project, bạn cần chuyển mã hóa sang UTF8.
Nhấn phải chuột vào Project chọn Properties:

3- Các kiểu dữ liệu nguyên thủy (Primitive Data Types)

Có 8 loại primitive Data trong JAVA
  • Dùng cho kiểu số nguyên có 4 loại:   Byte, short, int, long
  • Kiểu số thực ta có: float, double
  • Kiểu ký tự: char
  • Kiểu logic: trả về giá trị true hoặc false (đúng hoặc sai)
Kiểu dữ liệu Ghi chú Số bit Giá trị nhỏ nhất Giá trị lớn nhất
byte Số tự nhiên 8 bit 8  -128 (-2^7) 127 (2^7-1)
short Số tự nhiên 16 bit 16 -32,768 (-2^15) 32,767 (2^15 -1)
int Số tự nhiên 32 bit 32 - 2,147,483,648
(-2^31)
2,147,483,647
(2^31 -1)
long Số tự nhiên 64 bit 64 -9,223,372,036,854,775,808
(-2^63)
9,223,372,036,854,775,807
(2^63 -1)
float Số thực 32 bit 32 -3.4028235 x 10^38 3.4028235 x 10^38
double Số thực 64 bit 64 -1.7976931348623157 x 10^308 1.7976931348623157 x 10^308
boolean Kiểu logic   false true
char Kiểu ký tự 16 '\u0000' (0) '\uffff' (65,535).

4- Biến (Variable)

Nhấn phải chuột vào src chọn "New/Package":
Đặt tên package là:
  • org.o7planning.tutorial.javabasic.variable
Nhập vào tên class:
  • VariableExample1
Class VariableExample1 được tạo ra:
Sửa code của class VariableExample1:
  • VariableExample1.java
package org.o7planning.tutorial.javabasic.variable;

public class VariableExample1 {

   public static void main(String[] args) {
     
       // Khai báo một biến, có kiểu là số tự nhiên 32 bit.
       int firstNumber ;
       
       // Gán giá trị cho firstNumber
       firstNumber = 10;
       
       System.out.println("First Number ="+ firstNumber);
       
       // Khai báo một số thực 32 bit (float)
       // Số này được gán giá trị 10.2
       // Chữ f ở cuối giúp java hiểu đây là kiểu float.
       float secondNumber = 10.2f;        
       
       System.out.println("Second Number ="+ secondNumber);
       
       // Khai báo một số thực 64 bit
       // Số này được gán giá trị 10.2
       // Chữ d ở cuối giúp java hiểu đây là kiểu double. Phân biệt với kiểu float.
       double thirdNumber = 10.2d;
       
       System.out.println("Third Number ="+ thirdNumber);        
       
       
       // Khai báo một kiểu ký tự
       char ch = 'a';
       
       System.out.println("Char ch= "+ ch);
       
   }

}
Chạy class VariableExample1:
Nhấn phải chuột vào class VariableExample1 chọn "Run As/Java Application":
Kết quả chạy class xem trên cửa sổ Console:
Bạn cũng có thể khai báo nhiều biến cùng một lúc, ví dụ tiếp theo minh họa điều này:
Tạo mới class VariableExample2
  • VariableExample2.java
package org.o7planning.tutorial.javabasic.variable;

public class VariableExample2 {

   public static void main(String[] args) {

       // Khai báo 3 số tự nhiên 64 bit (long)
       long firstNumber, secondNumber, thirdNumber;

       // Gán giá trị cho firstNumber
       // Chữ L ở cuối để nói với java đây là kiểu long, phân biệt với kiểu tự nhiên int.
       firstNumber = 100L;

       // Gán giá trị cho secondNumber
       secondNumber = 200L;

       // Gán giá trị cho thirdNumber
       thirdNumber = firstNumber + secondNumber;

       System.out.println("First Number = " + firstNumber);
       System.out.println("Second Number = " + secondNumber);
       System.out.println("Third Number = " + thirdNumber);
   }

}
Results of running the class VariableExample2:

5- Điều khiển luồng đi của chương trình (Control flow)

5.1- Câu lệnh if - else

Cấu trúc của một câu lệnh if - else là:
if(Điều kiên 1)  {
 // Làm gì đó tại đây    
}else if(Điều kiện 2) {
 // Làm gì đó tại đây
}else if(Điều kiện 3) {
 // Làm gì đó tại đây    
}else  { // Ngược lại
 // Làm gì đó tại đây    
}
Tạo class ElseIfExample1:
  • ElseIfExample1.java
package org.o7planning.tutorial.javabasic.controlflow;

public class ElseIfExample1 {

  public static void main(String[] args) {

      // Khai báo một số tự nhiên (int)
      // Mô phỏng điểm thi của một bạn
      int score = 70;

      System.out.println("Your score =" + score);

      // Nếu điểm số nhỏ hơn 50
      if (score < 50) {
          System.out.println("You are not pass");
      }
      // Ngược lại nếu điểm số hơn hơn hoặc bằng 50 và nhỏ hơn 80.
      else if (score >= 50 && score < 80) {
          System.out.println("You are pass");
      }
      // Trường hợp còn lại (Nghĩa là lớn hơn hoặc bằng 80)
      else {
          System.out.println("You are pass, good student!");
      }

  }
}
Kết quả chạy class ElseIfExample1:
Thay đổi giá trị của biến "score" trong ví dụ trên và chạy lại class ElseIfExample1:
int score = 20;

5.2- Các toán tử thông thường

  • > Lớn hơn
  • < Nhỏ hơn
  • >= Lớn hơn hoặc bằng
  • <= Nhỏ hơn hặc bằng
  • && Và
  • || hoặc
  • == So sánh bằng
  • != So sánh khác nhau
  • ! Phủ định
Tạo class ElseIfExample2
  • ElseIfExample2.java
package org.o7planning.tutorial.javabasic.controlflow;

public class ElseIfExample2 {

   public static void main(String[] args) {

       // Khai báo một biến int mô phỏng tuổi của bạn.
       int age = 20;

       // Kiểm tra tuổi nhỏ hơn hoặc bằng 17
       if (age <= 17) {
           System.out.println("You are 17 or younger");
       }

       // Kiểm tra tuổi bằng 18
       else if (age == 18) {
           System.out.println("You are 18 year old");
       }
       // Kiểm tra tuổi lớn hơn 18 và nhỏ hơn 40
       else if (age > 18 && age < 40) {
           System.out.println("You are between 19 and 39");
       }
       // Trường hợp còn lại (Lớn hơn hoặc bằng 40)
       else {
           // Một câu lệnh kiểm tra nằm bên trong.
           // Kiểm tra tuổi khác 50.
           if (age != 50) {
               System.out.println("You are not 50 year old");
           }

           // Câu lệnh phủ định tuổi bằng 50, nghĩa là khác 50.
           if (!(age == 50)) {
               System.out.println("You are not 50 year old");
           }

           // Nếu tuổi là 60 hoặc 70
           if (age == 60 || age == 70) {
               System.out.println("You are 60 or 70 year old");
           }

       }
   }
}
Bạn có thể thay đổi giá trị của "age" và chạy class ElseIfExample2 và xem các kết quả

5.3- Giá trị boolean

boolean là một kiểu dữ liệu, nó chỉ có 2 giá trị true hoặc false (Đúng hoặc sai).
Tạo class BooleanExample:
  • BooleanExample.java
package org.o7planning.tutorial.javabasic.controlflow;

public class BooleanExample {

   public static void main(String[] args) {

       // Khai báo một biến kiểu boolean
       boolean value = true;

       // Nếu value là true
       if (value == true) {
           System.out.println("It's true");
       }
       // Ngược lại
       else {
           System.out.println("It's false");
       }

       // Với giá trị boolean bạn cũng có thể viết.
       if (value) {
           System.out.println("It's true");
       }
       // Ngược lại
       else {
           System.out.println("It's false");
       }
   }
}

5.4- Câu lệnh switch- case -default

Đây cũng là một loại câu lệnh rẽ nhánh gần giống với If-Else được giới thiệu ở trên
switch ( Biến kiểm tra ) {
  case value1:
   // Làm gì đó tại đây;
   break;
  case value2:
   // Làm gì đó tại đây;
   break;
  default:
   // Làm gì đó tại đây
}
  • SwitchExample1.java
package org.o7planning.tutorial.javabasic.controlflow;

public class SwitchExample1 {

   public static void main(String[] args) {

       // Khai báo một biến age (tuổi)
       int age = 20;

       // Kiểm tra giá trị của age
       switch (age) {
       case 18:// Trường hợp tuổi bằng 18
           System.out.println("You are 18 year old");
           break;
       case 20:// Trường hợp tuổi bằng 20
           System.out.println("You are 20 year old");
           break;
       default:// Các trường hợp còn lại
           System.out.println("You are not 18 or 20 year old");
       }
   }
}
Kết quả việc chạy class SwitchExample1:
Chú ý rằng với câu lệnh case phải là một giá trị cụ thể bạn không thể làm như sau:
// Điều này không được phép!!
case (age < 18) :

// case chỉ chấp nhận một giá trị cụ thể ví dụ:
case 18:
  // Làm gì đó tại đây
  break;
Xem một ví dụ khác:
  • SwitchExample2.java
package org.o7planning.tutorial.javabasic.controlflow;

public class SwitchExample2 {

   public static void main(String[] args) {

       // Khai báo một biến age (tuổi)
       int age = 30;

       // Kiểm tra giá trị của age
       switch (age) {
       // Trường hợp tuổi bằng 18
       case 18:
           System.out.println("You are 18 year old");
           
       // Các trường hợp 20, 30, 40 tuổi.
       case 20:
       case 30:
       case 40:
           System.out.println("You are " + age);
           break;
       default:// Các trường hợp còn lại
           System.out.println("Other age");
       }

   }
}
Kết quả chạy:

5.5- Vòng lặp for

Đây là cấu trúc vòng lặp:
for ( Giá trị bắt đầu ; Giá trị kết thúc; Giá trị tăng ) {
 // Làm gì đó tại đây.
}
Hãy xem một ví dụ minh họa:
  • ForLoopExample1.java
package org.o7planning.tutorial.javabasic.loop;

public class ForLoopExample1 {

   public static void main(String[] args) {
       
       // Khai báo một biến mô tả bước thứ mấy (Vòng lặp thứ mấy)
       int step = 1;
       
       
       // Khai báo một biến value với giá trị bắt đầu là 0
       // Sau mỗi một vòng lặp value lại được công thêm 3 (Nghĩa là bước tăng 3)
       // Và vòng lặp sẽ kết thúc khi value lơn hơn hoặc bằng 10        
       // Theo code này nghĩa là mỗi vòng lặp value sẽ tăng 3
       // Vòng lặp sẽ dừng lại khi (value < 10) không còn đúng nữa.
       
       for(int value = 0; value < 10; value = value + 3)  {
           
           System.out.println("Step ="+ step   +"  value = "+ value);
           
           // Tăng giá trị step lên 1, sau mỗi vòng lặp
           step = step + 1;
           
       }
   }
}
Kết quả chạy class ForLoopExample1:
Xem tiếp một ví dụ khác, tính tổng các số từ 1 tới 100:
  • ForLoopExample2.java
package org.o7planning.tutorial.javabasic.loop;


public class ForLoopExample2 {

   // Đây là một ví dụ tính tổng các số từ 1 tới 100, và in kết quả ra màn hình.
   public static void main(String[] args) {
         
       // Khai báo một biến
       int total = 0;
       
       
       // Khai báo một biến value
       // Có giá trị ban đầu 1
       // Sau mỗi vòng lặp giá trị tăng lên 1
       // Chú ý: value++ tương đương với câu lệnh: value = value + 1;
       // value-- tương đương với câu lệnh: value = value - 1;
       for(int value = 1; value <= 100; value++)  {
           
           // Gán giá trị total bằng giá trị cũ cộng thêm value.
           total = total + value;        
       }
       
       System.out.println("Total = "+ total);

   }

}
Kết quả

5.6- Vòng lặp while

Đây là cấu trúc vòng lặp while:
// Trong khi điều kiện đúng, thì làm gì đó.
while ( Điều kiện ) {
  // Làm gì đó tại đây
}
Xem ví dụ minh họa
  • WhileExample1.java
package org.o7planning.tutorial.javabasic.loop;

public class WhileExampe1 {
   
   public static void main(String[] args)  {
       
       int value = 3;      
       
       // Trong khi value vẫn nhỏ hơn 10 thì vòng lặp vẫn làm việc.
       while( value < 10)  {
           
           System.out.println("Value = "+ value);
           
           // Tăng giá trị của value lên 2 đơn vị
           value = value + 2;
       }
   }
}

5.7- Vòng lặp do-while

Đây là cấu trúc vòng lặp do-while:
// Vòng lặp do-while làm việc ít nhất 1 vòng
// và trong khi điều kiện còn đúng thì nó còn làm việc tiếp
do {
  // Làm gì đó tại đây
}
while ( Điều kiện );
Ví dụ minh họa:
  • DoWhileExample1.java
package org.o7planning.tutorial.javabasic.loop;

public class DoWhileExample1 {

   public static void main(String[] args) {

       int value = 3;

        // Vòng lặp do-while thực thi ít nhất 1 lần.
       do {

           System.out.println("Value = " + value);

           // Tăng giá trị cho value thêm 3 đơn vị
           value = value + 3;

       } while (value < 10);

   }
}
Kết quả

6- Mảng trong Java (Array)

6.1- Mảng là gì?

Mảng là một danh sách các phần tử được sắp xếp liền nhau trên bộ nhớ.
Hãy xem một hình ảnh mảng  5 phần tử, chứa các số int.

6.2- Làm việc với mảng

Cách khai báo một mảng trong Java.
// Khai báo một mảng, chưa chỉ rõ số phần tử.
int[] array1;

// Khởi tạo mảng với 100 phần tử
// Các phần tử chưa được gán giá trị cụ thể
array1 = new int[100];

// Khai báo một mảng chỉ rõ số phần tử
// Các phần tử chưa được gán giá trị cụ thể
double[] array2 = new double[10];

// Khai báo một mảng mà các phần tử được gán giá trị cụ thể.
// Mảng này có 4 phần tử
long[] array3= {10L, 23L, 30L, 11L};
Hãy xem một ví dụ:
  • ArrayExample1.java
package org.o7planning.tutorial.javabasic.array;

public class ArrayExample1 {

   
   
   public static void main(String[] args) {
       
       // Khai báo một mảng 5 phần tử
       int[] myArray= new int[5];
       
       // Chú ý phần tử đầu tiên của mảng có chỉ số là 0:
       
       // Gán giá trị cho phần tử đầu tiên (Chỉ số 0)
       myArray[0] = 10;
       
       // Gán giá trị cho phần tử thứ hai (Chỉ số 1)
       myArray[1] = 14;
       
       myArray[2] = 36;
       myArray[3] = 27;
       
       // Giá giá trị cho phần tử thứ 5 (Phần tử cuối cùng trong mảng)
       myArray[4] = 18;
       
       // In ra màn hình số phần tử của mảng.
       System.out.println("Array Length="+ myArray.length);
       
       // In ra màn hình phần tử tại chỉ số 3 (Phần tử thứ 4 trong mảng)
       System.out.println("myArray[3]="+ myArray[3]);
       
       // Sử dụng vòng lặp for để in ra các phần tử trong mảng.
       for(int index=0; index < myArray.length; index++) {
           System.out.println("Element "+ index+" = "+ myArray[index]);    
       }
   }
}
Kết quả:
Một ví dụ minh họa tiếp sử dụng vòng lặp for để gán giá trị cho các phần tử:
  • ArrayExample2.java
package org.o7planning.tutorial.javabasic.array;

public class ArrayExample2 {

   public static void main(String[] args) {

       // Khai báo một mảng 5 phần tử
       int[] myArray = new int[5];

       // In ra màn hình số phần tử của mảng.
       System.out.println("Array Length=" + myArray.length);

       // Sử dụng vòng lặp for gán giá trị các phẩn tử của mảng.
       for (int index = 0; index < myArray.length; index++) {
           myArray[index] = 100 * index * index + 3;
       }
       
       // In ra màn hình phần tử tại chỉ số 3
       System.out.println("myArray[3] = "+ myArray[3]);
   }
}
Kết quả

7- Class, đối tượng và cấu tử (Class, Instance, Constructor)

Bạn cần có sự phân biệt giữa 3 khái niệm:
  • Class
  • Cấu tử (Constructor)
  • Đối tượng (Instance)
Khi chúng ta nói về Cây, nó là một thứ gì đó trìu tượng, nó là một lớp (class). Nhưng khi chúng ta chỉ thẳng vào một cái cây cụ thể thì lúc đó đã rõ ràng và đó là đối tượng (instance)
Hoặc khi chúng ta nói về người (Person) thì đó cũng trìu tượng, nó là một lớp. Nhưng khi chỉ thẳng vào bạn hoặc tôi thì đó là 2 đối tượng khác nhau, cùng thuộc lớp người.
  • Person.java
package org.o7planning.tutorial.javabasic.javastructure;

public class Person {

    // Đây là một trường (Field)
    // Lưu trữ tên người.
    public String name;

    // Đây là một cấu tử, còn gọi là phương thức khởi tạo (Constructor)
    // Dùng nó để khởi tạo đối tượng.
    // Cấu tử này có một tham số.
    // Cấu tử luôn có tên giống tên class.
    public Person(String persionName) {
        // Gán giá trị từ tham số vào cho trường name.
        this.name = persionName;
    }

    // Đây là một phương thức trả về kiểu String.
    public String getName() {
        return this.name;
    }

}
Như trên class Person không có hàm main. Tiếp theo class TestPerson là ví dụ khởi tạo các đối tượng của Person thông qua các cấu tử.
  • PersonTest.java
package org.o7planning.tutorial.javabasic.javastructure;

public class PersonTest {

    public static void main(String[] args) {

        // Tạo một đối tượng từ class Person
        // Khởi tạo đối tượng này tử cấu tử của class Person
        // Cụ thể là Edison
        Person edison = new Person("Edison");

        // Class Person có hàm getName()
        // Sử dụng đối tượng để gọi hàm getName():
        String name = edison.getName();
        System.out.println("Person 1: " + name);

        // Tạo một đối tượng từ class Person.
        // Khởi tạo đối tượng này tử cấu tử của class Person
        // Cụ thể là Bill Gates
        Person billGate = new Person("Bill Gates");

        // Class Person có trường name (public)
        // Sử dụng đối tượng để tham chiếu tới nó.
        String name2 = billGate.name;
        System.out.println("Person 2: " + name2);

    }

}
Kết quả chạy ví dụ:

8- Trường (Field)

Trong phần tiếp theo này chúng ta sẽ thảo luận về một số khái niệm:
Trường (Field)
  • Trường thông thường
  • Trường tĩnh (static Field)
  • Trường final (final Field)
  • Trường tĩnh và final (static final Field)
Xem một ví dụ với trường thông thường và trường tĩnh.
  • FieldSample.java
package org.o7planning.tutorial.javabasic.javastructure;

public class FieldSample {
    
    // Đây là một trường tĩnh.
    public static int MY_STATIC_FIELD = 100;
    
    // Đây là một trường thông thường.
    public String myValue;
    
    
    // Cấu tử khởi tạo đối tượng FieldSample.
    public FieldSample(String myValue)  {
        this.myValue= myValue;
    }

}
  • FieldSampleTest.java
package org.o7planning.tutorial.javabasic.javastructure;

public class FieldSampleTest {

   public static void main(String[] args) {

       // Tạo đối tượng thứ nhất.
       FieldSample obj1 = new FieldSample("Value1");

       System.out.println("obj1.myValue= " + obj1.myValue);

       // In ra giá trị của trường static
       // Tham chiếu qua đối tượng.
       System.out.println("obj1.MY_STATIC_FIELD= " + obj1.MY_STATIC_FIELD);

       // In ra giá trị của trường static.
       // Với các trường tĩnh, có thể truy cập tới nó thông qua class.
       // Tham chiếu qua class.
       System.out.println("FieldSample.MY_STATIC_FIELD= "
               + FieldSample.MY_STATIC_FIELD);

       // Tạo đối tượng thứ 2:
       FieldSample obj2 = new FieldSample("Value2");

       System.out.println("obj2.myValue= " + obj2.myValue);

       // In ra giá trị của trường static
       // Tham chiếu qua đối tượng.
       System.out.println("obj2.MY_STATIC_FIELD= " + obj2.MY_STATIC_FIELD);

       System.out.println(" ------------- ");

       // Trường static là trường dùng chung cho mọi đối tượng.
       // Sét đặt giá trị mới cho trường static.
       // (Có thể thay bởi: FieldSample.MY_STATIC_FIELD = 200)
       obj1.MY_STATIC_FIELD = 200;

       // Tại đây sẽ in ra giá trị 200.
       System.out.println("obj2.MY_STATIC_FIELD= " + obj2.MY_STATIC_FIELD);
   }
}
Kết quả chạy ví dụ:
Các trường final là các trường mà không thể gán giá trị mới cho nó, nó giống như một hằng số.
  • FinalFieldExample.java
package org.o7planning.tutorial.javabasic.javastructure;

public class FinalFieldExample {

    // Một trường final.
    // Trường final không cho phép gán giá trị mới.
    public final int myValue = 100;

    // Một trường tĩnh và final.
    // Trường final không cho phép gán giá trị mới.
    public static final long MY_LONG_VALUE = 1234L;
}

9- Phương thức (Method)

Phương thức, hay còn gọi là hàm (Method)
  • Phương thức thông thường.
  • Phương thức tĩnh
  • Phương thức final. (Sẽ được đề cập trong phần thừa kế của class).
  • MethodSample.java
package org.o7planning.tutorial.javabasic.javastructure;

public class MethodSample {

   public String text = "Some text";
   
   // Cấu tử mặc định
   public MethodSample()  {
       
   }

   // Đây là một phương thức trả về kiểu String.
   // Phương thức này không có tham số
   public String getText() {
       return this.text;
   }

   // Đây là một phương thức có 1 tham số String.
   // Phương thức này trả về void (Hay gọi là ko trả về gì)
   public void setText(String text) {
       // this.text tham chiếu tới trường text.
       // phân biệt với tham số text.
       this.text = text;
   }

   // Đây là một phương thức tĩnh.
   // Trả về kiểu int, có 3 tham số.
   public static int sum(int a, int b, int c) {
       int d =  a + b + c;
       return d;
   }
}
  • MethodSampleTest.java
package org.o7planning.tutorial.javabasic.javastructure;

public class MethodSampleTest {

    public static void main(String[] args) {

        // Tạo đối tượng MethodSample
        MethodSample obj = new MethodSample();

        // Gọi phương thức getText()
        String text = obj.getText();

        System.out.println("Text = " + text);

        // Gọi method setText(String)
        obj.setText("New Text");

        System.out.println("Text = " + obj.getText());

        // Phương thức tĩnh có thể gọi qua class.
        // Cách này được khuyến khích dùng. (**)
        int sum = MethodSample.sum(10, 20, 30);

        System.out.println("Sum  10,20,30= " + sum);

        // Hoặc gọi qua đối tượng
        // Cách này không được khuyến khích. (**)
        int sum2 = obj.sum(20, 30, 40);

        System.out.println("Sum  20,30,40= " + sum2);
    }

}

10- Thừa kế trong Java

Java cho phép viết class mở rộng từ một class. Class mở rộng từ một class khác được gọi là class con. Class con có khả năng thừa kế các trường và các method từ class cha.
  • Animal.java
package org.o7planning.tutorial.javabasic.inheritance;

public class Animal {

 public Animal() {

 }

 public void move() {
     System.out.println("Move ...!");
 }

 // Tiếng kêu của động vật này.
 public void say() {
     System.out.println("<nothing>");
 }

}
  • Cat.java
package org.o7planning.tutorial.javabasic.inheritance;

public class Cat extends Animal {

   // Ghi đè method của class Animal.
   public void say() {
       System.out.println("Meo");
   }
}
  • Dog.java
package org.o7planning.tutorial.javabasic.inheritance;

public class Dog extends Animal {

   // Ghi đè method của class Animal.
   public void say() {
       System.out.println("Go");
   }
}
  • Ant.java
package org.o7planning.tutorial.javabasic.inheritance;

// Con kiến
public class Ant extends Animal {

}
  • AnimalTest.java
package org.o7planning.tutorial.javabasic.inheritance;

public class AnimalTest {

   public static void main(String[] args) {

       // Khai báo một đối tượng Cat.
       Cat cat = new Cat();
       
       // Kiểm tra xem 'cat' có phải là đối tượng Animal ko.
       // Kết quả rõ ràng là true.
       boolean isAnimal = cat instanceof Animal;
       System.out.println("cat instanceof Animal?"+ isAnimal);

       // ==> Meo
       // Gọi vào method say() của Cat.
       cat.say();

       // Khai báo một đối tượng Animal
       // Khởi tạo đối tượng thông qua cấu tử của Cat.
       Animal cat2 = new Cat();

       // ==> Meo
       // Nó vẫn gọi vào method say() của Cat.
       cat2.say();

       // Tạo đối tượng Animal
       // Thông qua cấu tử của class con, Ant.
       Animal ant = new Ant();

       // ==> ..
       // Ant không có method say()
       // Nó gọi vào method say() thừa kế từ class cha (Animal).
       ant.say();
   }
}
Kết quả chạy ví dụ:

11- Hướng dẫn tra cứu sử dụng Javadoc

Javadoc là tài liệu tra cứu cách sử dụng các class thư viện trong java. Chẳng hạn class A gồm có các method nào, trường, cấu tử nào,...
Bạn có thể xem hướng dẫn download và sử dụng Jdk9 Javadoc định dạng CHM tại: