Tính kế thừa trong java
-Là một kĩ thuật mà một đối tượng có thể kế thừa tất cả các thuộc tính và hành vi -phương thức của lớp cha.
-Khi kế thừa lớp cha, ta có thể ghi đè-override hay thêm các phương thức khác.
-Chúng ta sử dụng từ khóa extends của lớp con để có thể kế thừa các thuộc tính của lớp cha trừ các thuộc tính private của lớp cha.
Cú pháp như sau:
class ten_lop_con extends ten_lop_cha
{
//cac phuong thuc va cac truong
}
Ví dụ 1, -Kế thừa lớp Thread cha thông qua từ khóa extends, và insert phương thức run()
Tạo nhanh 1 thread kế thừa phương thức cha của lớp Thread, cứ mỗi 1s xuất ra câu xin chào, dủ 10 lần thì ngưng.
-Tạo 1 project mới có tên "DemoThread", tôi thực hiện trên IDE của Eclipse.
-Ta click phải vào package, chọn new class, đặt tên là MyThread1, tick chọn checkbox tạo ra phương thức main().
Kết quả như sau:
package DemoThread1;
public class MyThread1
{
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
Tiếp tục, ta tạo ra một class con (có tên là RunThread) kế thừa lớp Thread (lớp cha -sẵn có).
package DemoThread1;
class RunThread extends Thread
{
click phải ở đây chọn Source-->Override/Implement methods--> run().
}
public class MyThread1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
Ta được kết quả sau:
package DemoThread1;
class RunThread extends Thread
{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
}
}
public class MyThread1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
Ta hãy code chức năng xuất ra câu chào cứ mỗi 1s cho phương thức run() nhé,lưu ý khi dùng
phương thức Sleep, IDE bắt ta phải thêm khối try/catch để bắt lỗi, click phải vào lỗi màu đỏ,
chọn Surrounds with try/catch. Sau khi code xong ta tiến hành implement vào class MyThread1
tạo 1 class mới có tên là t1, và start nó thôi.
package DemoThread1;
class RunThread extends Thread
{
@Override
public void run()
{
for (int i=0;i<10;i++)
{
System.out.println("xin chao lan thu "+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class MyThread1 {
public static void main(String[] args) {
RunThread t1=new RunThread();
t1.start();
}
}
Kết quả hiển thị.
xin chao lan thu 0
xin chao lan thu 1
xin chao lan thu 2
xin chao lan thu 3
xin chao lan thu 4
xin chao lan thu 5
xin chao lan thu 6
xin chao lan thu 7
xin chao lan thu 8
xin chao lan thu 9
Ví dụ 2, implements interface Runnable có sẵn.
click phải vào src ta chọn new package đặt tên là DemoThread2, trong package DemoThread2,
ta chọn new class, đặt tên là MyThread2.
Tạo 1 class tên RunThread, thêm từ khóa implements Runnable
trong class, ta click phải và thêm phương thức Run().
package DemoThread2; class RunThread implements Runnable{ @Override public void run() { // TODO Auto-generated method stub } } public class MyThread2 { public static void main(String[] args) { // TODO Auto-generated method stub } }
Về phần code tương tự ví dụ 1,
package DemoThread2; class RunThread implements Runnable{ @Override public void run() { for (int i=0;i<10;i++) { System.out.println("xin chao lan thu "+i); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } public class MyThread2 { public static void main(String[] args) { Thread t1= new Thread(new RunThread()); t1.start(); } }
Kết quả khi run.
xin chao lan thu 0
xin chao lan thu 1
xin chao lan thu 2
xin chao lan thu 3
xin chao lan thu 4
xin chao lan thu 5
xin chao lan thu 6
xin chao lan thu 7
xin chao lan thu 8
xin chao lan thu 9
Ví dụ 3, tạo thread trực tiếp từ Runnable
package DemoThread3; public class MyThread3 { public static void main(String[] args) { Thread t1 =new Thread (new Runnable() { public void run() { for (int i=0;i<10;i++) { System.out.println("xin chao lan thu "+i); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }}); t1.start(); } }
Nguồn tham khảo: Tác giả Chế Công Bình.