P. 1
Java LaptrinhOOP

Java LaptrinhOOP

4.0

|Views: 194|Likes:
Được xuất bản bởiapi-3834030

More info:

Published by: api-3834030 on Oct 18, 2008
Bản quyền:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

03/18/2014

pdf

text

original

Lập trình hướng đối tượng trong Java

Chương : LẬP TRINH HƯỚNG ĐỐI TƯỢNG TRONG JAVA
Java là mộ t ngôn ngữ lập trình hướng đối tượng. Nếu bạn chưa bao giờ ùng mộ t ngôn
ngữ lập trình hướng đối tượng trước đâ!" bạn cần pha#i hiê#u các $hái niệm %au : lập trình hướng
đối tượng &'b()ct 'ri)nt) *rogramming+ là gì , đối tượng &'b()ct+" lớp &cla%%+ là gì" mố i -uan
hệ giữa đối tượng và lớp" gơ#i thông điệp &.)%%ag)%+ đến các đối tượng là gì ,
/. 012́/ N/3̣. 45̣* 67/N1 189́N: ;<́/ 689̣N:
1. Lập trình hứn! "#́i tựn! $O%&'(t Ori'nt') Pr*!r+,,in!-
.ỗi mộ t chương trình má! tính đều gồm có = phần : phần mã lệnh và phần ữ liệu. .ột
%ố chương trình đ>̣t trọng tâm ơ# phần mã lệnh" %ố $hác đ>̣t trọng tâm ơ# phần ữ liệu. 6ừ đó ẫn
đến = mô hình -u!ết định nên cấu trúc cu#a chương trình : mộ t tra# lời cho câu ho#i ?;iều gì đang
@a#! raA" và một cho ?Cái gì đang chịu tác độngA. .ô hình B gọi là mô hình hướng @ư# l!́ " nó mô
ta# như là một chương trình bao gồm mộ t chuỗi các bước thực hiện &mã lệnh+. Nhưng $hi chương
trình càng ngà! càng lớn và phức tạp thì $hó $h>n đê# %ư# ụng mô hình thứ nhất.
Cì vậ! mô hình thứ = được đưa ra" đó là mô hình hướng đối tượng. Chương trình cu#a bạn
%)̃ @â! ựng ựa vào ữ liệu và phần giao iện được định nghĩa cho phần ữ liệu đó. .ô hình
nà! được mô ta# như là ữ liệu điều $hiê#n tru! @uất đối với mã lệnh.
Ngôn ngữ lập trình hướng đối tượng có các $ha# n>ng %au :
D .ô pho#ng thế giới thực mộ t cách tự nhiên bơ#i các đối tượng và mối -uan hệ giữa chúng" thuận
tiện cho việc thiết $ế hệ thống phức tạp
D 6hừa $ế mã có %>̃n một cách ễ àng" giúp tiết $iệm công %ức và nâng cao n>ng %uất cu#a người
lập trình" ễ ba#o trì" ễ nâng cấp" mơ# rộng
.. Trừ/ tựn! h*+́ $A%0tr+(ti*n-
Con người đã đơn gia#n hoá các vấn đề phức tạp thông -ua %ự trừu tượng hoá. Cí ụ"
người %ư# ụng má! tính $hông nhìn má! tính mộ t cách phức tạp. Nhờ %ự trừu tượng hoá mà
người ta có thê# %ư# ụng má! tính mà $hông -uan tâm đến cấu trúc chi tiết bên trong má! tính.
1ọ chi# %ư# ụng chúng như là mộ t thực thê#
Cách tốt nhất đê# n>́m vững $!̃ thuật trừu tượng là ùng hệ thống phân cấp. ;iều nà! cho
ph)́p bạn phân lớp các thành phần có !́ nghĩa cu#a ca# hệ thống phức tạp" chia nho# chúng thành
những phần đơn gia#n có thê# -ua#n l!́ được. Nhìn bên ngoài má! tính là mộ t đối tượng" nếu nhìn
%âu hơn một cấp" má! tính bao gồm một %ố bộ phận : hộp điều $hiê#n" màn hình" bàn phím"
chuột..." các bộ phận nà! lại bao gồm các bộ phận nho# hơn" ví ụ như hộp điều $hiê#n có ba#ng
mạ ch chính chứa C*E" các mạ ch giao tiếp g>́n trên ba#ng mạch chính" đĩa cứng" ô# đĩa mềmF
Nhờ %ự trừu tượng hoá mà bạn $hông -uan tâm đến chi tiết từng ba#ng mạ ch" mà chi# -uan tâm
mố i -uan hệ" giao tiếp giữa các bộ phận. .ột mạch giao tiếp ù có chức n>ng l! $!̀ thế nào đi
nữa" bạn có thê# %ư# ụng $hông mấ! $hó $h>n nếu được ấn vừa v>̣n vào $h) c>́m trên ba#ng mạch
chính.
Gự phân cấp trừu tượng mộ t hệ thống phức tạp có thê# áp ụng cho các chương trình má!
tính. *hần ữ liệu từ mộ t chương trình hướng @ư# l!́ $inh điê#n có thê# trừu tượng hoá thành các đối
tượng thành phần. Hã ! các @ư# l!́ trơ# thành các thông điệp giữa các đối tượng. Cì thế các đối
tượng cần có hoạt động đ>̣c trưng riêng. Iạn có thê# coi các đối tượng nà! như những thực thê#
độc lập tiếp nhận các !êu cầu từ bên ngoài. ;â! là phần cốt lõi cu#a lập trình hướng đối tượng.
//. C9 C13́ 67/3#N 012/ .< 1/N1 189́N: ;<́/ 689̣ N:
6ất ca# các ngôn ngữ lập trình hướng đối tượng đều có các cơ chế cho ph)́p bạn triê#n $hai
các mô hình hướng đối tượng. ;ó là tính đóng gói" $ế thừa" và tính đa hình.
B
Lập trình hướng đối tượng trong Java
1. Tính "*́n! !*́i $1n(+p0/2+ti*n-
;â! là cơ chế ùng một vo# bọc $ết hợp phần ữ liệu và các thao tác trên ữ liệu đó &phần
mã lệnh+ thành mộ t thê# thống nhất" tạo nên %ự an toàn" tránh việc %ư# ụng $hông đúng thiết $ế"
ba#o vệ cho mã lệnh và ữ liệu chống việc tru! @uất từ những đoạn mã lệnh bên ngoài.
6rong Java tính đóng gói thê# hiện -ua $hái niệm lớp &Cla%%+. 4ớp là hạt nhân cu#a Java"
tạo nền ta#ng cho lập trình hướng đối tượng trong Java. Nó định nghĩa ữ liệu và các hành vi cu#a
nó &ữ liệu và mã lệnh+" gọi là các thành viên cu#a lớp" ùng chung cho các đối tượng cùng loại.
6ừ %ự phân tích hệ thống" người ta trừu tượng nên các lớp. Gau đó các đối tượng được tạo ra th)o
$huôn mẫu cu#a lớp. .ỗi đối tượng thuộc một lớp có ữ liệu và hành vi định nghĩa cho lớp đó"
giống như là %inh ra từ một $huôn đúc cu#a lớp đó. Cì vậ! mà lớp là $huôn mẫ u cu#a đối tượng"
đối tượng là thê# hiện cu#a một lớp. 4ớp là cấu trúc logic" còn đối tượng là cấu trúc vật l!́ . Hữ liệu
định nghĩa trong lớp gọi là biến" mã lệnh gọi là phương thức. *hương thức định nghĩa cho việc
%ư# ụng ữ liệu như thế nào. ;iều nà! có nghĩa là hoạt động cu#a lớp được định nghĩa thông -ua
phương thức.
Các đ>̣c trưng cu#a lớp gồm có hai phần chính : thuộc tính &2ttribut)+ và hành vi
&I)havior+. :ia# %ư# bạn pha#i tạo ra giao iện với người ùng và cần có những nút nhấn &Iutton+.
6hế thì trước hết bạn @â! ựng lớp Iutton với các thuộc tính như nhãn ghi trên nút" chiều rộng"
chiều cao" màu cu#a nút" đồng thời -u! định hành vi cu#a nút nhấn" nghĩa là nút nhấn cần pha#n ứng
như thế nào $hi được chọn" phát !êu cầu gì" có đô#i màu ha! nhấp nhá! chi $hông. Cới lớp
Iutton như vậ!" bạn có thê# tạo ra nhanh chóng những nút nhấn cụ thê# phục vụ cho các mục đích
$hác nhau
:ói là $!̃ thuật cu#a Java" ùng đê# phân hoạch $hông gian tên lớp" giao iện thành
những vùng ễ -ua#n l!́ hơn" thê# hiện tính đóng gói cu#a Java.
.. Tính 34́ thừ+ $Inh'rit+n('-
6ính $ế thừa là $ha# n>ng @â! ựng các lớp mới từ các lớp đã có. 6ính đóng gói cũng tác
động đến tính $ế thừa. 0hi lớp đóng gói một %ố ữ liệu và phương thức" lớp mới %)̃ $ế thừa mọi
cấu trúc ữ liệu và các phương thức cu#a lớp mà nó $ế thừa. Ngoài ra nó có thê# bô# %ung các ữ
liệu và các phương thức cu#a riêng mì nh.
Nó rất -uan trọng vì nó ứng ụng cho $hái niệm câ! phân cấp &mô hình 6opHoJn+.
0hông %ư# ụng câ! phân lớp" mỗ i lớp pha#i định nghĩa tất ca# các ữ liệu và phương thức cu#a
mì nh mộ t cách rõ ràng. Nếu %ư# ụng %ự $ế thừa" mỗ i lớp chi# cần định nghĩa thêm những đ>̣c
trưng cu#a mì nh.
Ví dụ : K) có thê# @)m như mộ t lớp và các @) *)rgout" IL." Hr)am là các đối tượng cu#a lớp @).
Các @) đều có thê# lái đi" ừng lại... 6ừ lớp @) ơ# trên" ta có thê# @â! ựng các lớp @) đạp" @) ôtô.
K) ôtô có thêm má! và có thê# tự $hơ#i độngF
5. Tính "+ hình $P*26,*rphi0,-
0hi mộ t lớp được $ế thừa từ các lớp tô# tiên thì nó có thê# tha! đô#i cách thức làm việc cu#a
lớp tô# tiên trong một %ố phương thức nào đó &nhưng tên" $iê#u tra# về" anh %ách tham đối cu#a
phương thức thì vẫn giữ ngu!ên+. ;iều nà! gọi là viết chồng. Như vậ! với mộ t tên phương thức"
chương trình có thê# có các hành động $hác nhau tù! thuộc vào lớp cu#a đối tượng gọi phương
thức. ;ó là tính đa hình
Ví dụ : với mộ t phương thức chạ!" @) ôtô" @) má! có thê# t>ng ga" còn @) đạp thì pha#i đạpF
6ính đa hình còn thê# hiện ơ# việc một giao iện có thê# %ư# ụng cho các hoạt động cu#a mộ t
lớp tô#ng -uát" ha! còn gọi là ?một giao iện" nhiều phương thứcA. Có nghĩa là có thê# thiết $ế một
giao iện tô#ng -uát cho một nhóm các hành vi liên -uan. ;iều nà! gia#m thiê#u %ự phức tạp b>̀ng
cách cho ph)́p mộ t giao iện có thê# %ư# ụng cho các hoạt động cu#a mộ t lớp tô#ng -uát. 6rình biên
ịch %)̃ @ác định hoạt động cụ thê# nào %)̃ được thi hành tù! th)o điều $iện. Iạn chi# cần nhớ các
giao iện cu#a lớp tô#ng -uát và %ư# ụng nó.
=
Lập trình hướng đối tượng trong Java
Gự $ết hợp đúng đ>́n giữa : đa hình" đóng gói và $ế thừa tạo nên mộ t môi trường lập trình
có $ha# n>ng phát triê#n tốt hơn rất nhiều %o với môi trường $hông hỗ trợ hướng đối tượng. .ột
câ! phân cấp lớp thiết $ế tốt là điều c>n ba#n cho việc %ư# ụng lại những đoạn mã lệnh mà bạn đã
tốn công %ức nhiều cho việc phát triê#n và $iê#m tra. 6ính đóng gói cho ph)́p bạn %ư# ụng các đối
tượng và ra lệnh thi hành tới chúng mà $hông phá vỡ cấu trúc các đoạn mã lệnh đã ba#o vệ bơ#i
giao iện cu#a các lớp. Gự đa hình cho ph)́p bạn tạo ra những đoạn mã lệnh gọn gàng" ễ đọc" ễ
hiê#u và có tính ô#n định.
Java là ngôn ngữ lập trình hướng đối tượng nên có đầ! đu# các tính n>ng trên" thư
viện lớp Java được cung cấp $há đầ! đu# cho người lập trình đê# b>́t đầu mộ t ự án mới
M
Đối tượng và lớp, mảng
Chương : ĐỐI TƯỢNG VÀ LỚP7 8A9NG
/. K5N H8̣N: 49́*
0hi định nghĩa mộ t lớp" bạn chi# ra thuộc tính mà nó chứa được thê# hiện b>̀ng biến
&.)mb)r Cariabl)+ và hành vi được thê# hiện bơ#i hàm &.)tho+
Các biến định nghĩa bên trong một lớp gọi là các biến thành viên &.)mb)r Cariabl)%+.
.ã lệnh chứa trong các phương thức &.)tho+. Các phương thức và biến định nghĩa trong lớp
gọi chung là thành phần cu#a lớp. 6rong hầu hết các lớp" các biến thê# hiện được tru! cập bơ#i các
phương thức định nghĩa trong lớp đó. Cì vậ!" chính các phương thức -u!ế t định ữ liệu cu#a lớp
có thê# ùng như thế nào. 4ớp định nghĩa một $iê#u ữ liệu mới" ùng đê# tạo các đối tượng thuộc
$iê#u đó.
Hạng đầ! đu# cu#a một định nghĩa lớp như %au :
:p/%2i(; 4ớp được tru! @uất chung cho các *ac$ag)
$hác" m>̣ c định chi# có các đoạn mã trong
cùng một gói mới có -u!ền tru! @uất nó
:+%0tr+(t; 4ớp trừu tượng" $hông thê# $hơ#i tạo
:<in+2; 4ớp h>̀ng $hông có lớp con" $hông $ế thừa
(2+00 ClassName 6ên lớp
:'=t'n)0 SuperClass; 0ế thừa lớp cha Gup)rCla%%
:i,p2','nt0 Interfaces; :iao iện được cài đ>̣t bơ#i Cla%%
> ??8',%'r V+ri+%2'0 @'(2+r+ti*n0 0hai báo các biến
?? 8'th*)0 @'(2+r+ti*n0 0hai báo các phương thức
A
Ví dụ : 6ạo mộ t lớp Io@ đơn gia#n với ba biến : Jith" h)ight" )pth
OP ;ịnh nghĩa lớp
PO
cla%% Io@ Q
oubl) JithR
oubl) h)ightR
oubl) )pthR
S
//. 62̣' ;<́/ 689̣ N:
1. Bh+i %+́* "#́i tựn!
;ê# có được các đối tượng cu#a mộ t lớp pha#i -ua hai giai đoạn :
 ClassName ObjectName;
