ươ
Ch
ng 8
ố ượ
ớ
L p và Đ i t
ng
Chương 8: Lớp và Đối tượng
ố ượ
ớ
o Đ i t
ng và l p.
ộ
ươ
o Thu c tính và ph
ứ ủ ớ ng th c c a l p
o Hàm t oạ
ừ ổ
o T b nghĩa (public, private, protected).
ừ
o T khóa this.
o Tính đóng gói
o Tính đa hình
ế ừ o Tính k th a
ừ ượ
ớ
o L p tr u t
ng
Đối tượng và lớp
o Một đối tượng biểu diễn một thực thể cụ thể,
o Lớp là mô tả trừu tượng cho một đối tượng cụ
riêng biệt trong thế giới thực
thể.
o Đ i t
ự ượ ọ ng đ c xây d ng t l p nên đ c g i là
ố ượ ượ ể ệ ủ ớ ừ ớ th hi n c a l p (class instance).
Đối tượng và lớp
o Lớp chứa:
§ Tên class
§ Các thu c tính (properties) mô t
ả ạ các tr ng thái
ộ ủ ố ượ (state) c a đ i t ng.
§ Các ph
ươ ở ạ ứ ng th c kh i t o (constructor)
§ Các ph
ươ ứ ả ng th c (methods) mô t các hành vi
ủ ố ượ (behavior) c a đ i t ng
Khai báo lớp (class)
class
ề ố ề ố
ộ
ủ ớ
//khai báo các thu c tính c a l p
ể ữ ệ
//các hàm t o ạ constructor1 constructor2
ươ
ố
ứ ng th c ể ề ố
ả ề ể
//các ph
ề ố
}
Khai báo lớp (class)
o class: là t
ừ ủ khóa c a java
o
ặ ớ o ClassName: là tên đ 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)
o constructor: là ph
ươ ở ạ ứ ự ố ng th c xây d ng, kh i t o đ i
ượ t ủ ớ ng c a l p.
o method_1, method_2: là các ph ử
ươ
ể ệ ủ ứ ộ
ng th c th hi n ộ các thao tác x lý, tác đ ng lên các thu c tính c a l p.ớ
Ví dụ khai báo lớp
class ConNguoi{
ộ Thu c tính
String ten; int tuoi; double hsl;
ở ạ Hàm kh i t o
ConNguoi(){ } ConNguoi(String t1, int t2){ ten = t1; tuoi = t2; }
ươ
Ph
ứ ng th c
public void tangLuong(double d1){ hsl = d1; }
}
Thuộc tính của lớp
ủ
ộ ớ ư ữ ệ o Vùng d li u (fields) hay thu c tính (properties) c a c khai báo bên trong l p nh sau: ớ ượ l p đ
class
ủ ớ
ề ố
ộ
// khai báo các thu c tính c a l p
ể ữ ệ
}
Thuộc tính của lớp
o
ị ấ ủ
ể ố ớ ộ ớ ườ ủ
ườ ề ố Đ xác đ nh quy n truy xu t c a các đ i ố ề ộ ng khác đ i v i thu c tính c a m t l p ng i ta ề ố sau: ng dùng các ti n t ượ t th
§ M c đ nh ặ ị
§ public
§ private
§ protected
o
ả ề ể ể ơ ở ư ki u c s nh int, float,..
o
ế ộ
Từ bổ nghĩa chỉ phạm vi truy xuất
Từ bổ nghĩa chỉ phạm vi truy xuất
Ví dụ thuộc tính của lớp
Thuộc tính của lớp
ượ
c phép truy c p t
bên ngoài
private không đ
ặ ị
OK
(XeMay và Xe2Banh cùng chung 1 gói XeDongCo) ậ ừ ộ Thu c tính l p.ớ M c đ nh, public, protected
Thuộc tính của lớp
không đ
c ượ
m c đ nh, private, protected
gói bên ngoài. ượ
ấ ỳ
ề
ậ
c quy n truy c p trong b t k gói
(Xe2Banh và XeBo không cùng 1 gói) ặ ị ộ Thu c tính ậ ừ phép truy c p t public OK (đ nào)
Thuộc tính của lớp
ủ ớ
ượ
c phép truy
private c a l p cha không đ
ế ừ
OK
(HonDa và Xe2Banh trong cùng gói) ộ Thu c tính ậ ừ ớ c p t l p con k th a. ặ ị M c đ nh, public, protected
Thuộc tính của lớp
ủ ớ
ặ ị
ượ
c a l p cha không đ
c phép
l p con k th a n m bên ngoài gói.
(XeDap và Xe2Banh không cùng chung gói) ộ Thu c tính m c đ nh, private ế ừ ằ ậ ừ ớ truy c p t public, protected OK
Phương thức setter và getter
ộ
o Nguyên t c chung: Dùng private cho thu c tính và public ậ
ộ
ứ truy c p các thu c tính khi nó
ắ ươ ng th c. cho ph là private?
Phương thức setter và getter
o Ph
ộ ị ng th c setter: gán giá tr cho các thu c tính
ươ ứ ủ ố ượ c a đ i t ng.
o Ph ượ t
ủ ố ả ề ứ ộ ng th c setter: tr v các thu c tính c a đ i
ươ ng.
ộ ọ ả ọ o Click ph i chu t > ch n Source >ch n Geneate
o Ví d :ụ
ộ ọ Getters and Setters > ch n các thu c tính.
- L p sinh viên có 2 thu c tính
ộ ớ
+ H tênọ
+ Tu iổ
ự ươ ứ ng th c setter và getter cho Yêu c u: ầ xây d ng ph
ộ các thu c tính trên.
Phương thức setter và getter
Phương thức của lớp
o Hàm hay ph
ứ ố
ng th c (method) trong Java là kh i ủ ươ ệ ử ứ ự
ươ
ứ
ố
ứ ng th c: ả ề
ng th c>( ươ
Khai báo ph
ể
ề ố
{ ố ệ
} public class XeMay{ public String nhasx;
public float tinhGiaBan() {
return 1.5 * chiphisx; } } ữ ệ ệ
l nh th c hi n các ch c năng, các hành vi x lý c a
ớ
l p lên vùng d li u. o ị ấ ủ
ứ ủ ớ
ng th c c a l p ng ố
ề ố Đ xác đ nh quy n truy xu t c a các đ i
ề
ể
ườ
ươ
ố ớ
i
ng khác đ i v i các ph
ề ố
ườ
sau:
ng dùng các ti n t ượ
t
ta th public, protected, private, static, final, abstract,
synchronized o ể ả ề Có th là ể ki u void , ki u c s ể ơ ở hay ể
m t ộ l pớ . o o ươ ướ ố ứ
ng th c>: ặ
đ t theo qui c gi ng tên ể ỗ
có th r ng o public, protected, private. o static: ươ ấ ả ể ệ ủ § Ph ng th c l p ứ ớ dùng chung cho t t c các th hi n c a l p.ớ ố ượ ủ
ng c a c th c hi n k c khi không có đ i t
ươ § Có th ể đ
ượ
ứ
ớ
l p ch a ph ệ
ự
ứ
ng th c đó ể ả
. o ượ này không đ c khai báo ng th c có ti n t
ẫ ề ố
ấ ớ final: ph
ớ
ch ngồ ứ
ươ
các l p d n xu t. o abstract: ươ § Ph ng th c ầ
ứ không c n cài đ t ặ (không có source code). ẽ ượ ấ ừ ớ ự ệ ẫ ặ ớ c hi n th c (cài đ t) trong các l p d n xu t t l p § S đ
này. ủ ể ộ ố o synchoronized: dùng đ ngăn các tác đ ng c a các đ i ượ ố ượ ồ ộ t ng khác lên đ i t ng đang xét trong khi đang đ ng b ậ hóa. Dùng trong l p trình multithreads. Khai báo kh i t o đ i t
hi n)ệ public class ConNguoi{
public String HoTen;
phublic String CMND;
public String thongTin(){
} return CMND;
} o Kiểu cơ sở: int i = 1; ố ượ ể
o Ki u đ i t ng: ConNguoi SV1 = new ConNguoi(); o Sau khi t o: SV1 ạ SV1: ConNguoi HoTen = “”
……… o Tham chiếu dữ liệu của đối tượng: bienDoiTuong.duLieu public class ConNguoi{ public String HoTen;
public void hienTT(){
System.out.println(“……………..”); } ễ public static void main( String args[ ] ){
ConNguoi SV1 = new ConNguoi();
SV1.HoTen = “Nguy n Văn A”;
SV1.hienTT(); } ứ đ c bi
ặ
ở ạ ạ ph
ọ ự ộ ể ệ ủ ệ ủ ớ
t c a l p.
ng th c
ộ
khi kh i t o m t th hi n c a l p.ớ ể ữ ị ị ể ượ ọ ế ớ ớ và đ ừ ở
ể
o Có th dùng đ kh i gán nh ng giá tr măc đ nh.
ị ả ề.
o Không có giá tr tr v
ố
ặ
o Có th có tham s ho c không có tham s .
ả
o Ph i có
c g i đ n khi dùng
khóa t ố
cùng tên v i l p
new ườ
ồ ể
ươ ễ ể
ng đ an toàn, d ki m soát và
ng trình chúng ta nên khai
ớ ế o N u m t l p không có constructor thì
ấ ộ ặ ớ
§ Java s cung c p cho l p m t constructor m c ị
đ nh (default constructor). ộ ữ ế ủ ớ ẽ ượ § Nh ng thu c tính, bi n c a l p s đ
ị ặ ị
ị ườ ố ở ạ
c kh i t o
ị
ng là giá tr 0,
ị
ố ượ
ng giá tr ở
b i các giá tr m c đ nh (s : th
ể
ậ
ể
ki u lu n lý là giá tr false, ki u đ i t
null, …) ConNguoi(String t) {
HoTen = t; } o Hàm t o không có đ i s ố ố ạ
ConNguoi(){ ễ HoTen = “Nguy n Văn A”; ố ượ ử ụ ạ }
o T o đ i t ng s d ng hàm t o ạ
ConNguoi SV1 = new ConNguoi(“Nguyen Van A); HoTen = s_HoTen;
CMND = s_CMND; }
public static void main( String args[ ] ){ ConNguoi p1= new ConNguoi(“Lan”, “351xxxxxx”);
ConNguoi p2= new ConNguoi(); o p1: có HoTen = “Lan”, CMND = 351xxxxxx
o p2: có HoTen = “”, CMND = “” } o Vi c khai báo trong m t l p nhi u ph ệ ề public class XeMay{ // khai báo fields …
public float tinhGiaBan(){
return 2 * chiphisx; }
public float tinhGiaBan(float huehong){
return (2 * chiphisx + huehong); } } 31 ộ ớ
cùng tên nh ng khác tham s (khác ki u d li u,
ố ọ
khác s l
ươ
ph ứ
ươ
ng th c có
ể ữ ệ
ố
ư
ố ượ
ồ
ng tham s ) g i là khai báo ch ng
ứ
ng th c (overloading method). o Từ bổ nghĩa static được dùng để khai báo các biến, hằng và phương thức sử dụng chung trong lớp. o Hằng static: public final static double PI=3.1416; o Biến static: § Chỉ phụ thuộc vào lớp mà không phụ thuộc vào đối tượng. § Biến static có thể truy cập trực tiếp bằng tên class mà không cần bất kỳ đối tượng nào. Cú pháp: Tên_class.Tên_biến _static ế Bi n không static: Tên_đ i_t ng § Biến static chỉ khởi tạo một lần khi chương trình bắt đầu thực thi public class BienTinh{ public static int count = 0; public BienTinh() { count++;
a++; public int a = 0;
} ầ BienTinh.count); public static void main(String[] args) {
BienTinh b1 = new BienTinh();
System.out.println("count l n 1 = "+
System.out.println("b1.a = "+b1.a);
BienTinh b2 = new BienTinh();
ầ
System.out.println("count l n 2= "+BienTinh.count); System.out.println("b2.a = "+b2.a); ấ ả ố ượ }
ế
}//bi n count dùng chung cho t t c các đ i t ng (b1 và b2). public class BienTinh{ public static int count = 0; public BienTinh() { count++;
a++; public int a = 0;
} ầ BienTinh.count); public static void main(String[] args) {
BienTinh b1 = new BienTinh();
System.out.println("count l n 1 = "+
System.out.println("b1.a = "+b1.a);
BienTinh b2 = new BienTinh();
ầ
System.out.println("count l n 2= "+BienTinh.count); System.out.println("b2.a = "+b2.a); ấ ả ố ượ }
ế
}//bi n count dùng chung cho t t c các đ i t ng (b1 và b2). o Ph ươ ứ ng th c static: § Ch ph thu c và l p mà không ph thu c vào đ i ụ ớ ộ ố ộ ượ ỉ ụ
ng. t § Ph ươ ự ế ứ ằ ng th c static có th truy c p tr c ti p b ng ầ ậ
ể
ấ ỳ ố ượ tên class mà không c n b t k đ i t ng nào. ớ ươ Cú pháp : Tên_l p.Tên_ph ứ
ng_th c_static § Ph ươ ứ ể ậ ỉ ng th c static ch có th truy c p vào các public static int getNum(){ ể ậ thành ph n static mà không th truy c p vào các
thành ph n không static. } ầ
ầ
return num; ượ ế
o Thay th cho đ i
ệ ạ
ng hi n t ố
i. t ọ
o G i các public class SinhVien{
float DiemTB;
String HoTen;
ủ ớ
// Contructor c a l p A
public SinhVien(float so, String ten){ this.DiemTB = so;
this.HoTen = ten; constructor khác
ủ ố ượ
c a đ i t ng. }
float tinhDiemTB()
{ // … }
void hienThi(){ this.tinhDiemTB() } } o Khai báo: ConNguoi[] SV = new ConNguoi[10]; o Kh i t o: ở ạ for(int i=0; I < SV.length; i++){ SV[i] = new ConNguoi(); } o Xây dựng lớp NhanVien theo các yêu cầu sau: § Các thuộc tính: họ tên, HSL, LCB và số nhân viên.
Trong đó LCB và số nhân viên là biến kiểu static,
LCB được khởi tạo mặc nhiên là 540000, số nhân
viên được khởi tạo giá trị là = 0. § Các hàm tạo: NhanVien() và NhanVien(hoTen,HSL). Mỗi khi có một đối tượng
được tạo thì thuộc tính số nhân viên tăng lên 1. § Các phương thức: tangHSL(HSL mới): Tăng hệ số lương của một nhân viên, tangLCB(LCB mới):
Tăng lương cơ bản, tinhLuong(): Tính lương NV
theo công thức: Lương = HSL*LCB và inNV(): In
thông tin về nhân viên và lương của nhân viên ủ ậ ơ ả o Đ h tr nh ng nguyên t c c b n c a l p trình
t c các ngôn ng l p
ể ữ
ố ượ ắ
ấ ả ng (OOP), t ng đ i t § Tính đóng gói (Encapsulation) § Tính đa hình (Polymorphimsm) ể ả ặ ể ỗ ợ
ữ ậ
ướ
h
ề
trình OOP, k c Java đ u có ba đ c đi m chung: § Tính k th a (Inheritance) ế ừ ầ
ữ ế ầ ấ
ộ
ng gi u đi m t ph n các chi
ố
t cài đ t và ch công b ra ngoài nh ng gì c n ố ượ
o Giúp cho các đ i t
ỉ
ổ ớ ặ
ố ể ố ượ ti
công b đ trao đ i v i các đ i t ng khác. o Đ i t ố ượ ố ỗ ợ ộ
ng là m t thành t h tr tính đóng gói. ị ơ ữ ố ượ ữ ự o Đ n v đóng gói c b n c a ngôn ng java là class.
ng.
ủ
ng là nh ng th hi n (instances) c a ố ượ ể ệ ữ
ộ ơ ả ủ
ể
Java dùng class đ xây d ng nh ng đ i t
ữ
Nh ng đ i t
m t class. class DongVat{ void method_1( ){ System.out.println(“Day la con vat”);} }
class ConMeo extends DongVat { void method_1( ) {System.out.println(“Day la con meo”);} }
class C { ầ ử ể ạ ộ public static void main(String[] args) {
ki u A ả
// T o m t m ng 2 ph n t
DongVat arr_DV = new DongVat[2];
ConMeo meo1 = new ConMeo();
arr_DV[0] = meo1;
DongVat dv2;
for (int i=0; i<2; i++) {
dv2 = arr_DV[i];
dv2.method_1(); } } } o ng trình trên: ế ớ ẽ ọ ệ ứ ươ ệ
ng th c ự
dv2.method_1() s g i th c hi n ph
ủ ớ
method_1 c a l p ConMeo.
ể
ế ớ § V i i = 1 thì bi n dv2 có ki u là DongVat, và l nh ự ẽ ọ ệ ứ ươ ệ
ng th c ể ể ậ o Đ i t ng dv2 có th nh n ki u DongVat hay dv2.method_1() s g i th c hi n ph
ủ ớ
method_1 c a l p DongVat.
ố ượ
ConMeo. ng thu c o Hay nói các khác, m t bi n đ i t
ế o Ng ế ủ l p con không th tham . chi uế đ n b t k đ i t o Cha tham chi u đ n đ i t ố ượ ế ế ng con (tính đa hình) i thì không. o Ng
o Con k th a thu c tính, ph ộ ươ ứ ủ
ng th c c a cha ượ ạ
c l
ế ừ
ế ừ (tính k th a) ộ ớ o M t l p con (subclass) có th k th a t t c nh ng ứ ủ ươ ể ế ừ ấ ả ữ
ộ ớ
ng th c c a m t l p khác (siêu ữ ệ
vùng d li u và ph
ớ
l p superclass). ọ ớ ấ ẫ ớ o Khi đó chúng ta g i l p m i là l p d n xu t (derived ừ ớ ớ
l p cũ (superclass). ớ ớ o M t l p siêu l p tr c ti p (immediate supperclass): L p
ậ ớ
A. v y l p A ượ ế ừ ừ
c k th a t ừ ẫ ộ class) t
ự ế
ộ ớ
ớ
ế ừ ừ
C k th a t
B mà l p B đ
ự ế ủ
ớ
ộ
là m t siêu l p tr c ti p c a C.
ấ
ể ỉ ớ
extends đ ch l p d n xu t.
khóa
o Dùng t
class A extends B{
ớ
// n i dung l p } • Thực tế, lớp con thường được mở rộng để chứa
nhiều thông tin chi tiết và nhiều chức năng hơn
so với lớp cha của nó. • Truy xuất superclass từ subclass: Dùng từ khóa super – Từ khóa super được dùng để thay cho superclass, tương tự như this thay cho đối tượng được gọi. – super được dùng để: gọi 1 hàm tạo (contructor) hoặc một phương thức của superclass • Cách gọi: super() hoặc super(tham_số) • Lưu ý: Lệnh trên phải được đặt tại dòng đầu
tiên trong hàm tạo của lớp con và là cách duy
nhất để gọi 1 hàm tạo của lớp cha. ườ Khai báo t ng minh ườ Khai báo không t ng minh • Cách gọi: super.method(tham_số) • Ví dụ: double findVolume() { return super.findArea() * length; } ậ ượ ớ ế ừ o Tính k th a giúp cho các l p con nh n đ
ng th c c các
ủ ớ ươ ứ public và protected c a l p ươ ế ể ờ ứ ng th c ằ ồ ộ
thu c tính/ph
cha.
ồ
o Đ ng th i cũng có th thay th các ph
ủ ớ
c a l p cha b ng cách khai báo ch ng. public class XeGa extends XeMay{ public XeGa( ) { }
public XeGa(String s_nhasx, String s_model, f_chiphisx, int
i_thoigiansx);{ this.nhasx = s_nhasx;
this.model = s_model;
this.chiphisx = f_chiphisx;
this.thoigiansx = i_thoigiansx;
this.so = 0; }
public float tinhGiaBan( ) { return 2.5 * chiphisx; } } o o o ớ ằ ẫ ấ
ớ không th t o d n xu t
ể ạ ừ ượ ớ ng ầ ươ public
final: L p h ng, l p
ể
(không th có con).
abstract: L p tr u t
§ Không có khai báo các thành ph n và các ph ng th c. ứ
ớ § L p d n xu t s khai báo, cài đ t c th các
ng. ặ ụ ể
ừ ượ ấ ẽ
ươ ộ ẫ
thu c tính, ph ứ ủ ớ
ng th c c a l p tr u t abstract class DongVat {
abstract void hienThi(); }
public class ConMeo extends DongVat{ public void hienThi(){ System.out.println(“Day la con meo”); } }
public class ConCho extends DongVat{ public void hienThi(){ System.out.println(“Day la con cho”); } } o Các ph ươ ứ ượ ượ ề ố
c khai báo dùng các ti n t
ừ
c khai báo là tr u ng th c đ
private và static thì không đ
ượ
t ế ừ ừ ớ
l p trù t
ươ abstract.
o T t c các l p k th a t
ớ
ạ ấ ả
t c các ph
i t ượ
ứ ừ ớ
ng th c t ả
ng ph i
ừ
l p tr u ng
ấ ả
ị
đ nh nghĩa l
ượ
ng.
t o ỏ ư o ộ ọ ướ ủ ệ ố
ng tr o ớ ấ
ng.
ươ ươ ng th c ứ finalize() là m t ph
ặ ẵ
ươ ứ ặ
ệ
ng th c đ c bi
t
ệ ố
ẹ
ộ ố ượ ộ
ớ
ướ ủ ể ữ ệ
Java không có ki u d li u con tr nh trong C.
ẹ
ẹ
ẽ ọ
Java có m t trình d n d p h th ng s d n d p vùng
ộ ố
ố ượ
nh c p phát cho các đ i t
c khi h y m t đ i
ượ
t
Ph
ượ
đ
ẽ ọ
s g i ph c cài đ t s n cho các l p. Trình d n d p h th ng
ng. ọ
c khi h y m t đ i t ứ
ng th c này tr class A{ ộ // Khai báo các thu c tính
public void method_1( ) { // … }
protected void finalize(){
ể
ể
// Có th dùng đ đóng t
ướ
ơ ở ữ ệ
// vào c s d li u tr ế ố
ấ ả
t c các k t n i
ủ ố ượ
c khi h y đ i t ng. } } o Gói (package)
ệ
o Giao di n (interface) public abstract class Shape extends Object{ public double dienTich() { return 0.0; }
public abstract String getName(); } public class Point extends Shape{ ộ ủ ể ọ
protected int x, y; // T a đ x, y c a 1 đi m
public Point( ){ setPoint( 0, 0 ); }
public Point(int xCoordinate, int yCoordinate){
setPoint( xCoordinate, yCoordinate ); }
public void setPoint( int xCoordinate, int yCoordinate ){ x = xCoordinate; y = yCoordinate; }
public String toString(){ return "[" + x + ", " + y + "]"; } ặ ừ ượ //cài đ t ph ứ
ng th c tr u t ủ ớ
ng c a l p cha ươ
public String getName(){
return "Point"; } } ủ ớ ầ public class Circle extends Point {
protected double radius;
ọ ế
public Circle(){ //ng m g i đ n constructor c a l p cha setRadius( 0 ); ủ ớ ọ }
public Circle( double circleRadius, int xCoordinate, int yCoordinate ){
super( xCoordinate, yCoordinate ); // g i constructor c a l p cha
setRadius( circleRadius ); }
public void setRadius( double circleRadius ){ radius = ( circleRadius >= 0 ? circleRadius:0 ); }
public String toString(){ return "Center = " + super.toString() + "; Radius = " + radius; } ả ề ủ public String getName() // tr v tên c a shape{ return "Circle"; } }Phương thức của lớp
Phương thức của lớp
ở ạ ố ượ
ể
ng (th
Phân biệt kiểu cơ sở và kiểu đối
tượng
Phân biệt kiểu cơ sở và kiểu đối
tượng
Truy xuất đối tượng
o Gọi phương thức của đối tượng:
bienDoiTuong.tenPhuongthuc
ự
ạ
Hàm xây d ng/ Hàm t o
(Constructor)
ươ
ộ
o Là m t lo i
đ ng
o Dùng g i t
ạ
ự
Hàm xây d ng/ Hàm t o
(Constructor)
o L u ý:ư
thông th
ủ
làm ch mã ngu n ch
ộ
báo m t constructor cho l p.
ộ ớ
ẽ
ự
ạ
Hàm xây d ng/ Hàm t o
(Constructor)
ố ố
ạ
o Hàm t o có đ i s
ạ
ự
Hàm xây d ng/ Hàm t o
(Constructor)
public class ConNguoi {
public CoNguoi() { }
public ConNguoi(String s_HoTen, String s_CMND){
ồ
ươ
Ch ng ph
ứ
ng th c
ế
ằ
ươ
Các bi n, h ng, ph
ứ
ng th c tĩnh
ố ượ .Tên_bi nế
ế
ằ
ươ
Các bi n, h ng, ph
ứ
ng th c tĩnh
ế
ằ
ươ
Các bi n, h ng, ph
ứ
ng th c tĩnh
ế
ằ
ươ
Các bi n, h ng, ph
ứ
ng th c tĩnh
Từ khóa this
Mảng đối tượng
Mảng đối tượng
Ví dụ
Ví dụ
Đặc điểm OOP trong Java
Tính đóng gói
Tính đa hình
Tính đa hình
ặ
ạ
ươ
Vòng l p for trong đo n ch
ể
§ V i i = 0 thì bi n dv2 có ki u là ConMeo, và l nh
ớ
ộ l p cha
ủ ấ
ng nào c a b t
ố ượ
ế
ấ ỳ ố ượ
ể
có th tham chi u đ n b t k đ i t
ớ
k ỳ l p con
ượ ạ
c l
ế
ộ
ế
ớ
nào c a ủ l p cha
ớ
ộ
i m t bi n c a
ấ ỳ ố ượ
ng nào c a
ể
ớ
ủ l p cha
Tính đa hình
Tính kế thừa
Tính kế thừa
Tính kế thừa
Gọi hàm khởi tạo của Superclass
Gọi phương thức của Superclass
Khai báo chồng phương thức
Khai báo chồng phương thức
Ba tiền tố trong kế thừa
Lớp trừu tượng
Lớp trừu tượng
Phương thức Finalize
Các thành phần khác
Ví dụ về đa hình
Ví dụ về đa hình
Ví dụ về đa hình