Showing posts with label abstract. Show all posts
Showing posts with label abstract. Show all posts

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 A {
    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 
B 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 
C 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 interface1, interface2,interface3{// …}
Ví d?:
PHP:
interface DienTich {

    public abstract 
void sHinhVuong(float a);

    public abstract 
void sHinhChuNhat(float a, float b);
}

interface 
ChuVi {

    public abstract 
void cVHinhVuong(floa

Available link for download

Read more »

Wednesday, October 26, 2016

BÃ i 16 b Abstract class Interface implements trong java

BÃ i 16 b Abstract class Interface implements trong java


1.Abstract class

1.1.Khái ni?m
- Là 1 l?p tr?u t??ng
- Không dùng ?? t?o ra ??i t??ng mà ch? dùng làm c? s? cho l?p khác k? th?a
- Ngoài thu?c tính,ph??ng th?c bình th??ng,abstact class có thêm abstact method - ph??ng th?c tr?u t??ng
- Abstact method ko dùng ?? th?c hi?n 1 công vi?c nào mà,nó ch? là 1 khuôn m?u.
- Khi 1 class k? th?a Abstract class thì nó b?t bu?c ph?i override l?i Abstract method c?a Abstract class ?ó

2.Ví d?

T?o project Bai16 --> m?c ?inh trong netbean s? t?o class Bai16 là class ch?a hàm main c?a project
T?o 1 class bình th??ng bên ngoài class Bai16 là DemoAbstractClass v?i n?i dung nh? sau
PHP:
package Bai16;

public abstract class 
DemoAbstractClass {
    abstract 
void InfoObject();

public 
void Description(){

    }
}
Trong class Bai16 ,cho k? th?a class DemoAbstractClass,ch??ng trình s? báo l?i n?u nh? b?n không override ph??ng th?c InfoObject() c?a class DemoAbstractClass

PHP:
public class Bai16 extends DemoAbstractClass{

    public static 
void main(String[] args) {
    }

    @
Override
    void InfoObject
() {

    }

}
??i v?i hàm Description,nó ch? là 1 hàm bình th??ng,do ?ó b?n có th? override ho?c không
Hàm InfoObject() ch? là 1 khuôn m?u cho các class k? th?a DemoAbstractClass


T?o 1 ??i t??ng trong hàm main,ch?nh s?a l?i hàm InfoObject theo ý b?n và ch?y th? ch??ng trình

PHP:
public class Bai16 extends DemoAbstractClass{

    public static 
void main(String[] args) {
        
Bai16 obj = new Bai16();
        
obj.InfoObject();
    }

    @
Override
    void InfoObject
() {
        
System.out.println("Day la abstract method,bat buoc phai override no");
    }

}

2.Interface - implements

2.1.Khái ni?m
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).

2.2.Ví d?
T?o 2 Interface là DemoInterface và DemoInterface2
N?u b?n nào ch?a bi?t thì chu?t ph?i vào package -> Java Interface

PHP:
public interface DemoInterface {
  
void InfoInterface();
}
PHP:
public interface DemoInterface2 {
    
void InfoInterface2();
}
Nh? Interface,chúng ta ?ã gi?i quy?t ???c v?n ?? ?a k? th?a trong java
Cách k? th?a interface là dùng t? khóa implements
B?t bu?c ph?i Override các hàm trong Interface khi k? th?a nó

S?a l?i trong class Bai16 nh? sau
PHP:

public class Bai16 extends DemoAbstractClass implements DemoInterface,DemoInterface2{

    public static 
void main(String[] args) {
        
Bai16 obj = new Bai16();
        
obj.InfoObject();
        
obj.InfoInterface();
        
obj.InfoInterface2();
    }

    @
Override
    void InfoObject
() {
        
System.out.println("Day la abstract method,bat buoc phai override no");
    }

    @
Override
    
public void InfoInterface() {
        
System.out.println("Day la ham trong DemoInterface");
    }

    @
Override
    
public void InfoInterface2() {
     
System.out.println("Day la ham trong DemoInterface2");
    }


}

}
Ch?y th? và xem k?t qu?

Source code,các b?n down v? gi?i nén và import vào netbean
Cách import:T? netbean : File -> Open Project -> tìm n?i th? m?c b?n v?a gi?i nén

Available link for download

Read more »