Ví dụ : Io@ m!Io@
0hai báo biến m!Io@ có $iê#u lớp Io@. 0hai báo nà! thực ra $hông cấp phát $!́ ức đu#
chứa đối tượng thuộc lớp Io@" mà chi# tạo ra -u! chiếu tro# đến đối tượng Io@. Gau câu lệnh nà!"
-u! chiếu m!Io@ @uất hiện trên $!́ ức chứa giá trị null chi# ra r>̀ng nó chưa tro# đến một đối tượng
thực tế nào
0hác với câu lệnh $hai báo biến $iê#u %ơ cấp là ành chỗ trên $!́ ức đu# chứa mộ t
trị thuộc $iê#u đó :
Ví dụ : int iR
Gau câu lệnh nà!" biến ngu!ên i hình thành.
 Gau đó" đê# thực %ự tạo ra một đối tượng và gán địa chi# cu#a đối tượng cho biến
T
Đối tượng và lớp, mảng
nà!" ùng toán tư# n)J
ObjectName C n'D ClassName();
Ví dụ : m!Io@ U n)J Io@&+R
 Có thê# $ết hợp ca# hai bước trên vào mộ t câu lệnh :
ClassName ObjectName = n'D ClassName();
Ví dụ : Io@ m!Io@ U n)J Io@&+R
Io@ m!Io@= U m!Io@R
m!Io@= tham chiếu đến cùng đối tượng mà m!Io@ tham chiếu
.. E+́(h tr/6 =/ất th+̀nh phần (/9+ 2́p
 Iiến $hai báo trong định nghĩa lớp gồm có hai loại :
D Iiến đối tượng &/n%tanc) Cariabl) ha! 'b()ct Cariabl)+ : chi# thuộc tính đối tượng" $hi tru! @uất
pha#i $hơ#i tạo đối tượng
V Cách $hai báo biến đối tượng :
Type InstanceVar;
V Cách tru! cập biến đối tượng :
ObjectName.InstanceVar
D Iiến lớp &Cla%% Cariabl)+ : về ba#n chất là biến toàn cục" là biến tĩnh được tạo lập mộ t lần cùng
với lớp" ùng chung cho mọ i đối tượng thuộc lớp" $hi tru! @uất $hông cần $hơ#i tạo đối tượng" đê#
trao đô#i thông tin cu#a các đối tượng cùng lớp
V Cách $hai báo biến lớp :
0t+ti( Type ClassVar;
V Cách tru! cập biến lớp :
ClassName.ClassVar
 1àm $hai báo trong định nghĩa lớp gồm có hai loại :
D 1àm đối tượng &'b()ct .)tho+ : cách tru! @uất hàm đối tượng như biến đối tượng
ObjectName.ObjectMethod$arameter!"#st-
D 1àm lớp &Cla%% .)tho+ : thông thường một thành phần cu#a lớp chi# tru! @uất trong %ự
liên $ết với một đối tượng thuộc lớp cu#a nó. 6u! nhiên" có thê# tạo ra mộ t thành phần mà có thê#
ùng một độc lập một mình" $hông cần tham chiếu đến mộ t đối tượng cụ thê#" có thê# được tru!
@uất trước $hi bất $!̀ đối tượng nào cu#a lớp đó được tạo ra" b>̀ng cách đ>̣t trước $hai báo cu#a nó
từ $hoá %tatic. Cách tru! @uất hàm lớp :
ClassName.ClassMethod$arameter!"#st-
Các hàm toán học cu#a lớp .ath trong *ac$ag) Java.4ang là hàm lớp nên $hi gọi $hông cần pha#i
$hơ#i tạo đối tượng
Ví dụ : oubl) a U .ath.%-rt&TWM.=X+R
Ví dụ 1: cla%% Iai6ho Q
%tatic int iR OO Iiến lớp
Gtring %R OO Iiến đối tượng
Iai6ho&Gtring %%+ Q OO 1àm $hơ#i tạo
% U %%R
iVVR
W
m!Io@
m!Io@=
Jith
h)ight
)pth
Io@ 'b()ct
Đối tượng và lớp, mảng
S
voi cont)nt& + Q
G!%t)m.out.println&%+R
S
S
cla%% EngHung Q
public %tatic voi main&Gtring arg%YZ+Q
Iai6ho pB U n)J Iai6ho&?Chi co thu!)n moi hi)uA+R
Iai6ho p= U n)J Iai6ho&?Ii)n m)nh mong nhuong naoA+R
pB.cont)nt&+R
p=.cont)nt&+R
G!%t)m.out.println&?Go cau tho la : ?VIai6ho.i+R
S
S
0hi tạo đối tượng pB" p= bơ#i toán tư# n)J" hàm ựng Iai6ho&+ được gọi" và i t>ng lên B
Ví dụ :
cla%% Iai6ho= Q
%tatic int iR
Gtring %R
Iai6ho=&Gtring %%+ Q OO 1àm $hơ#i tạo
% U %%R iVVR
S
%tatic int numb)r&+ Q OO 1àm lớp
r)turn iR
S
Gtring cont)nt&+ Q OO 1àm đối tượng
r)turn %R
S
S
cla%% EngHung= Q
public %tatic voi main &Gtring arg%YZ+ Q
G!%t)m.out.println&?Iai tho co ?VIai6ho=.numb)r&+V? cauA+R
Iai6ho=.pB U n)J Iai6ho=&?Chi co thu!)n moi hi)uA+R
Iai6ho=.p= U n)J Iai6ho=&?Ii)n m)nh mong nhuong naoA+R
G!%t)m.out.println&?Iai tho co ?VIai6ho=.numb)r&+V? cauA+R
G!%t)m.out.println&?Cau tho[n?VpB.cont)nt&+.toEpp)rCa%)&+VA[ncoA V
pB.cont)nt&+.l)ngth&+ VA $! tuA+R
G!%t)m.out.println&?6u [Atinh !)u[? bat au %au $! tu thu?V
p=.cont)nt&+.in)@'\&?tinh !)uA+VA trong cau[nAV
p=.cont)nt&+.toEpp)rCa%)&++R
S
S
:ọi hàm lớp Iai6ho=.numb)r&+ lúc chưa gọi hàm ựng Iai6ho= đê# $hơ#i tạo đối tượng %)̃ cho trị
]
pB.cont)nt&+ tra# về mộ t đối tượng Gtring
///. :/9́/ 61/3̣E C3̀ *189N: 61 8́ C
1. Bh+i %+́* phưn! thứ( $h+̀ ,-
Hạng tô#ng -uát cu#a một phương thức như %au :
^
Đối tượng và lớp, mảng
:acess; "i4̀/ 3hi49n tr/6 =/ất
:0t+ti(; h+̀ , 2́p
:+%0tr+(t; h+̀ , trừ/ tựn!
:<in+2; h+̀ , hF̀n!
:Type; MethodName$arameter!"#st- thr*D0 e$cept#ons >
?? G*)6 *< ,'th*)
A
D 6!p) : 0iê#u ữ liệu o hàm tra# về" có thê# là $iê#u bất $!̀ " $ê# ca# các $iê#u lớp o bạn tạo ra. Nếu
hàm $hông tra# về giá trị nào" $iê#u tra# về cu#a nó pha#i là voi.
D Các hàm có $iê#u tra# về $hông pha#i là voi %)̃ tra# về mộ t giá trị cho chương trình gọi nó ùng
ạng câu lệnh r)turn như %au :
r)turn biê#u thứcR
:iá trị cu#a biê#u thức được tính và tra# về cho hàm
D 6ất ca# thông tin bạn muốn tru!ền được gơ#i thông -ua tham %ố n>̀m trong hai ấu & + nga! %au
tên hàm. Nếu $hông có tham %ố vẫn pha#i có & +
*aram)t)rD4i%t : Hanh %ách tham đối phân cách bơ#i các ấu phâ#!" mỗi tham đối pha#i được $hai
báo $iê#u" có thê# là $iê#u bất $!̀ " có ạng : !"p# $aram#t#r1" !"p# $aram#t#r ...
.. Ph+̣ , Hi tr/6 =/ất th+̀nh phần (/9+ 2́p
Các điều $hiê#n tru! @uất cu#a Java là public" privat) và prot)ct). prot)ct) chi# áp ụng
$hi có liên -uan đến $ế thừa %)̃ @)́t đến %au
0hi bô# %ung tiền tố cho mộ t thành phần cu#a lớp &biến và hàm+ là :
D 6ừ $hoá public : chi# ra r>̀ng thành phần nà! có thê# được tru! @uất bơ#i bất $!̀ òng lệnh
nào ù ơ# trong ha! ngoài lớp mà nó $hai báo
D privat) : chi# có thê# được tru! @uất trong lớp cu#a nó" mọ i đoạn mã n>̀m ngoài lớp" $ê# ca# những
lớp con đều $hông có -u!ền tru! @uất
D 0hi $hông có điều $hiê#n tru! @uất nào được ùng" m>̣c nhiên là public nhưng chi# trong gói cu#a
nó" $hông thê# tru! @uất từ bên ngoài gói cu#a nó

