Showing posts with label class. Show all posts
Showing posts with label class. Show all posts

Sunday, February 12, 2017

BÃ i 20 Inner class trong Java

BÃ i 20 Inner class trong Java


Bài 20: Inner class trong Java

Untitled
?
1, Khái ni?m:

M?t class n?m trong class khác ???c g?i là inner class. Inner class có th? coi nh? m?t thu?c tính c?a class. Ngh?a là b?n không th? kh?i t?o ??i t??ng B n?u ch?a kh?i t?o ??i t??ng A.
PHP:
class A{
    class 
B{
    }
}
PHP:
A obj1 = new A();A.B obj2 = obj1.new B(); 
B?i class B n?m trong class A nên nó có th? truy c?p t?t c? các thu?c tính hay ph??ng th?c c?a class A
PHP:
class A  {
    private 
int x = 8;
    class 
B {
        public 
void printInt() {
            
System.out.println(x);
        }
    }
}
?? s? d?ng method v?a t?o, ta có th? vi?t:
obj2.printInt();

2, M?t s? ví d?:

Ví d? 1: Ví d? bên Blog StudyAndShare


?
PHP:
public class DemoJavaAndroidVn {
      public static 
void main(String[] args) {
            
Outer out = new Outer();
            
out.show();
      }
}

class 
Outer {
      public 
void show() {
            
Inner in = new Inner();
            
in.display();
      }

      class 
Inner {
            public 
void display() {
                  
System.out.println("?ây là inner class.");
            }
      }
}

class 
B {
      public 
void show() {
            
Outer.Inner in = new Outer().new Inner();
            
in.display();
      }
}
Ví d? 2:
PHP:
package javaandroidvn;

class 
ThoiGian {

    public 
int ngay, thang, nam;

    class 
Time {

        public 
int gio, phut, giay;

        public 
void showTime() {
            
System.out.println("Ngày " + ngay + "/" + thang + "/" + nam);
            
System.out.println("Time: " + this.gio + ": " + this.phut + ": " + this.giay);
        }
    }
}

public class 
JavaAndroidVn {

    public static 
void main(String[] args) {
        
ThoiGian tg = new ThoiGian();
        
ThoiGian.Time time = tg.new Time();
        
tg.ngay = 20;
        
tg.thang = 7;
        
tg.nam = 1996;
        
time.gio = 20;
        
time.phut = 22;
        
time.giay = 01;
        
time.showTime();

    }
}

Ngu?n : Android.vn

Available link for download

Read more »

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 »

Thursday, December 29, 2016

Bà i 12 Class lớp và đối tượng trong Java!

Bà i 12 Class lớp và đối tượng trong Java!


Bài 12: Class (l?p) và ??i t??ng trong Java!

?? có ki?n th?c t?ng quan và m?t vài khái ni?m m?i trong l?p trình h??ng ??i t??ng
Tr??c tiên, b?n hãy ??c th?t k? bài này:
L?p trình h??ng ??i t??ng v?i công ngh? Java?
R?i xem video anh Vi?t bên blog StudyAndShare:

?

? bài này, mình s? ch? vi?t v? class trong Java và chúng ta b?t ??u th?c hành, làm bài t?p nh? ?? làm quen v?i class.

1. Khái ni?m class (l?p):

Chúng ta có th? xem l?p nh? m?t khuôn m?u (template) c?a ??i t??ng (Object). Trong ?ó bao g?m d? li?u c?a ??i t??ng (fields hay properties) và các ph??ng th?c (methods) tác ??ng lên thành ph?n d? li?u ?ó g?i là các ph??ng th?c c?a l?p.
Các ??i t??ng ???c xây d?ng b?i các l?p nên ???c g?i là các th? hi?n c?a l?p (class instance).
L?p trong java g?n gi?ng nh? b?n ghi trong l?p trình C ho?c pascal, nh?ng t?t nhiên nó cao c?p h?n.
Ví d? 1: Ta khai báo 1 l?p SinhVien g?m các thu?c tính:
- hoTen
- namSinh
- lopHoc.
L?p này chính là 1 khuôn m?u. Khi ta t?o ra các ??i t??ng d?a trên l?p này, các ??i t??ng ??u t??ng t? nh? m?u trên.
Vd :
T?o ??i t??ng a, khi ?ó a s? có 3 thu?c tính, và ta có th? thao tác gán giá tr? các thu?c tính ?ó nh? sau:
- hoTen là "Nguy?n V?n A";
- namSinh là "1992";
- lopHoc là "At7a";
??i t??ng b, c, ... c?ng t??ng t? nh?ng giá tr? c?a chúng s? ??c tr?ng cho t?ng ??i t??ng riêng. Có l?, các b?n s? th?y nó có v? gi?ng v?i các b?n ghi n?u nh? b?n ?ã ???c h?c l?p trình C ho?c Pascal.

2. Khai báo/??nh ngh?a l?p:

PHP:
class <ClassName> {
    <
ki?u d? li?u> <field_1>;
    <
ki?u d? li?u> <field_2>;
    
constructor
    method_1
    method_2
}
- class: là t? khóa c?a java
- ClassName: là tên chúng ta ??t cho l?p
- field_1, field_2: các thu?c tính, các bi?n, hay các thành ph?n d? li?u c?a l?p.
- constructor: là s? xây d?ng, kh?i t?o ??i t??ng l?p.
- method_1, method_2: là các ph??ng th?c/hàm th? hi?n các thao tác x? lý, tác ??ng lên các thành ph?n d? li?u c?a l?p.

? bài này, t?m th?i chúng ta s? ch?a quan tâm t?i constructor và method nhé, nh?ng bài sau mình s? vi?t rõ v? nh?ng khái ni?m ?ó.

Các b?n hãy xem vd2 code v? l?p ?? ??nh ngh?a nh?ng gì ?ã vi?t trong ví d? 1
Ví d? 2: (? ?ây, t?m th?i ch?a c?n hi?u public là gì nhé, xu?ng ph?n d??i s? nói k? h?n)
PHP:
class SinhVien {
    public 
String hoTen;
    public 
int namSinh;
    public 
String lopHoc;
}
3. T?o ??i t??ng c?a l?p:

ClassName objectName = new ClassName();

Ví d? 3: T?o 2 ??i t??ng sinh viên a và sinh viên b d?a trên class ?ã ??nh ngh?a ? ví d? 2:
PHP:
SinhVien a = new SinhVien();SinhVien b = new SinhVien();
4. Thu?c tính c?a l?p

Vùng d? li?u (fields) hay thu?c tính (properties) c?a l?p ???c khai báo bên trong l?p nh? sau:

PHP:
class <ClassName>{// khai báo nh?ng thu?c tính c?a l?p<ti?n t?> <ki?u d? li?u> field1;// …}
?? xác ??nh quy?n truy xu?t c?a các ??i t??ng khác ??i v?i vùng d? li?u c?a l?p ng??i ta th??ng dùng 3 ti?n t? sau:
- public: có th? truy xu?t t? t?t c? các ??i t??ng khác
- private: m?t l?p không th? truy xu?t vùng private c?a 1 l?p khác.
- protected: vùng protected c?a 1 l?p ch? cho phép b?n thân l?p ?ó và nh?ng l?p d?n xu?t t? l?p ?ó truy c?p ??n.
Xem thêm video Blog StudyAndShare v? các thu?c tính này:

?

Ví d? 4:
PHP:
class SinhVien{
    public    
String hoTen;
    private    
int    namSinh;
    protected 
String lopHoc;
    public static 
String tenTruong = "HV KT M?t Mã";
}
- Thu?c tính "hoTen" có th? ???c truy c?p ??n t? t?t c? các ??i t??ng khác. (public)
- Thu?c tính "namSinh" ch? có th? truy c?p ???c t? các ??i t??ng có ki?u "SinhVien"(private)
- Thu?c tính "lopHoc", so có th? truy c?p ???c t? các ??i t??ng có ki?u "SinhVien" và các ??i t??ng c?a các l?p con d?n xu?t t? l?p "SinhVien" (protected)
- "tenTruong" là bi?n t?nh có giá tr? là "HV KT M?t Mã"trong t?t c? các th? hi?n t?o ra t? l?p "SinhVien" (public static)

L?u ý: Thông th??ng ?? an toàn cho vùng d? li?u c?a các ??i t??ng ng??i ta tránh dùng ti?n t? public, mà th??ng ch?n ti?n t? private ?? ng?n c?n quy?n truy c?p ??n vùng d? li?u c?a m?t l?p t? các ph??ng th?c bên ngoài l?p ?ó.

V?y class ???c ??nh ngh?a, ???c vi?t ? v? trí nào trong 1 bài l?p trình Java h??ng ??i t??ng. Vi?c t?o ??i t??ng, truy c?p d? li?u c?a các ??i t??ng ???c t?o t?o nh?ng class ?ó ra sao! ? bài sau mình s? vi?t rõ và k? h?n ?? các b?n có cái nhìn c? th?!

K?t thúc bài này, mình s? vi?t 1 ví d? ??n gi?n:

Ví D? 5: T?o class sinh viên g?m các thu?c tính: hoTen, namSinh, lopHoc
T?o 2 ??i t??ng là sinh viên a và sinh viên b. Gán giá tr? cho các thu?c tính và in giá tr? các thu?c tính t?ng sinh viên ra màn hình!
PHP:
package javademoandroidvn;//Vd5class SinhVien {

