Thursday, January 19, 2017

Bà i 21 Final class abstract class và interface trong Java

Bà i 21 Final class abstract class và interface trong Java


Bài 21: Final class, abstract class và interface trong Java

1, Final class (L?p vô sinh):

L?p không th? có l?p d?n xu?t t? nó (không có l?p con) g?i là l?p “vô sinh”, hay nói cách khác không th? k? th?a ???c t? m?t l?p “vô sinh”. L?p “vô sinh” dùng ?? h?n ch?, ng?n ng?a các l?p khác d?n xu?t t? nó.
?? khai báo m?t l?p là l?p “vô sinh”, chúng ta dùng t? khóa final class.
T?t c? các ph??ng th?c c?a l?p vô sinh ??u vô sinh, nh?ng các thu?c tính c?a l?p vô sinh thì có th? không vô sinh.
- Xem thêm video blog StudyAndShare

?

Ví d?:
PHP:
public final class {
    public final 
int x;
    private 
int y;
    public final 
void method_1(){
    
// …
    
}
    public final 
void method_2(){
    
// …
    
}
}
2, Abstract class (L?p tr?u t??ng):

M?t l?p tr?u t??ng thì không có th? hi?n ngh?a là ta không th? kh?i t?o nó b?ng toán t? new, và m?t ph??ng th?c trong nó là abstract thì ch? ???c ??a ra ??nh ngh?a (khai báo) mà không ???c th?c thi và nó s? ???c override l?i trong các l?p con k? th?a. Và trong l?p mà t?n t?i ph??ng th?c abstract thì l?p ?ó c?ng ???c ??nh ngh?a abstract.

- L?p tr?u t??ng là l?p không có khai báo các thu?c tính thành ph?n và các ph??ng th?c.
- B?t c? class nào k?t th?a abstract class nào ?ó ph?i ??nh ngh?a l?i các abstract mothods c?a l?p mà nó th?a k? ho?c không ??nh ngh?a l?i nh?ng ph?i ghi l?i abstract mothods ?ó.
- Abstract class là class có ch?a các abstract mothods
- Các methods trong abstract class ph?i khai báo v?i t? khóa abstract (không gi?ng nh? interface vì interface m?c ??nh gán abstract cho các mothods)
- M?t abstract class có th? ch?a c? abstract mothods và các mothods th??ng.
- Khi m?t class có ch?a abstract mothod thì b?t bu?c ph?i có t? khóa abstract ??ng tr??c tên class ?ó.

PHP:
abstract class A{
    abstract 
void method_1();
}
public class 
extends A{
    @
Override
    
public void method_1(){
    
// cài ??t chi ti?t cho ph??ng th?c method_1
    // trong l?p con B.
    // …
    
}
}
public class 
extends A{
    @
Override
    
public void method_1(){
    
// cài ??t chi ti?t cho ph??ng th?c method_1
    // trong l?p con C.
    // …
    
}
}
L?u ý:
* Các ph??ng th?c ???c khai báo dùng các ti?n t? private và static thì không ???c khai báo là tr?u t??ng abstract. Ti?n t? private thì không th? truy xu?t t? các l?p d?n xu?t, còn ti?n t? static thì ch? dùng riêng cho l?p khai báo mà thôi.
* Ph??ng th?c trong abstract class có 2 cách ?? khai báo:
- Khai báo bình th??ng nh? class
- Khai báo gi?ng nh? interface nh?ng ph?i có thêm t? khóa abstract

Code demo:
PHP:
package java.demo.android.vn;

abstract class 
nhanSu {

    abstract 
void show();
}

class 
hocSinh extends nhanSu {

    public 
String hoTen;
    public 
int namSinh;

    public 
void show() {
        
System.out.println("Hello " hoTen " N?m sinh: " namSinh);
    }
}

public class 
JavaDemoAndroidVn {

    public static 
void main(String[] args) {
        
hocSinh a = new hocSinh();
        
a.hoTen "V? V?n A";
        
a.namSinh 1992;
        
a.show();

    }
}
3, Interface (Khác v?i GUI - Nó không ph?i là giao di?n ng??i dùng)

- Nh? chúng ta ?ã bi?t m?t l?p trong java ch? có m?t siêu l?p (super class) tr?c ti?p hay m?t cha duy nh?t (??n th?a k?). ?? tránh ?i tính ph?c t?p c?a ?a th?a k? (multi-inheritance) trong l?p trình h??ng ??i t??ng, Java thay th? b?ng interface. M?t l?p có th? k? th?a t? nhi?u interface v?i các l?p khác ?? th?a h??ng thêm vùng d? li?u và ph??ng th?c c?a các interface này.

- Interface ???c khai báo nh? m?t l?p. Nh?ng các thu?c tính c?a interface là các h?ng (khai báo dùng t? khóa final) và các ph??ng th?c c?a interface là tr?u t??ng (m?c dù không có t?
khóa abstract).
- Mothods tr?u t??ng là các mothods ch? có ph?n header, không có ph?n body.(Xem ví d? phía d??i)
- Trong các l?p có cài ??t các interface ta ph?i ti?n hành cài ??t c? th? các ph??ng th?c này.

- Interface ???c ??nh ngh?a nh?m làm cho code rành m?ch h?n vì các class có th? implements các interface.

Ví d?: Code ví d? c?a video bên blog StudyAndShare



?
PHP:
public class DemoJavaBasic {
      public static 
void main(String[] args) {
            
Manager mana = new Manager();
            
mana.show();
      }
}
interface 
Human{
      public static final 
int AVG_AGE 100;
      
int AVG_WEIGHT 60;

      public abstract 
void show();
      
void study();
}
class 
Manager implements Human{

      @
Override
      
public void show() {
            
System.out.println("Tuoi trung bình: "AVG_AGE);

      }

      @
Override
      
public void study() {
            
// TODO Auto-generated method stub

      
}

}
Có m?t v?n ?? khác v?i l?p là m?t giao di?n (interface) không ch? có m?t giao di?n cha tr?c ti?p mà có th? d?n xu?t cùng lúc nhi?u giao di?n khác (hay có nhi?u giao di?n cha). Khi ?ó nó s? k? th?a t?t c? các giá tr? h?ng và các ph??ng th?c c?a các giao di?n cha. Các giao di?n cha ???c li?t kê thành chu?i và cách nhau b?i d?u ph?y “,”. Khai báo nh? sau:
PHP:
public interface InterfaceName extends interface1interface2,interface3{// …}
Ví d?:
PHP:
interface DienTich {

    public abstract 
void sHinhVuong(float a);

    public abstract 
void sHinhChuNhat(float afloat b);
}

interface 
ChuVi {

    public abstract 
void cVHinhVuong(floa

Available link for download