5. Phưn! thứ( ,+in$-
0hi chạ! ứng ụng độc lập" bạn chi# tên Cla%% muốn chạ!" Java tìm gọi hàm main&+ trước
tiên trong Cla%% đó" phương thức main %)̃ điều $hiê#n chạ! các phương thức $hác.
Hạng tô#ng -uát cu#a phương thức main&+
p/%2i( 0t+ti( H*i) ,+in$Itrin! +r!0:;- >
?? G*)6 *< 8'th*)
A
D .ột chương trình chi# cần một lớp có phương thức main&+ gọi là lớp ứng ụng độc lập *rimar!
Cla%%.
D 6ừ $hoá %tatic cho ph)́p hàm main&+ được gọi $hi $hông cần $hơ#i tạo đối tượng. Cì main&+
được trình thông ịch cu#a Java gọi trước $hi bất $!̀ lớp nào được $hơ#i tạo
D 6ừ $hoá voi cho biết hàm main&+ $hông tra# về giá trị
D 6ừ $hoá public chi# ra r>̀ng hàm nà! được gọi bơ#i òng lệnh bên ngoài lớp $hi chương trình
$hơ#i động.
D 6ham đối Gtring arg%Y Z $hai báo tham %ố tên arg% thuộc lớp Gtring" chứa chuỗi $!́ tự. 6ham đối
nà! giữ các tham đối òng lệnh ùng $hi thi hành chương trình.
Ví dụ 1 :
cla%% CiHu Q
public %tatic voi main &Gtring arg%YZ+ Q
_
Đối tượng và lớp, mảng
\or &int iU]R i ` arg%.l)ngthR iVV+ Q
G!%t)m.out.println&?6ham oi thu ?ViVA: ?Varg%YiZ+R
S
S
S
0hi chạ! chương trình :
C:[a(ava CiHu 6hu tham oi ong l)nh ↵
6ham oi thu ] : 6hu
6ham oi thu B : tham ....
C:a(ava CiHu 6hu ?tham oiA ?ong l)nhA ↵
6ham oi thu ] : 6hu
6ham oi thu B : tham oi
6ham oi thu = : ong l)nh
Ví dụ :
cla%% CiHu=R
public %tatic voi main&Gtring arg%YZ+ Q
int %um U ]R
\loat avg U ]R
\or &int iU]R i`arg%.l)ngthRiVV+ Q
%um VU /nt)g)r.par%)/nt&arg%YiZ+R
S
G!%t)m.out.println&?6ong UAV%um+R
G!%t)m.out.println&?6rung binh UAV &\loat+ %umOarg%.l)ngth+R
S
S
0hi chạ! chương trình :
C:[a(ava CiHu= B = M ↵
6ong U ^
6rung binh U =
J. H+̀ , 3h9i t+̣* $E*n0tr/(t*r-
Có những thao tác cần thực hiện mỗi $hi đối tượng lần đầu tiên được tạo như $hơ#i tạo giá
trị cho các biến. Các công việc nà! có thê# làm tự động b>̀ng cách ùng hàm $hơ#i tạo.
1àm $hơ#i tạo có cùng tên với lớp mà nó thuộc về" chi# được tự động gọi bơ#i toán tư# n)J
$hi đối tượng thuộc lớp được tạo. 1àm $hơ#i tạo $hông có giá trị tra# về" $hi định nghĩa hàm có
thê# ghi voi ha! $hông ghi.
Ví dụ : D $ích thước hộp được $hơ#i tạo tự động $hi đối tượng được tạo.
cla%% Io@ Q
oubl) JithR
oubl) h)ightR
oubl) )pthR
oubl) volum)&+ Q
r)turn Jith P h)ight P )pthR
S
Io@&oubl) J" oubl) h" oubl) + Q
Jith U JR
h)ight U hR
)pth U R
S
S
X
Đối tượng và lớp, mảng
cla%% Io@H)mo Q
public %tatic voi main &Gtring arg%Y Z+ Q
Io@ m!Io@B U n)J Io@&B]"=]"BW+R
Io@ m!Io@= U n)J Io@&M"^"b+R
oubl) volR
vol U m!Io@B.volum)&+R
G!%t)m.out.println&?6hê# tích là : ?Vvol+R
vol U m!Io@=.volum)&+R
G!%t)m.out.println&?6hê# tích là : ?Vvol+R
S
S
D 0hi bạn $hông định nghĩa tường minh hàm $hơ#i tạo cho mộ t lớp" Java %)̃ tạo hàm $hơ#i
tạo m>̣c nhiên cho lớp đó. Cì vậ! các chương trình trước đó vẫn làm việc bình thường. 1àm $hơ#i
tạo m>̣ c nhiên $hông có anh %ách tham đối" tự động $hơ#i tạo tất ca# các biến cu#a đối tượng về trị
rỗng th)o các -u! ước m>̣ c định cu#a Java" trị ] cho $iê#u %ố" $!́ tự c[]d cho $iê#u $!́ tự char" trị
\al%) cho $iê#u bool)an" trị null cho các đối tượng
D 1àm $hơ#i tạo cũng có thê# được nạp chồng như hàm bình thường ̣&%)̃ nói rõ ơ# phần %au+ nghĩa là
ta được ph)́p định nghĩa nhiều hàm $hơ#i tạo $hác nhau ơ# anh %ách tham đối ha! $iê#u tham đối
K. H+̀ , h/9 6
Các đối tượng cấp phát động b>̀ng toán tư# n)J" $hi $hông tồn tại tham chiếu nào đến đối
tượng" đối tượng đó @)m như $hông còn cần đến nữa và bộ nhớ cho nó có thê# được tự động gia#i
phóng bơ#i bộ thu gom rác &garbag) coll)ctor+. 6rình thu gom rác hoạt động trong mộ t tu!ến đoạn
&6hr)a+ độc lập với chương trình cu#a bạn. Iạn $hông pha#i bận tâm gì đối với công việc nà!.
Gau nà! bạn %)̃ hiê#u rõ tu!ến đoạn là thế nào
6u! nhiên" Java cũng cho ph)́p ta viết hàm hu# !" có thê# cũng cần thiết cho những trường
hợp nào đó. 1àm hu# ! trong Java chi# được gọi bơ#i trình thu gom rác" o vậ! bạn $hó đoán trước
vào lúc nào hàm hu# ! %)̃ được gọi
Hạng hàm hu# ! như %au :
pr*t'(t') H*i) <in+2iL'$- >
?? G*)6 *< 8'th*)
A
M. Từ 3h*+́ thi0
Nếu biến được định nghĩa trong thân hàm" đó là biến cục bộ chi# tồn tại $hi hàm được
gọi. Nếu biến cục bộ như vậ! được đ>̣t tên trùng với biến đối tượng ho>̣c biến lớp" nó %)̃ ch)
$huất biến đối tượng ha! biến lớp trong thân hàm :
Ví dụ :
cla%% CiHu Q
int t)%t U B]R OO Iiến đối tượng
voi print6)%t&+ Q
int t)%t U =]R OO Iiến cục bộ
G!%t)m.out.println&?t)%t U ?Vt)%t+R OO /n biến cục bộ
S
public %tatic voi main&Gtring arg%YZ+ Q
CiHu a U n)J CiHu&+R
a.print6)%t&+R
S
S
6ừ $hoá thi% có thê# ùng bên trong bất cứ phương thức nào đê# tham chiếu đến đối tượng
b
Đối tượng và lớp, mảng
hiện hành" $hi biến đối tượng trùng tên với biến cục bộ.
Ví dụ : 6ha! òng lệnh trên :
G!%t)m.out.println&?t)%t U ?Vthi%.t)%t+R OO /n biến cục bộ" thi% chi# đối tượng a
N. N+̣p (h#̀n! h+̀ , $OH'r2*+)') 8'th*)0-
6rong cùng một lớp" Java cho ph)́p bạn định nghĩa nhiều hàm trùng tên với điều $iện các
hàm như vậ! pha#i có anh %ách tham đối $hác nhau" nghĩa là $hác nhau về %ố tham đối ho>̣c $iê#u
cu#a các tham đối. 0ha# n>ng như vậ! gọi là %ự nạp chồng hàm. Java chi# phân biệt hàm nà! với
hàm $hác ựa vào %ố tham đối và $iê#u cu#a các tham đối" bất chấp tên hàm và $iê#u cu#a $ết -ua# tra#
về.
Ví dụ :
OO .!7)ct.(ava
import (ava.aJt.*ointR
cla%% .!7)ct Q
int @B U ]R
int !B U ]R
int @= U ]R
int != U ]R
.!7)ct buil7)ct&int @B" int !B" int @=" int !=+ Q
thi%.@B U @BR
thi%.!B U !BR
thi%.@= U @=R
thi%.!= U !=R
r)turn thi%R
S
.!7)ct buil7)ct&*oint top4)\t" *oint bottom7ight+ Q
@B U top4)\t.@R
!B U top4)\t.!R
@= U bottom7ight.@R
!= U bottom7ight.!R
r)turn thi%R
S
.!7)ct buil7)ct&*oint top4)\t" int J" int h+ Q
@B U top4)\t.@R
!B U top4)\t.!R
@= U @BVJR
!= U !B V hR
r)turn thi%R
S
voi i%pla!&+ Q
G!%t)m.out.print&?Hoi tuong .!7)ct : `A V @B V ?" ?V!B+R
G!%t)m.out.println&?" ?V@=VA" ?V!=VAaA+R
S
S
6hật ra" trong gói aJt có %>̃n lớp 7)ctangl) chu!ên ùng đê# biê#u iễn hình chữ nhật. 4ớp
.!7)ct cu#a ta chi# ùng đê# minh hoạ cho $hái niệm nạp chồng hàm. 6rong lớp .!7)ct có những
hàm giúp bạn tạo ra đối tượng .!7)ct với những !ếu tố cho trước $hác nhau :
D Cho trước toạ độ góc trên trái @B" !B và toạ độ góc ưới pha#i @=" !=
D Cho trước góc trên trái và góc ưới pha#i cu#a hình chữ nhật ưới ạng đối tượng *oint
D Cho trước toạ độ góc trên trái cu#a hình chữ nhật ạng đối tượng *oint cùng chiều rộng" chiều
B]
Đối tượng và lớp, mảng
cao
Nhờ $ha# n>ng nạp chồng hàm" bạn chi# cần nhớ một tên hàm cho các hàm $hác nhau cùng
chức n>ng
Chương trình %ư# ụng lớp .!7)ct @â! ựng ơ# trên :
import (ava.aJt.*ointR
cla%% EngHung Q
public %tatic voi main&Gtring arg%YZ+ Q
.!7)ct r)ct U n)J .!7)ct&+R
r)ct.buil7)ct&=W"=W"W]"W]+R
r)ct.i%pla!&+R
r)ct.buil7)ct&n)J *oint&B]"B]+" n)J *oint&=]"=]++R
r)ct.i%pla!&+R
r)ct.buil7)ct&n)J *oint&B]"B]+" W]" W]+R
r)ct.i%pla!&+R
S
S
O. Tr/64̀n th+, "#́i
Java ùng ca# hai cách tru!ền tham đối : tru!ền b>̀ng giá trị và tru!ền b>̀ng tham chiếu"
tù! vào cái gì được tru!ền
D 0hi ta tru!ền mộ t $iê#u %ơ cấp cho phương thức" nó %)̃ tru!ền b>̀ng giá trị. Cì vậ! những
gì @a#! ra với tham đối trong phương thức" $hi ra $ho#i phương thức %)̃ hết tác ụng
D 0hi ta tru!ền mộ t đối tượng &$iê#u phức hợp+ cho phương thức" nó %)̃ tru!ền b>̀ng tham
chiếu. Cì vậ!" tha! đô#i ơ# đối tượng bên trong phương thức a#nh hươ#ng đến đối tượng ùng làm
tham đối.
Ví dụ 1 :
cla%% CiHu Q
voi tinh6oan&int i" int (+ Q
i PU =R
( OU =R
S
S
cla%% EngHung Q
public %tatic voi main&Gtring arg%+ Q
CiHu o U n)J CiHu&+R
int a U BW" b U =]R
G!%t)m.out.println&?a và b trước $hi gọi : ?VaV ? AVb+R
o.tinh6oan&a" b+R
G!%t)m.out.println&?a và b %au $hi gọi : ?VaVA ?Vb+R
S
S
0ết -ua# cu#a chương trình :
a và b trước $hi gọi : BW =]
a và b %au $hi gọi : BW =]
Ví dụ :
cla%% CiHu Q
int a" bR
CiHu &int i" int (+ Q
a U iR
b U (R
BB
Đối tượng và lớp, mảng
S
voi tinh6oan&CiHu o+ Q
o.a PU =R
].b OU =R
S
S
cla%% EngHung Q
public %tatic voi main&Gtring arg%YZ+ Q
CiHu o U n)J CiHu&BW" =]+R
G!%t)m.out.println&?o.a và o.b trước $hi gọi : ?Vo.aVA ?Vo.b+R
o.tinh6oan&o+R
G!%t)m.out.println&?o.a và o.b %au $hi gọi : ?Vo.aVA ?Vo.b+R
S
S
0ết -ua# chương trình :
o.a và o.b trước $hi gọi : BW =]
o.a và o.b %au $hi gọi : M] B]
/C. 49́* 03́ 61 8̀ 2
1. Bh+i %+́* 34́ thừ+
6a có thê# %ư# ụng tính $ế thừa tạo lớp tô#ng -uát có những đ>̣c tính chung đại iện cho
mộ t tập hợp các đối tượng có cùng mố i -uan hệ. Gau đó" lớp nà! có thê# được $ế thừa bơ#i một
ha! nhiều lớp $hác và những đ>̣c tính nà! trơ# thành những thành những đ>̣c tính cu#a lớp $ế thừa
D 4ớp được $ế thừa gọi là lớp cha &Gup)rCla%% : là lớp cha trực tiếp+
D 4ớp $ế thừa gọi là lớp con &GubCla%%+
4ớp con $ế thừa tất ca# các biến và hàm định nghĩa trong lớp cha
(2+00 ClassName '=t'n)0 SuperClass
> ??8',%'r V+ri+%2'0 @'(2+r+ti*n07 8'th*)0
A
D .>̣c ù vậ!" lớp con $hông thê# tru! @uất các thành phần được $hai báo privat) trong lớp cha
D .ột biến tham chiếu cu#a lớp cha có thê# gán đê# tham chiếu đến mộ t lớp con bất $!̀ ẫn @uất từ
lớp cha. 0hi một tham chiếu đến mộ t lớp con được gán cho biến tham chiếu $iê#u lớp cha" ta chi#
có -u!ề n tru! @uất những phần được định nghĩa bơ#i lớp cha.

.. Vi4́t (h#̀n! h+̀ , h+6 (h' 3h/ất h+̀ , $OH'rri)in! 8'th*)0-
6rong phân cấp lớp" $hi một hàm cu#a lớp con có cùng tên" và giống nhau về %ố lượng và
$iê#u tham đối cũng như $iê#u tra# về với một hàm ơ# lớp cha" thì hàm ơ# lớp con được gọi là viết
chồng hàm trong lớp cha. 0hi đó hàm cu#a lớp con %)̃ ch) $huất hàm thừa $ế từ lớp cha
6u! nhiên lớp con $hông được viết chồng hàm h>̀ng &có $hai báo \inal+ và hàm lớp trong
lớp cha.
Ví dụ : 6ất ca# các lớp là hậu uệ cu#a lớp 'b()ct. 4ớp 'b()ct chứa phương thức toGtring" mà tra#
về một đối tượng Gtring chứa tên lớp cu#a đối tượng. 1ầu hết các lớp con viết chồng phương thức
nà! và in ra mộ t vài điều gì đó có nghĩa cho lớp đó
5. Từ 3h*+́ 0/p'r
;ôi $hi bạn $hông muốn thực hiện viết chồng mộ t phương thức mà chi# muốn thêm chức
n>ng vào phương thức. ;ê# làm được điều nà!" bạn gọi phương thức được viết chồng ùng từ
$hoá %up)r. 6ừ $hoá %up)r ùng $hi lớp con cần tham chiếu lớp cha trực tiếp cu#a nó. Gup)r có
hai ạng cú pháp :
B=
Đối tượng và lớp, mảng
D Hạng B : 1àm $hơ#i tạo lớp cha pha#i được gọi trước hàm $hơ#i tạo cu#a lớp con. Nếu
trong định nghĩa hàm $hơ#i tạo ơ# lớp con $hông có câu lệnh gọi hàm $hơ#i tạo lớp cha" trình biên
ịch Java %)̃ tự động đưa vào câu lệnh gọi hàm $hơ#i tạo m>̣ c định cu#a lớp cha có ạng :
%la&&nam#&+
Iạn có thê# tự thêm lệnh gọi hàm $hơ#i tạo ơ# lớp cha có ạng như %au :
0/p'r$arameter!"#st-
*aram)t)rD4i%t là anh %ách các tham đối cần thiết cho hàm $hơ#i tạo cu#a lớp cha. %up)r&+
pha#i luôn luôn là phát biê#u đầu tiên được thực hiện trong hàm $hơ#i tạo cu#a lớp con
Cí ụ :
cla%% .!*oint Q
int @" !R
.!*oint&int @" int !+ Q
thi%.@ U @R
thi%.! U !R
S
voi i%pla!&+ Q
G!%t)m.out.print&?@ U ?V@VA" ! U ?V!VA[nA+R
S
S
cla%% .!*oint= )@t)n% .!*oint Q
int eR
Gtring nam)R
.!*oint=&int @" int !" int e" Gtring nam)+ Q
%up)r&@"!+R OO 0hơ#i tạo = biến @" ! b>̀ng cách gọi
thi%.e U eR OO hàm ựng cu#a lớp cha
thi%.nam) U nam)R
S
voi i%pla!&+ Q OO Ciết chồng hàm $ế thừa từ lớp cha
G!%t)m.out.print&?@ U ?V@VA" ! U ?V!VA" e U ?VeVA ?VAnam)
:AVnam)VA[nA+R
S
S
D Hạng = : ùng đê# hàm lớp con tru! @uất hàm $ế thừa từ lớp cha :
0/p'r.Member
.)mb)r có thê# là phương thức ha! biến cu#a đối tượng
Cí ụ : Ciết lại hàm i%pla!&+ trong cla%% .!*oint=" có gọi hàm $ế thừa từ lớp cha :
voi i%pla!&+ Q
%up)r.i%pla!&+R
G!%t)m.out.print&A" e U ?VeVA ?VAnam) :AVnam)VA[nA+R
S
C. 49́*" *1 89N: 618́C 678̀E 689̣N:
6rong trường hợp chúng ta muốn định nghĩa một lớp cha th)o mộ t cấu trúc trừu tượng
cho trước mà $hông cần hiện thực đầ! đu# các phương thức. 6ức là ta muốn tạo mộ t lớp cha có
ạng chung cho tất ca# các lớp con và đê# các lớp con hiện thực chi tiết. 0hi đó" bạn muốn ch>́c
ch>́n lớp con có chồng l>́p phương thức. Những phương thức pha#i được chồng l>́p trong lớp con
gọi là phương thức trừu tượng" được $hai báo ab%tract và $hông có phần thân phương thức
+%0tr+(t :Type; MethodName$arameter!"#st- P
Iất $!̀ lớp nào chứa một ha! nhiều phương thức trừu tượng cũng pha#i $hai báo trừu
tượng" %ư# ụng từ $hoá ab%tract trước từ $hoá cla%%. 0hông thê# $hơ#i tạo đối tượng $iê#u lớp trừu
BM
Đối tượng và lớp, mảng
tượng" vì lớp trừu tượng $hông được định nghĩa đầ! đu#. Ho đó" bạn cũng $hông thê# $hai báo
hàm $hơ#i tạo. Iất $!̀ lớp con nào cũng pha#i ho>̣c là viết chồng tất ca# các phương thức trừu tượng
ho>̣c chính nó lại được $hai báo ab%tract
Ví dụ : 6rong các ứng ụng" bạn có thê# v)̃ đường tròn" hình chữ nhật" đoạn th>#ng" đường congF
.ỗi một đối tượng đồ hoạ nà! đều chứa các thuộc tính &vị trí" n)́t viền+ và hành vi &i chu!ê#n"
tha! $ích thước" v)̃+. Iạn có thê# $hai báo chúng $ế thừa lớp :raphic. 6u! nhiên v)̃ một đường
tròn là hoàn toàn $hác với v)̃ mộ t hình chữ nhật" nên lớp :raphic được $hai báo là lớp trừu
tường" chứa các phương thức đã được hiện thực như mov)6o" và phương thức trừu tượng như
raJ
ab%tract cla%% :raphic'b()ct Q
int @" !R
. . .
voi mov)6o&int n)JK" int n)JN+ Q
. . .
S
ab%tract voi raJ&+R
S
.ỗi mộ t lớp con $hông trừu tượng cu#a lớp :raphic như Circl)" 7)ctangl) %)̃ pha#i cài đ>̣t
đầ! đu# cho phương thức raJ
cla%% Circl) )@t)n% :raphic'b()ct Q
voi raJ&+ Q
. . .
S
S
cla%% 7)ctangl) )@t)n% :raphic'b()ct Q
voi raJ&+ Q
. . .
S
S
C/. 49́* 1f̀N: &01<N: 03́ 618̀2+ " 12̀ . 1f̀N: & 0 1<̀ N: C/3́6 C1<̀N:+
1. Iư9 )/̣n! từ 3h*+́ <in+2 (ấ , 0ự (h#̀ n! 2F́p
.>̣c ù chồng l>́p phương thức là một trong những đ>̣c điê#m mạ nh nhất cu#a Java" tu!
nhiên trong vài trường hợp bạn muốn cấm điều nà!. ;ê# cấm mộ t phương thức lớp con viết chồng
phương thức ơ# lớp cha" bạn đưa từ $hoá \inal vào đầu $hai báo
Cí ụ : cla%% Io@ Q
oubl) JithR
oubl) h)ightR
oubl) )pthR
F
\inal oubl) volum)&+ Q
r)turn Jith P h)ight P )pthR
S
. . .
S
.. Iư9 )/̣n! từ 3h*+́ <in+2 (ấ , 0ự 34́ thừ+
.uốn $hai báo mộ t lớp mà $hông có lớp con $ế thừa" bạn %ư# ụng từ $hoá \inal. Cới mộ t
lớp \inal" thì tất ca# các phương thức cu#a nó %)̃ là \inal.
BT
Đối tượng và lớp, mảng
6a $hông thê# $hai báo một lớp vừa ab%tract và \inal vì mộ t lớp trừu tượng là mộ t lớp
chưa hoàn chi#nh và pha#i có lớp con đê# hiện thực đầ! đu#
Ví dụ : \inal cla%% Io@ Q . . .
S
C//. 49́* 4<̀ N: N12E
Có thê# định nghĩa một lớp bên trong một lớp $hác. 4ớp như vậ! gọi là lớp lồng &N)%t)
Cla%%+ và được cài đ>̣t như %au :
cla%% 'n%lo&ing(la&&Q OO 4ớp bao bên ngoài
. . .
%tatic cla%% )tati%*#&t#d(la&& Q OO 4ớp lồng tĩnh
. . .
S
cla%% +nn#r(la&& Q OO 4ớp lồng phi tĩnh ha! lớp nội bộ
. . .
S
S
4ớp lồng chi# được biết bên trong tầm vực cu#a lớp bao bên ngoài. Iộ ịch Java %)̃ báo lỗi
nếu một đoạn mã bất $!̀ bên ngoài lớp bao cố ùng trực tiếp lớp lồng.
.ột lớp lồng có -u!ền tru! cập đến các thành viên cu#a lớp bao bên ngoài" thậm chí nếu
chúng được $hai báo privat). 6u! nhiên" lớp bao $hông thê# tru! @uất các thành phần cu#a lớp
lồng.
Có hai $iê#u lớp lồng : tĩnh và phi tĩnh.
4ớp lồng tĩnh &%tatic n)%t) cla%%+ được bô# %ung từ $hoá %tatic. Nó $hông thê# tham chiếu
trực tiếp đến biến ha! phương thức đối tượng được định nghĩa trong lớp bao" mà chi# ùng chúng
thông -ua đối tượng. Cì giới hạn nà! nên lớp lồng tĩnh ít được ùng. 1ầu hết các lớp lồng là lớp
nội bộ
4ớp lồng phi tĩnh &non%tatic n)%t) cla%%+ $hông bô# %ung từ $hoá %tatic" còn được gọi là
lớp nội bộ &inn)r cla%%+. Nó có thê# tru! cập trực tiếp đến các biến và phương thức đối tượng.
cla%% 'ut)r Q
int out)rg@ U B]]R
voi t)%t&+ Q
/nn)r inn)r U n)J /nn)r&+R
inn)r.i%pla!g@&+R
S
cla%% /nn)r Q OO có thê# tru! @uất trực tiếp biến đối tượng cu#a lớp 'ut)r
int inn)rg! U B]R
voi i%pla!g@&+ Q
G!%t)m.out.println&?i%pla! : out)rg@ U ? V out)rg@+R
S
S
voi i%pla!g!&+ Q OO $hông thê# tru! @uất biến đối tượng cu#a lớp /nn)r
G!%t)m.out.println&?i%pla! : inn)rg! U ? V inn)rg!+R OO hrror
S
S
cla%% /nn)rCla%%H)mo Q
public %tatic voi main&Gtring arg%YZ+ Q
'ut)r out)r U n)J 'ut)r&+R
out)r.t)%t&+R
S
BW
Đối tượng và lớp, mảng
S
C///. C1EN3#N ;<#/ 0/3#E
1. Eh/649n "#9i !iưQ+ (+́( 3i49/ phứ( ḥp
Java chi# cho ph)́p chu!ê#n đô#i đối tượng thuộc lớp con cháu thành đối tượng cu#a lớp cha
ông &2nc)%tor%+" và $hông cho chu!ê#n ngược lại
:ia# %ư# bạn có đối tượng thuộc lớp con Chil và cần chu!ê#n đô#i thành đối tượng thuộc lớp
cha ông *ar)nt. Java cho ph)́p ùng đối tượng Chil một cách tự nhiên ơ# bất cứ chỗ nào ành
cho đối tượng *ar)nt" ta $hông cần làm động tác chu!ê#n đô#i nào ca#. ;ối tượng Chil có đầ! đu#
thuộc tính và hành vi cu#a đối tượng *ar)nt nên có thê# ?vào vaiA đối tượng *ar)nt. Nếu muốn"
bạn cũng có thê# chu!ê#n đô#i đối tượng thuộc lớp con cháu thành đối tượng thuộc lớp cha ông mộ t
cách tường minh" nhưng $hông cần thiết :
Chil c U n)J Chil&+R
*ar)nt p U &*ar)nt+ cR
.. Eh/649n "#9i 3i49/ 0 (ấp th+̀nh 3i49/ phứ( ḥp
6rong gói (ava.lang có %>̃n những lớp tương ứng với các $iê#u %ơ cấp" có thê# ùng tha!
cho $iê#u %ơ cấp : lớp /nt)g)r tha! cho $iê#u int" lớp Iool)an cho $iê#u bool)an" lớp iloat cho $iê#u
\loat" lớp Houbl) cho $iê#u oubl)F 4ớp Numb)r là lớp cha cu#a mọi lớp bọc $iê#u
Ch>#ng hạn" muốn cho $iê#u int có thê# @uất hiện như một đối tượng thuộc lớp /nt)g)r :
/nt)g)r int'b( U n)J /nt)g)r&=W+R
4ớp /nt)g)r được trang bị những phương thức giúp bạn nhiều việc mà $iê#u int $hông thê# đa#m
đương.
D 4ấ! giá trị ngu!ên mà đối tượng int'b( n>́m giữ :
int i U int'b(.intCalu)&+R
/K. .2#N: &2772N+
.a#ng là một cấu trúc lưu giữ các thành phần có cùng $iê#u. Chiều ài một ma#ng được
thiết lập và cố định $hi ma# ng được tạo lúc chạ! chương trình. .ỗi thành phần cu#a ma#ng được
tru! @uất bơ#i chi# %ố cu#a nó trong ma# ng
Nếu bạn muốn lưu giữ các thành phần $hác $iê#u nhau ha! $ích thước ma# ng có thê# tha!
đô#i động" ùng một C)ctor tha! cho ma# ng
1. T+̣* H+̀ 0ư9 )/̣n! ,+9 n!
 %ha# ba&o m'( t b#)&n tham ch#)&u *)&n ma+ n,
-rrayType:; -rrayName
0hai báo một biến có $iê#u ,rra"!"p# ùng đê# tham chiếu đến ma# ng" nhưng $hông có ma#ng nào
thật %ự tồn tại
,rra"!"p# : là $iê#u ữ liệu cu#a các thành phần chứa trong ma# ng và ấu YZ chi# định đó là mộ t
ma# ng
0iê#u ữ liệu thành phần có thê# là bất $!̀ $iê#u cơ %ơ#" tham chiếu
intYZ an2rra!'\/nt%R OO 0hai báo mộ t ma#ng %ố ngu!ên
\loatYZ an2rra!'\iloat%R
bool)anYZ an2rra!'\Iool)an%R
'b()ctYZ an2rra!'\'b()ct%R
GtringYZ an2rra!'\Gtring%R
 Ta(o m'(t ma+ n,
Iạn ùng toán tư# n)J đê# tạo một ma#ng" nghĩa là cấp phát bộ nhớ cho các thành phần và
gán ma#ng đến biến đã $hai báo
B^
Đối tượng và lớp, mảng
-rrayName = ne. -rrayType/-rrayS#0e1
,rra")i-# : là %ố thành phần cu#a ma# ng
Ví dụ : intYZ .R OO $hai báo biến ma# ng $iê#u %ố ngu!ên
. . n)J intYB]ZR // tạo một ma# ng %ố ngu!ên
Iạn có thê# $ết hợp %ự $hai báo biến ma#ng và tạo ma#ng như %au :
-rrayType:; -rrayName = ne. -rrayType/-rrayS#0e1
Có thê# viết như %au :
-rrayType -rrayName:; = ne. -rrayType/-rrayS#0e1
Ví dụ : intYZ . . n)J intYB]ZR
int .YZ . n)J intYB]ZR
 Truy $u2&t tha3nh ph23n cu+a ma+ n,
-rrayVar/#nde$1
ind#0 : chi# vị trí cu#a thành phần trong ma#ng cần tru! @uất" có thê# là giá trị" biến ha! biê#u thức" và
có giá trị từ ] đến ,rra")i-#1B
Cí ụ : .YBZ U =]R
 "2&y 4#&ch th56&c ma+ n,
-rrayName.2'n!th
 %h6+# ta(o ,#a& tr#( *23u cu+a ma+ n,
.a#ng có thê# $hơ#i tạo $hi $hai báo. .a#ng $hơ#i tạo là anh %ách các biê#u thức cách nhau
bơ#i ấu phâ#! và bao -uanh bơ#i ấu ngo>̣c mó c. .a#ng %)̃ được $hơ#i tạo tự động đê# lưu %ố phần tư#
mà bạn @ác định lúc $hơ#i tạo" $hông cần %ư# ụng n)J. Chiều ài cu#a ma# ng là %ố giá trị giữa
Q và S
Ví dụ : bool)anYZ an%J)r% U Q tru)" \al%)" tru)" tru)" \al%) SR
int monthga!%YZ U QMB"=X"MB"M]"MB"M]"MB"MB"M]"MB"M]"MBSR
Ví dụ 1: 6ạo và %ư# ụng ma# ng có thành phần $iê#u cơ %ơ#
public cla%% 2rra!H)mo Q
public %tatic voi main&GtringYZ arg%+ Q
intYZ an2rra!R
an2rra! U n)J intYB]ZR
\or &int i U ]R i ` an2rra!.l)ngthR iVV+ Q
an2rra!YiZ U iR
G!%t)m.out.print&an2rra!YiZ V j j+R
S
G!%t)m.out.println&+R
S
S
Ví dụ : 6ạo và %ư# ụng ma# ng có thành phần $iê#u tham lớp Gtring
public cla%% 2rra!'\Gtring%H)mo Q
public %tatic voi main&GtringYZ arg%+ Q
GtringYZ an2rra! U Q jGtring 'n)j" jGtring 6Joj" jGtring 6hr))j SR
\or &int i U ]R i ` an2rra!.l)ngthR iVV+ Q
G!%t)m.out.println&an2rra!YiZ.to4oJ)rCa%)&++R
S
S
S
.. 8+9n! "+ (hi4̀/ $Arr+60 *< Arr+60-
.a#ng có thê# chứa các thành phần là ma#ng. ;ê# $hai báo mộ t biến ma# ng đa chiều cần @ác
định mỗi chiều cu#a ma#ng b>̀ng cách %ư# ụng các c>̣p ấu ngo>̣c vuông.
Ví dụ : int .YZYZ U n)J intYTZYWZR
B_
Đối tượng và lớp, mảng
intYZYZ . U n)J intYTZYWZR
. là một ma# ng T@W thành phần là các %ố ngu!ên.
0hi cấp phát bộ nhớ cho ma# ng đa chiều" bạn có thê# chi# định chiều ài cu#a ma#ng chính" và
$hông chi# định chiều ài cu#a ma# ng con cho đến $hi tạo chúng
Ví dụ : int .YZYZ U n)J intYMZYZR
.Y]Z U n)J intYMZR
.YBZ U n)J intYTZR
.Y=Z U n)J intY=ZR
Ví dụ 1 :
public cla%% 2rra!'\2rra!%H)mo Q
public %tatic voi main&GtringYZ arg%+ Q
GtringYZYZ cartoon% U Q
Q jilint%ton)%j" jir)j" jLilmaj" j*)bbl)%j" jHinoj S"
Q j7ubbl)%j" jIarn)!j" jI)tt!j" jIam Iamj S"
Q jJ)t%on%j" j:)org)j" jJan)j" jhlro!j" jJu!j" j7o%i)j" j2%troj S"
Q jGcoob! Hoo :angj" jGcoob! Hooj" jGhagg!j" jC)lmaj" jir)j"
jHaphn)j S
SR
\or &int i U ]R i ` cartoon%.l)ngthR iVV+ Q
G!%t)m.out.print&cartoon%YiZY]Z V j: j+R
\or &int ( U BR ( ` cartoon%YiZ.l)ngthR (VV+ Q
G!%t)m.out.print&cartoon%YiZY(Z V j j+R
S
G!%t)m.out.println&+R
S
S
S
Chú !́ là tất ca# ma# ng con có chiều ài $hác nhau. 6ên cu#a ma# ng con là cartoon%Y]Z"
cartoon%YBZ...
Ví dụ :
public cla%% 2rra!'\2rra!%H)mo= Q
public %tatic voi main&GtringYZ arg%+ Q
intYZYZ a.atri@ U n)J intYTZYZR
\or &int i U ]R i ` a.atri@.l)ngthR iVV+ Q
a.atri@YiZ U n)J intYWZR
\or &int ( U ]R ( ` a.atri@YiZ.l)ngthR (VV+ Q
a.atri@YiZY(Z U i V (R
S
S
\or &int i U ]R i ` a.atri@.l)ngthR iVV+ Q
\or &int ( U ]R ( ` a.atri@YiZ.l)ngthR (VV+ Q
G!%t)m.out.print&a.atri@YiZY(Z V j j+R
S
G!%t)m.out.println&+R
S
S
S
5. I+* (h'́p ,+9 n! $E*p6in! Arr+60-
BX
Đối tượng và lớp, mảng
Gư# ụng phương thức arra!cop! cu#a G!%t)m %ao ch)́p ữ liệu từ mộ t ma#ng đến mộ t ma#ng
$hác. *hương thức arra!cop! !êu cầu W tham đối :
p/%2i( 0t+ti( H*i) +rr+6(*p6$-rrayType:; source7
int srcInde$7
-rrayType:; dest7
int destInde$7
int len,th-
1ai tham đối 'b()ct chi# định ma#ng nguồn và ma#ng đích. Ia tham đối int chi# vị trí b>́t
đầu trong mỗi ma# ng nguồn và đích" và %ố thành phần đê# %ao ch)́p. Iiê#u đồ nà! minh hoạ việc
%ao ch)́p :
Ví dụ :
public cla%% 2rra!Cop!H)mo Q
public %tatic voi main&GtringYZ arg%+ Q
charYZ cop!irom U Q kk" k)k" kck" kak" k\k" k\k" k)k"
kik" knk" kak" ktk" k)k" kk SR
charYZ cop!6o U n)J charY_ZR
G!%t)m.arra!cop!&cop!irom" =" cop!6o" ]" _+R
G!%t)m.out.println&n)J Gtring&cop!6o++R
S
S
Iiê#u đồ %au mô ta# cho ví ụ trên :
Chú !́ r>̀ng ma#ng đích pha#i được cấp phát và pha#i đu# lớn đê# chứa ữ liệu được %ao ch)́p
Bb
2ói và giao di3̣n
Chương : GÓI VÀ GIAO @IṚ N
:ói &*ac$ag)+ và giao iện &/nt)r\ac)+ là hai thành phần cơ ba#n trong mộ t chương trình
Java.
/. :'́/
:ói là $!̃ thuật phân hoạch $hông gian tên lớp" giao iện thành những vùng ễ -ua#n l!́
hơn. Cí ụ $hi bạn tạo mộ t lớp trong mộ t gói nào đó" bạn $hông cần pha#i $iê#m tra @)m nó có bị
trùng tên với một lớp nào đó trong gói $hác $hông.
:ói bao gồm hai $!̃ thuật đ>̣t tên và $!̃ thuật điều $hiê#n tru! @uất. Iạn có thê# cấp ha!
$hông cấp -u!ền tru! @uất các lớp bên trong gói đối với các đoạn mã n>̀m ngoài gói. Iạn cũng
có thê# @ác định thành phần nào cu#a lớp mà chi# có các thành phần trong cùng một lớp mới có
-u!ền tru! @uất.
1. Định n!hiQ+ !*́i
6ạo mộ t gói b>̀ng cách đ>̣t từ $hoá pac$ag) nga! phát biê#u đầu tiên cu#a tập tin nguồn
Java. Iất $!̀ lớp nào $hai báo trong tập tin nà! đều thuộc gói nà!. Nếu bạn bo# -ua phát biê#u
*ac$ag)" các lớp %)̃ đ>̣t vào pac$ag) m>̣ c định
p+(3+!' ac4a,eName;
Java %ư# ụng hệ thống thư mụ c đê# lưu trữ các gói. Các lớp %)̃ chứa trong thư mục trùng
tên *ac$ag)Nam)
Có thê# tạo các pac$ag) phân cấp" ùng ấu chấm đê# phân biệt một pac$ag) với pac$ag)
cha cu#a nó. Gự phân cấp pac$ag) pha#i được ánh @ạ vào hệ thống tập tin. Java @)m gốc cu#a câ!
phân cấp gói được định nghĩa bơ# i biến môi trường C42GG*261.
p+(3+!' ac4a,eName7:.ac4a,eName8:.ac4a,eName9;;P
Ví dụ : pac$ag) (ava.aJt.imag)R
được lưu trữ trong Java[aJt[imag) với hệ điều hành LinoJ%.
.. Đi4̀/ 3hi49n tr/6 =/ất
6hông -ua ph)́p đóng gói &lớp" gói+" ta có thê# điều $hiê#n phần nào cu#a chương trình có
thê# tru! @uất các thành phần cu#a lớp
Các điều $hiê#n tru! @uất cu#a Java là public" privat) và prot)ct). prot)ct) chi# áp
ụng $hi có liên -uan đến $ế thừa
 0hi bô# %ung tiền tố cho mộ t thành phần cu#a lớp &biến và hàm+ là :
D 6ừ $hoá public : chi# ra r>̀ng thành phần nà! có thê# được tru! @uất bơ#i bất $!̀ òng lệnh nào ù
ơ# trong ha! ngoài lớp" gói &*ac$ag)+ mà nó $hai báo
D privat) : chi# có thê# được tru! @uất trong lớp cu#a nó" mọ i đoạn mã n>̀m ngoài lớp" $ê# ca# những
lớp con đều $hông có -u!ền tru! @uất
D 0hi $hông có điều $hiê#n tru! @uất nào được ùng" các lớp con cũng như các lớp trong cùng gói
đều có thê# tru! @uất nó" $hông thê# tru! @uất từ bên ngoài gói cu#a nó
D prot)ct) : liên -uan đến %ự $ế thừa" nếu bạn chi# cho các lớp con trực tiếp mới có -u!ề n tru!
@uất các thành phần cu#a lớp" bạn $hai báo chúng là prot)ct)
 Cới lớp chi# có hai mức tru! @uất : m>̣c định và public. 0hi một lớp $hai báo public" các đoạn
mã $hác có thê# tru! @uất được nó. Nếu lớp là tru! @uất m>̣c đinh" chi# có các đoạn mã trong cùng
mộ t gói mới có -u!ề n tru! @uất nó
;iều $hiê#n tru! @uất
thành phần cu#a lớp
6rong lớp 6rong lớp
con
6rong *ac$ag)
&:ói+
6oàn bộ
privat) K
prot)ct) K KP K
=]
2ói và giao di3̣n
public K K K K
0hông có K K K
Ví dụ :
pac$ag) :r))$R
public cla%% 2lpha Q
prot)ct) int iR
prot)ct) voi prot)ct).)tho&+ Q
G!%t)m.out.println&?*rot)ct) .)thoA+R
S
S
cla%% :amma Q
voi acc)%%.)tho&+ Q
2lpha a U n)J 2lpha&+R
a.i U B]R OO 1ợp lệ
a.prot)ct).)tho&+R OO 1ợp lệ
S
S
pac$ag) 4atinR
import :r))$.PR
cla%% H)lta )@t)n% 2lpha Q
voi acc)%%.)tho &2lpha a" H)lta + Q
a.i U B]R OO 0hông hợp lệ
.i U B]R OO 1ợp lệ
a.prot)ct).)tho&+R OO 0hông hợp lệ
.prot)ct).)tho&+R OO 1ợp lệ
S
S
5. Iư9 )/̣n! !*́i
Java đưa ra phát biê#u import đê# những lớp nào đó ha! toàn bộ gói có thê# thấ! được" nghĩa
là bạn có thê# %ư# ụng lớp trực tiếp -ua tên cu#a nó" $hông cần ùng ấu chấm tru! @uất
6rong tập tin nguồn Java" phát biê#u import đ>̣t nga! %au phát biê#u pac$ag) &nếu tồn tại+
và trước bất cứ định nghĩa lớp nào
i,p*rt ac4a,eName7:.ac4a,eName8;.ClassNameP
i,p*rt ac4a,eName7:.ac4a,eName8;.:P
Ví dụ : import (ava.util.Hat)R
import (ava.io.PR
6ất ca# các lớp chuâ#n cu#a Java lưu trong gói tên là (ava. Iạn pha#i nhập từng gói ha! lớp
bạn muốn %ư# ụng" riêng lớp gói (ava.lang lưu nhiều chức n>ng thông ụng" được import ngầm
định bơ#i bộ biên ịch cho tất ca# các chương trình.
*hát biê#u import cu#a gói chi# có giá trị trên các thành phần $hai báo public cu#a nó.
//. :/2' H/3̣N
1. Định n!hiQ+ !i+* )i4̣n
Cới từ $hoá int)r\ac)" bạn có thê# trừu tượng hoàn toàn giao iện cu#a lớp $ho#i %ự hiện
thực cu#a nó. Nghĩa là bạn có thê# đ>̣c ta# một lớp pha#i làm gì" nhưng $hông cần biết làm như thế
nào. :iao iện là tập hợp các $hai báo phương thức" h>̀ng mà lớp con $ế thừa. :iao iện có cú
pháp tương tự lớp" nhưng nó $hông có biến thành viên" chi# có $hai báo h>̀ng và những phương
=B
2ói và giao di3̣n
thức cu#a chúng $hai báo $hông có thân. 6rong thực tế" điều nà! có nghĩa r>̀ng bạn có thê# định
nghĩa những giao iện mà $hông cần đa#m nhiệm phần hiện thực nó. Gố lượng lớp hiện thực mộ t
giao iện là tu!̀ !́ . .ột lớp cũng có thê# hiện thực %ố lượng tu!̀ !́ giao iện.
;ê# hiện thực một giao iện" mộ t lớp pha#i cài đ>̣t đầ! đu# các phương thức định nghĩa
trong giao iện. Cới từ $hoá int)r\ac)" Java cho ph)́p bạn có những tiện ích đầ! đu# cho đ>̣c điê#m
?một giao iện" nhiều phương thứcA cu#a tính đa hình
:iao iện được thiết $ế đê# hỗ trợ %ự -u!ết định phương thức động lúc thời gian chạ!.
6hông thường" đê# lớp nà! có thê# gọi phương thức cu#a lớp $ia" ca# hai lớp cần hiện iện lúc thời
gian ịch. ;iều nà! làm cho môi trường lớp trơ# nên tĩnh và $hông có $ha# n>ng mơ# rộng. 6rong
mộ t hệ thống như vậ! câ! phân cấp càng ngà! càng bị đâ#! lên cao. Cì vậ!" giao iện được định
nghĩa đê# hạn chế việc ngà! càng nhiều lớp con. Nó tách %ự định nghĩa mộ t phương thức ha! tập
các phương thức ra $ho#i câ! phân cấp $ế thừa. Cì các giao iện phân cấp $hác các lớp" o đó các
lớp $hông có -uan hệ trong %ự phân cấp cũng có thê# hiện thực cùng mộ t giao iện. 6a có thê# thấ!
đâ! thực %ự là thế mạnh giao iện
-cess int'r<+(' InterfaceName >
Type MethodName7$arameter!"#st-P
...
Type MethodNamen$arameter!"#st-P
Type ;#nal!Var7 = Value;
S
Type ;#nal!Varn = Value;
A
D 2c)%% có thê# là public ha! $hông. 0hi $hông chứa đ>̣c ta# nào" acc)%% là m>̣ c định và giao iện
chi# có giá trị đối với các thành phần $hác $hai báo trong gói. 0hi $hai báo public" mọi đoạn mã
đều có thê# %ư# ụng giao iện. 6ất ca# các phương thức và biến hiê#u ngầm là public nếu giao iện
$hai báo là public
D Các phương thức là các phương thức trừu tượng" $hông có thân" chúng $hông được hiện thực
trong giao iện.
D Các biến có thê# $hai báo trong $hai báo giao iện. Chúng hiê#u ngầm là \inal và %tatic" nghĩa là
chúng $hông thê# bị tha! đô#i bơ#i %ự hiện thực cu#a lớp. Chúng pha#i được $hơ#i tạo với những giá
trị h>̀ng.
.. Hi4̣n thự( !i+* )i4̣n
0hi đã định nghĩa giao iện" một ha! nhiều lớp có thê# hiện thực giao iện. ;ê# hiện thực
giao iện" đ>̣t mệ nh đề impl)m)nt% trong định nghĩa lớp và %au đó tạo những phương thức định
nghĩa trong giao iện :
-cess (2+00 ClassName :'=t'n)0 SuperClass;
:i,p2','nt0 InterfaceName7<= InterfaceNamen; >
?? G*)6 *< (2+00
A
T Nếu lớp hiện thực hai giao iện có phương thức giống nhau" phương thức được gọi tương ứng
với giao iện đó
D Những phương thức hiện thực giao iện pha#i $hai báo public. 1ình thức cu#a phương thức hiện
thực pha#i giống hệt $hi nó được đ>̣c ta# trong định nghĩa int)r\ac)
D 1iện thực từng phần : Nếu một lớp chứa một giao iện nhưng $hông hiện thực đầ! đu# các
phương thức định nghĩa trong giao iện" lớp đó pha#i $hai báo ab%tract
D .ột giao iện giống như một lớp trừu tượng" tu! nhiên Cla%% cu#a bạn $hông thê# $ế thừa nhiều
lớp" nên ùng giao iện tha! cho lớp trừu tượng" mộ t lớp có thê# hiện thực nhiều giao iện. Cì vậ!
mà giao iện cung cấp nhiều %ự $ế thừa.
Ví dụ 1 :
==
2ói và giao di3̣n
int)r\ac) 0i)m6ra Q
voi inGo&int p+R
S
cla%% 1i)n6huc impl)m)nt% 0i)m6ra Q
public voi inGo&int p+ Q
G!%t)m.out.println&?:iá trị cu#a p là : ?Vp+R
S
voi boGung&+ Q
G!%t)m.out.println&?Cla%% hiện thực giao iện có thê# định nghĩa thêm AV
?thành viên $hác ha! $hông?+R
S
S
Ví dụ :
cla%% 160hac impl)m)nt% 0i)m6ra Q
public voi inGo&int p+ Q
G!%t)m.out.println&?Iình phương cu#a p là : ?VpPp+R
S
S
5. Tr/6 =/ất hi4̣n thự( th#n! U/+ th+, (hi4́/ !i+* )i4̣n
Iạn có thê# $hai báo một biến tham chiếu đến đối tượng $iê#u giao iện chứ $hông h>#n là
lớp. 0hi bạn gọi phương thức thông -ua mộ t trong những tham chiếu đến đối tượng $iê#u giao
iện ha! lớp hiện thực giao iện" phiên ba#n đúng %)̃ được gọi ựa trên thê# hiện thực %ự cu#a giao
iện đang tham chiếu đến. *hương thức thực thi được tìm tự động lúc chạ!.
Cí ụ :
cla%% EngHung Q
public %tatic voi main &Gtring arg%YZ Q
0i)m6ra c U n)J 1i)n6huc&+R OOc chi# biết hàm $hai báo trong giao iện
1i)n6huc U n)J 1i)n6huc&+R OO biết các hàm $hai báo trong 1i)n6huc
160hac ) U n)J 160hac&+R OO) biết các hàm $hai báo trong 160hac
c. inGo&W]+R
c U R OO c bâ! giờ tham chiếu đến đối tượng $iê#u 1i)n6huc
c.bo Gung&+R
c U )R OO c bâ! giờ tham chiếu đến đối tượng $iê#u 160hac
c. inGo&W]+R
S
S
0ết -ua# chương trình là :
:iá trị cu#a p là : W]
Cla%% hiện thực giao iện có thê# định nghĩa thêm thành viên $hác ha! $hông
Iình phương cu#a p là : =W]]
J. Gi4́n tr*n! !i+* )i4̣n
Iạn có thê# ùng giao iện đê# import những h>̀ng ùng chung cho nhiều lớp đơn gia#n
b>̀ng cách $hai báo giao iện chứa những biến được $hơ#i tạo b>̀ng những giá trị !êu cầu. 0hi
bạn đưa giao iện đó vào trong lớp" tất ca# những tên biến nà! có phạm vi như mộ t h>̀ng. ;iều
nà! giống như %ư# ụng tập tin h)a)r trong COC
VV
tạo %ố lượng lớn h>̀ng b>̀ng l)\in) ha! $hai
báo con%t. Nếu giao iện $hông chứa phương thức nào" lớp chứa giao iện như vậ! thực %ự
$hông hiện thực điều gì ca#. Nó tương tự việc lớp đó import những biến h>̀ng cho $hông gian lớp
như những biến \inal
=M
2ói và giao di3̣n
K. B4́ thừ+ !i+* )i4̣n
.ột giao iện có thê# $ế thừa giao iện $hác b>̀ng cách %ư# ụng từ $hoá )@t)n%. Cú pháp
giống như lớp $ế thừa. 0hi mộ t lớp hiện thực một giao iện $ế thừa từ một giao iện $hác" nó
pha#i cung cấp tất ca# các hiện thực cho tất ca# các phương thức $ê# ca# phương thức trong anh %ách
giao iện cha mà giao iện nà! $ế thừa
=T
Lớp )tring và *um4#r
Chương : LỚP ITRING VÀ NV8G1R
/. 6<# N: mE2́6
Chúng ta đã biết cách ùng từ $hoá )@t)n% $hai báo mộ t lớp là lớp con cu#a một lớp
$hác. 6u! nhiên bạn chi# có thê# định nghĩa một lớp cha cho lớp con cu#a bạn &Java $hông u#ng hộ
nhiều %ự $ế thừa lớp+" và thậm chí bo# -ua từ $hoá )@t)n% trong mộ t $hai báo lớp" lớp cu#a bạn
cũng có một lớp cha. ;iều nà! ẫn đến một câu ho#i là các lớp b>́t đầu từ đâu ,
Như mô ta# trong hình %au" lớp cao nhất" lớp mà từ đó tất ca# các lớp @uất phát từ" là lớp
'b()ct định nghĩa trong (ava.lang. 4ớp 'b()ct định nghĩa và cài đ>̣t các hành vi mà mọ i lớp
trong Java cần đến.
//. 49́ * G67/N: C2̀ G67/N:IEiih7
6rong gói (ava.lang chứa hai lớp lưu trữ và thao tác ữ liệu $iê#u $!́ tự : Gtring và
GtringIu\\)r" được $hai báo \inal" nghĩa là $hông $ế thừa
Iạn ùng lớp Gtring $hi bạn đang làm việc với chuỗi h>̀ng" nội ung $hông thê# tha! đô#i.
GtringIu\\)r được ùng $hi bạn muốn tha! đô#i nội ung cu#a chuỗi.
Ví dụ : *hương thức r)v)r%) ùng ca# hai lớp Gtring và GtringIu\\)r đê# đa#o các $!́ tự cu#a chuỗi.
public cla%% 7)v)r%)Gtring Q
public %tatic Gtring r)v)r%)&Gtring %ourc)+ Q
int i" l)n U %ourc).l)ngth&+R
GtringIu\\)r )%t U n)J GtringIu\\)r&l)n+R
\or &i U &l)n D B+R i aU ]R iDD+
)%t.app)n&%ourc).char2t&i++R
r)turn )%t.toGtring&+R
S
S
1. Ĺp Itrin!
Ta(o m'(t *'&# t56(n,
Nhiều Gtring được tạo từ các h>̀ng chuỗi. 0hi trình ịch b>́t g>̣p mộ t chuỗi $!́ tự bao giữa
c>̣p nhá! $)́p" nó tạo ra một đối tượng chuỗi mà có giá trị là chuỗi bao giữa c>̣p nhá! $)́p. Iạn có
thê# ùng h>̀ng Gtring ơ# bất $!̀ đâu bạn ùng đối tượng Gtring
Iạn có thê# tạo đối tượng chuỗi như bất $!̀ đối tượng nào $hác cu#a (ava" ùng từ $hoá
n)J
Gtring % U n)J Gtring&+R
Gtring % U n)J Gtring&j:obbl)!goo$.j+R
ha! có thê# viết :
=W
Lớp )tring và *um4#r
Gtring % U j1ola .unojR
D .ột %ố các hàm $hơ#i tạo cu#a lớp Gtring :
Itrin!$-
Itrin!$%6t' bytes:;-
Itrin!$%6t' bytes:;7int startInde$7 int numChars-
Itrin!$(h+r chars:;-
Itrin!$(h+r chars:;7 int startInde$7 int numChars-
Itrin!$Itrin! s-
Itrin!$Itrin!G/<<'r s-
Ví dụ :
b!t) bYZ U Q^W" ^^" ^_" ^X" ^b" _]SR
Gtring %B U n)J Gtring&b+R OO 0hơ#i tạo % với chuỗi 2ICHhi
Gtring %= U n)J Gtring&b"="M+R OO 0hơ#i tạo % với chuỗi CHh
char cYZ U Qcad"dbd"dcd"dd"d)d"d\d+R
Gtring %M U n)J Gtring̣&c+R OO 0hơ#i tạo % với chuỗi abc)\
Gtring %T U n)J Gtring&c"="M+R OO 0hơ#i tạo % với các $!́ tự c)
Gtring %W U n)J Gtring&%=+R OO 6ạo đối tượng %M chứa cùng ã! $!́ tự như %=
Ca&c ph56n, th5&c th563n, du3n, cu+a l6&p Str#n,
D int 2'n!th$- : cho chiều ài chuỗi
int l)n U %ourc).l)ngth&+R
int l)n U j:oob!) Cru)l Lorlj.l)ngth&+R
D (h+r (h+rAt$int #nde$- : tra# về $!́ tự tại vị trí thứ in)@
char c U %ourc).char2t&B+R
char ch U ?abcA.char2t&]+R OO:án giá trị a cho ch
D %**2'+n 'U/+20$Itrin! object- : $iê#m tra hai chuỗi có b>̀ng nhau $hông" có phân biệt hoa
thường
Go %ánh phương thức )-ual%&+ và toán tư# U U $hác nhau hoàn toàn. *hương thức ùng %o %ánh
các $!́ tự trong đối tượng Gtring. 6oán tư# U U %o %ánh = đối tượng có cùng tham chiếu đến cùng
mộ t thê# hiện.
Gtring %B U ?1)lloAR
Gtring %= U n)J Gtring&%B+R OO tạo %= có nội ung như %B" nhưng $hông tro# đến cùng
OO một đối tượng
G!%t)m.out.println&A%B )-ual% %= :AV%B.)-ual%&%=++R
G!%t)m.out.println&?%B U U %= :AV&%BU U%=++R
0ết -ua# là :
%B )-ual% %= : tru)
%B U U %= : \al%)
T int (*,p+r'T*$Itrin! 0tr- : %o %ánh = chuỗi" tra# về giá trị :
nếu ` ] : chuỗi nho# hơn %tr
nếu a ] : chuỗi lớn hơn %tr
nếu U ] : chuỗi b>̀ng %tr
D int in)'=O<$int character- : tra# về vị trí tìm thấ! đầu tiên &cuối cùng+ cu#a $!́ tự %hara%t#r
int 2+0tIn)'=O<$int character-
D int in)'=O<$int character7 int from- : tra# về vị trí tìm thấ! đầu tiên &cuối cùng+ cu#a $!́ tự
%hara%t#r" $ê# từ vị trí 5rom về cuối chuỗi &ha! đầu chuỗi+
int 2+0tIn)'=O<$int character7 int from-
D int in)'=O<$Itrin! str#n,- : tra# về vị trí tìm thấ! đầu tiên &cuối cùng+ cu#a chuỗi &tring
int 2+0tIn)'=O<$Itrin! str#n,-
=^
Lớp )tring và *um4#r
D int in)'=O<$Itrin! str#n,7 int from- : tra# về vị trí tìm thấ! đầu tiên &cuối cùng+ cu#a chuỗi
&tring" $ê# từ vị trí 5rom về cuối chuỗi &ha! đầu chuỗi+
int 2+0tIn)'=O<$Itrin! str#n,7 int from-
D Itrin! 0/%Itrin!$int startInde$7 int endInde$- : tra# về chuỗi con cu#a mộ t chuỗi b>́t đầu từ vị
trí %tart/n)@ đến vị trí )n/n)@DB" nếu $hông có )n/n)@ thì lấ! đến cuối chuỗi
Gtring org U ?6hi% i% a t)%tAR
Gtring r)%ult U ?AR
r)%ult U org.%ubGtring&X+R
D Itrin! r'p2+('$(h+r or,#nal7 (h+r replacement- : tha! thế $!́ tự r)plac)m)nt cho $!́ tự orginal
Gtring % U ?1)lloA.r)plac)&cld"dJd+R OO Cho % b>̀ng ?1)JJoA
D Itrin! tri,$- : c>́t bo# $hoa#ng trống trước và %au chuỗi
D Itrin! t*L*D'rE+0'$- : đô#i chuỗi thành chuỗi thường
D Itrin! t*Vpp'rE+0'$- : đô#i chuỗi thành chuỗi hoa
Gtring % U ?6hi% i% a t)%tAR
Gtring upp)r U %.toEpp)rCa%)&+R
D T*+́n tư9 W : đê# $ết nối hai đối tượng Gtring" ha! mộ t đối tượng Gtring và một giá trị $hác thành
đối tượng Gtring"
Gtring %B U jtJojR
G!%t)m.out.println&jon)j V %B V jthr))j+R
G!%t)m.out.println&jLor v. j V bV_+R
Cì đối tượng Gtring $hông thê# tha! đô#i o đó bất cứ lúc nào bạn muốn tha! đô#i chúng"
bạn pha#i cop! chuỗi vào GtringIu\\)r" nhưng với toán tư# V" bạn có thê# viết như %au vì Java tự
chu!ê#n %ang GtringIu\\)r và tha! đô#i chuỗi
%B U %B V ?thr))AR
Cì vậ!" có thê# viết lại chương trình đa#o chuỗi trên" $hông cần thiết pha#i chu!ê#n %ang
GtringIu\\)r
public cla%% 7)v)r%)Gtring Q
public %tatic Gtring r)v)r%)&Gtring %ourc)+ Q
int i" l)n U %ourc).l)ngth&+R
Gtring )%t U ?AR
\or &i U &l)n D B+R i aU ]R iDD+
)%t U )%t V %ourc).char2t&i+R
r)turn )%tR
S
S
D 0t+ti( Itrin! H+2/'O<$*%&'(t?H+r $- :
là hàm lớp" tra# về một chuỗi đê# chu!ê#n đô#i các biến $iê#u %ơ cấp ha! đối tượng @ thành một
Gtring
Ví dụ : */ là một biến lớp cu#a lớp .ath" đê# in giá trị cu#a %ô */ :
G!%t)m.out.println&Gtring.valu)'\&.ath.*/++R
.. Ĺp Itrin!G/<<'r
Ta(o m'(t *'&# t56(n, Str#n,>uffer
*hương thức $hơ#i tạo cu#a lớp GtringIu\\)r có ạng :
GtringIu\\)r&+ : ùng cho chuỗi B^ $!́ tự
GtringIu\\)r&int l#ngth+ : ùng cho chuỗi l)ngth $!́ tự
Ví dụ : GtringIu\\)r )%t U n)J GtringIu\\)r&=W+R
Ca&c ph56n, th5&c th563n, du3n, cu+a l6&p Str#n,>uffer
=_
Lớp )tring và *um4#r
D int 2'n!th$- : cho chiều ài chuỗi
D (h+r (h+rAt$int #nde$- : tra# về $!́ tự tại vị trí thứ in)@
D H*i) 0'tEh+rAt$int #nde$7 (h+r ch- : đ>̣t $!́ tự ch vào GtringIu\\)r" tại vị trí in)@
D Itrin!G/<<'r +pp'n)$*%&'(t?H+r $- : bô# %ung đối tượng ha! biến @ $iê#u bất $!̀ vào cuối
GtringIu\\)r. Hữ liệu được chu!ê#n thành chuỗi trước $hi bô# %ung vào GtringIu\\)r
int a U =]R
GtringIu\\)r %b U n)J GtringIu\\)r&T]+R
Gtring % U %b.app)n&?a UA+.app)n&a+.toGtring̣&+R
D Itrin!G/<<'r in0'rt$int #nde$7 *%&'(t?H+r $- : ch)̀n một đối tượng ha! biến @ $iê#u bất $!̀ vào
vị trí thứ in)@
GtringIu\\)r %b U n)J GtringIu\\)r&j/ Javanj+R
%b.in%)rt&M" jli$) j+R
G!%t)m.out.println&%b+R OO Cho chuỗi ?/ li$) JavaA
D Itrin!G/<<'r r'H'r0'$- : đa#o ngược các $!́ tự cu#a chuỗi
GtringIu\\)r %b U n)J GtringIu\\)r&j/ Javanj+R
%b.r)v)r%)&+R
D Itrin!G/<<'r )'2't'$int startInde$7 int endInde$- : @oá chuỗi con từ %tart/n)@ đến )n/n)@D
B
D Itrin!G/<<'r )'2't'Eh+rAt$int #nde$- : @oá $!́ tự tại vị trí in)@
D Itrin!G/<<'r 0/%Itrin!$int startInde$7 int endInde$- : tra# về chuỗi con cu#a mộ t chuỗi b>́t đầu
từ vị trí %tart/n)@ đến vị trí )n/n)@DB" nếu $hông có )n/n)@ thì lấ! đến cuối chuỗi
D Itrin!G/<<'r r'p2+('$int startInde$7 int endInde$< Itrin! str- : tha! thế chuỗi %tr vào vị trí b>́t
đầu là %tart/n)@ đến )n/n)@DB cu#a chuỗi
Iạn hã! @)m thêm (ava.lang.Gtring an (ava.lang.GtringIu\\)r đê# có được định nghĩa đầ!
đu# các phương thức và biến cài đ>̣t cho hai lớp nà!
///. 49́ * NE.Ih7G
Như đã nói ơ# trên" trong gói (ava.lang có %>̃n những lớp tương ứng với các $iê#u %ơ cấp" có
thê# ùng tha! cho $iê#u %ơ cấp : lớp /nt)g)r tha! cho $iê#u int" lớp Iool)an cho $iê#u bool)anF
4ớp Numb)r là lớp cha cu#a mọi lớp bọc $iê#u
Các lớp bọc $iê#u %ố: I!t)" Houbl)" iloat" /nt)g)r" 4ong" Ghort
Các lớp bao bọc cho các $iê#u ữ liệu $hác : Iool)an" Charact)r" Coi" .ath
1. T+̣* ,#̣ t "#́i tựn!
iloat \ U n)J iloat&=W.W+R
iloat \ U n)J iloat&?=T.WA+R
D Các hàm $hơ#i tạo cu#a các lớp bọc $iê#u %ố
X2*+t$)*/%2' n-
X2*+t$<2*+t n-
X2*+t$0trin! str-
@*/%2'$)*/%2' n-
@*/%2'$0trin! str-
6ương tự với các lớp bọc $iê#u %ố $hác
.. E+́( phưn! thứ( thừn! )/̀n! (h* (+́( 2́p 3i49/ 0#́
D Các phương thức tra# về giá trị cu#a các đối tượng tương ứng với các ạng %ố $hác nhau
%6t' %6t'V+2/'$- OO tra# về ạng %ố b!t)
0h*rt 0h*rtV+2/'$-
int intV+2/'$-
=X
Lớp )tring và *um4#r
2*n! 2*n!V+2/'$-
)*/%2' )*/%2'V+2/'$-
<2*+t <2*+tV+2/'$-
/nt)g)r int'b( U n)J /nt)g)r&=W+R
int i U int'b(.intCalu)&+R OO cho i U =W
D Các phương thức lớp chu!ê#n đô#i một chuỗi thành giá trị %ố tương ứng
0t+ti( %6t' p+r0'X2*+t$Itrin! str-
0t+ti( 0h*rt p+r0'Ih*rt$Itrin! str-
0t+ti( int p+r0'Int$Itrin! str-
0t+ti( 2*n! p+r0'L*n!$Itrin! str-
0t+ti( )*/%2' p+r0'@*/%2'$Itrin! str-
0t+ti( <2*+t p+r0'X2*+t$Itrin! str-
Gtring % U ?T=AR
int i U/nt)g)r.par%)/nt&%+R OO cho i U T=
D int (*,p+r'T*$<2*+tO%&?<2*+tV+r f - : %o %ánh giá trị cu#a đối tượng %ố với đối tượng ha! biến
%ố \" tra# về giá trị :
nếu U ] : b>̀ng nhau
nếu U %ố âm : giá trị cu#a đối tượng nho# hơn \
nếu U %ố ương : giá trị cu#a đối tượng lớn hơn \
D %**2'+n 'U/+20$<2*+tO%& f - : nếu U tru) nghĩa là giá trị cu#a đối tượng b>̀ng \
D 0trin! t*Itrin!$- : chu!ê#n mộ t đối tượng thành Gtring.
6ất ca# các lớp $ế thừa toGtring từ lớp 'b()ct và nhiều lớp $hác trong gói (ava.lang viết đ)̀
phương thức nà! đê# cung cấp một cài đ>̣t mà có !́ nghĩa với cla%% đó. Ch>#ng hạn" các lớp bọc
$iê#u Charact)r" /nt)g)r" Iool)anF đều viết đ)̀ toGtring
Ví dụ : /nt)g)r i U n)J /nt)g)r&=]+R
G!%t)m.out.println&i.toGtring&++R
D 0t+ti( Itrin! t*Itrin!$H+r n- : đâ! là hàm lớp đê# chu!ê#n biến %ố n thành chuỗi
Gtring % U /nt)g)r.toGtring&=W+ OO Cho chuỗi % là ?=WA
D 0t+ti( X2*+t H+2/'O<$Itrin! str- : đâ! là hàm lớp tra# về đối tượng iloat cu#a giá trị %tr" tương tự
với các lớp bọc $iê#u %ố $hác
Gtring % U ?T=.WAR
/nt)g)r i U /nt)g)r.valu)'\&%+R
Ví dụ : Ciết đoạn chương trình nhập : họ tên $hông -uá =] $!́ tự" n>m %inh aBb_] và `=B]]" có
$iê#m tra cho đến $hi người ùng nhập đúng
import (ava.io.PR
public cla%% Nhap Q
public %tatic voi main &Gtring YZ arg%+ throJ% /'h@c)ption Q
Hata/nputGtr)am $b U n)J Hata/nputGtr)am &G!%t)m.in+R
Gtring % U nullR
Gtring n% U nullR
OO Nhap ho t)n
Jhil) &tru)+ Q
G!%t)m.out.print&jNhap 1o va t)n : j+R
% U $b.r)a4in)&+R
i\ & &%.l)ngth&+ `U=]+ oo &%.l)ngth&+ nU ]+ + Q
G!%t)m.out.println&j1o va t)n la : jV %+R
br)a$R
S
G!%t)m.out.println&j*hai nhap ho t)n $hong -ua =] $! tuj+R
=b
Lớp )tring và *um4#r
S
OO Nhap nam %inh
Jhil) &tru)+ Q
tr! Q
G!%t)m.out.print&jNhap nam %inh : j+R
% U $b.r)a4in)&+R
int i U/nt)g)r.par%)/nt&%+R
i\ &&i`UBb_]+ pp &iaU=B]]++ throJ n)J
Numb)riormath@c)ption&+R
G!%t)m.out.println&jNam %inh la : jVi+R
br)a$R
S
catch &/'h@c)ption )+QS
catch&Numb)riormath@c)ption )+Q
G!%t)m.out.println&jIan *hai nhap lai nam %inh trong
$hoang
Bb_] )n =B]]j+R
S
S
S
S
Iạn hã! @)m thêm (ava.lang.I!t)" (ava.lang.Ghort" (ava.lang./nt)g)r" (ava.lang.Houbl)"
(ava.lang.iloat đê# có được định nghĩa đầ! đu# các phương thức và biến cài đ>̣t cho các lớp nà!
M]
6ụ% lụ%
MỤC LỤC
Chương : 45̣ * 67/N1 189́N: ;<́/ 689̣N: 67'N: J2C2
/. 012́/ N/3̣. 45̣* 67/̀N1 189́N: ;<́/ 689̣N:
B. 4ập trình hướng đối tượng........................................................................................
=. 6rừu tượng hoá .........................................................................................................
//. C9 C13́ 67/3#N 012/ .< 1/̀ N1 189́N: ;<́/ 689̣ N:
B. 6ính đóng gói............................................................................................................
=. 6ính $ế thừa..............................................................................................................
M. 6ính đa hình..............................................................................................................
Chương: ;<́/ 689̣N: C2̀ 49́ *" .2#N:
/. K5N H8̣N: 49́*...................................................................................................................
//. 62̣' ;<́/ 689̣ N:
B. 0hai báo đối tượng...................................................................................................
=. Cách tru! @uất thành phần cu#a lớp...........................................................................
///. :/9́/ 61/3̣E C3̀ *189N: 618́C
B. 0hai báo phương thức..............................................................................................
=. *hạm vi tru! @uất thành phần cu#a lớp......................................................................
M. *hương thức .ain&+..................................................................................................
T. 1àm $hơ#i tạo............................................................................................................
W. 1àm hu#!...................................................................................................................
^. 6ừ $hoá thi%..............................................................................................................
_. Nạp chồng hàm.........................................................................................................
X. 6ru!ề n tham đối........................................................................................................
/C. 49́* 03́ 618̀2
B. 0hai báo $ế thừa.......................................................................................................
=. Ciết chồng hàm.........................................................................................................
M. 6ừ $hoá %up)r...........................................................................................................
C. 49́* C2̀ *189N: 618́C 678̀E 689̣N:.........................................................................
C/. 49́* 1f̀N: &01<N: 03́ 618̀ 2+ C2̀ 12̀. 1f̀N: &01<N: C/3́6 C1<̀N:+
B. Cấm %ự viết chồng....................................................................................................
=. Cấm %ự $ế thừa.........................................................................................................
C//. 49́* 4<̀ N: N12E
C///. C1EN3#N ;<#/ 0/3#E
B. 0iê#u %ơ cấp thành $iê#u phức hợp.............................................................................
=. :iữa các $iê#u phức hợp............................................................................................
/K. .2#N:
B. 6ạo và %ư# ụng ma#ng................................................................................................
=. .a#ng đa chiều..........................................................................................................
M. Gao ch)́p ma# ng..........................................................................................................
Chương : :'́/ C2̀ :/2' H/3̣N
/. :'́/
B. ;ịnh nghĩa gói..........................................................................................................
=. ;iều $hiê#n tru! @uất.................................................................................................
M. Gư# ụng gói...............................................................................................................
//. :/2' H/3̣N
B. ;ịnh nghĩa giao iện.................................................................................................
=. 1iện thực giao iện...................................................................................................
M. 6ru! @uất hiện thực thông -ua tham chiếu giao iện...............................................
MB
6ụ% lụ%
T. Iiến trong giao iện.................................................................................................
W. 0ế thừa giao iện......................................................................................................
Chương : 49́ * G67/N: C2̀ NE.Ih7
/. 6<# N: mE2́6..............................................................................................................
//. 49́ * G67/N:.............................................................................................................
///. 49́ * NE.Ih7.........................................................................................................
M=

You're Reading a Free Preview

Tải về
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->