    public 
String hoTen;
    public 
int namSinh;
  &nb

Available link for download

Read more »

Saturday, November 19, 2016

Bà i 13 Class trong Java tiếp

Bà i 13 Class trong Java tiếp


Bài 13: Class trong Java (ti?p)

Sau bài vi?t này, các b?n s? có cái nhìn toàn di?n h?n v? class trong 1 project Java (interface, abstract class t??ng t?), các b?n áp d?ng ?? vi?t code sao cho d? nhìn d? hi?u và d? qu?n lý. Ch?n cách vi?t nào cho phù h?p v?i t?ng bài t?p, t?ng project. Sau bài này, các b?n c?ng s? hi?u h?n v? l?p trình h??ng ??i t??ng trong java.

1, Bài có 1 class, dùng class ch?a hàm main!

Khi b?n lên m?ng, tìm code, b?n s? th?y ng??i ta th??ng dùng cách này
Th??ng có 1 class duy nh?t. Cách vi?t này th??ng dùng ?? chia s? thu?t toán, cú pháp ho?c gi?i thi?u các ph??ng th?c c?a 1 ??i t??ng trong th? vi?n nào ?ó.
Ví d? 1: M?t bài t?p qu?n lý sinh viên nh?:
PHP:
package sinh.vien;

public class 
SinhVien {

    public 
String hoTen;
    public 
int namSinh;
    public 
float toan, ly, hoa;

    public static 
void main(String[] args) {
        
SinhVien a = new SinhVien();
        
a.hoTen = "V? V?n A";
        
a.namSinh = 1992;
        
a.toan = 10.0f;
        
a.ly = 9.0f;
        
a.hoa = 9.5f;
        
System.out.println("?i?m Tb là: " + (float) (a.toan + a.ly + a.hoa) / 3);
    }
}
Khi làm bài t?p ho?c làm các project, ít khi dùng cách này, nó không hay cho vi?c qu?n lý, gi?i thi?u ?? các b?n có th? ??c và hi?u n?u nh? g?p ph?i nh?ng bài chia s? d?ng trên!

2, Class ??t cùng file class ch?a hàm main

V? trí ??t ngoài class ch?a ch??ng trình chính, ? bài tr??c, mình có vi?t ví d? theo cách này! Nó ch? thích h?p v?i bài ít class, class ít thu?c tính và ph??ng th?c. N?u bài có nhi?u class, m?i class có nhi?u ph??ng th?c, ?i?u này c?ng không t?t, s? r?t khó nhìn và qu?n lý c?ng nh? nâng c?p!
Ví d? 2: N?i dung bài nh? ? Vd1, b? sung thêm class gi?ng viên, nh?ng s? b? trí l?i v? trí class nh? sau:

PHP:
package truong.hoc;

class 
SinhVien {

    public 
String hoTen;
    public 
int namSinh;
    public 
float toan, ly, hoa;
}

class 
GiangVien {

    public 
String hoTen;
    public 
int namSinh;
    public 
String mon;
    public 
int luong;
}

public class 
Main {

    public static 
void main(String[] args) {
        
SinhVien a = new SinhVien();
        
a.hoTen = "V? V?n A";
        
a.namSinh = 1992;
        
a.toan = 10.0f;
        
a.ly = 9.0f;
        
a.hoa = 9.5f;
        
System.out.println("?i?m Tb là: " + (float) (a.toan + a.ly + a.hoa) / 3);

        
GiangVien gv1 = new GiangVien();
    }
}
Chú ý: Ch??ng trình v?n ch?y n?u b?n ?? các class SinhVien và GiangVien ? phía cu?i ch??ng trình, ch? c?n n?m ngoài class Main là ???c

3, M?i class ??t riêng 1 file, cùng 1 gói (package)

Cách này ? các bài t?p có nhi?u class, các class cùng 1 lo?i.
Ví d? 4: Các class cùng là nhân s? c?a 1 tr??ng h?c: SinhVien, GiangVienKhoa1,GiangVienKhoa2.
V?i bài này, chúng ta s? t?o project v?i 1 package là truong.hoc, trong
package này s? có 4 file nh? sau:

File "main.java" ch?a hàm main:
PHP:
package truong.hoc;

public class 
Main {

    public static 
void main(String[] args) {
        
SinhVien a = new SinhVien();
        
a.hoTen = "V? V?n A";
        
a.namSinh = 1992;
        
a.toan = 10.0f;
        
a.ly = 9.0f;
        
a.hoa = 9.5f;
        
System.out.println("?i?m Tb là: " + (float) (a.toan + a.ly + a.hoa) / 3);

        
GiangVien1 gv1 = new GiangVien1();
    }
}
File GiangVien.java là 1 class, b?n t?o b?ng cách nháy chu?t ph?i vào package ch?n New --> Java Class, n?i dung nh? sau:
PHP:
package truong.hoc;

class 
SinhVien {

    public 
String hoTen;
    public 
int namSinh;
    public 
float toan, ly, hoa;
}
File GiangVien1.java:
PHP:
package truong.hoc;

class 
GiangVien1 {

    public 
String hoTen;
    public 
int namSinh;
    public 
String mon;
    public 
int luong;
}
File GiangVien2.java:
PHP:
package truong.hoc;

class 
GiangVien2 {

    public 
String hoTen;
    public 
int namSinh;
    public 
String mon;
    public 
int luong;
    public 

Available link for download

Read more »