Lý thuyết môn học Cơ sở lập trình nội dung "Lập trình hướng đối tượng trong Java"

Lý thuyết môn học Cơ sở lập trình nội dung "Lập trình hướng đối tượng trong Java" của Đại học Nguyễn Tất Thành với những kiến thức và thông tin bổ ích giúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao cũng như có thể vận dụng tốt những kiến thức mình đã học vào thực tiễn cuộc sống. Mời bạn đọc đón xem!

lOMoARcPSD|36667950
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TRONG JAVA
1/. Lập trình hướng đối tượng (OOP-Object-Oriented Programming):
Là một phương pháp hay mô hình giúp tăng năng suất, đơn giản hóa việc bảo trì, dễ dàng mở rộng trong
thiết kế phần mềm bởi việc cung cấp một vài khái niệm như:
Đối tượng (Object)
Lớp (Class)
Kế thừa (Inheritance)
Đa hình (Polymorphism)
Trừu tượng (Abstraction)
Đóng gói (Encapsulation)
2/. Lập trình hướng đối tượng có 4 tính chất:
3/. Đối tượng (Object):
Tất cả những thực thể có trạng thái và hành vi được biết đến như là một đối tượng của thế giới thực. Ví
dụ: bàn, ghế, bút chì, xe đạp, ô tô…
4/. Lớp (Class):
Tập hợp các đối tượng có cùng thuộc tính được gọi là lớp.
5/. Kế thừa (Inheritance):
Khi một đối tượng được truyền lại tất cả các thuộc tính và phương thức của đối tượng cha được gọi là kế
thừa. Kế thừa giúp tái sử dụng lại mã nguồn. Nó được sử dụng cho đa hình lúc runtime.
6/. Đa hình (Polymorphism):
Khi một nhiệm vụ được thực hiện bởi nhiều cách khác nhau, tính chất này được gọi là đa hình. Ví dụ có
nhiều cách để thuyết phục các khách hàng khác nhau, nhiều thứ để vẽ như hình tròn, hình chữ nhật,
Trong java, để áp dụng tính đa hình chúng ta sử dụng phương thức orverloading hoặc overriding.
lOMoARcPSD|36667950
7/. Trừu tượng (Abstraction):
Trừu tượng sự ẩn đi những chi tiết bên trong hiển thị ra các chức năng, tính chất này gọi trừu
tượng. dụ: khi gọi điện thoại chúng ta không biết xử nội bộ thế nào, khi đi xe y cũng vậy,
chúng ta chỉ biết đến các chức năng thông qua giao tiếp bên ngoài.
Trong java, chúng ta áp dụng tính chất trừu tượng bằng cách sử dụng abstract class và interface.
8/. Đóng gói (Encapsulation):
Việc ràng buộc giữa code data với nhau tạo thành một khối duy nhất được biết đến đóng gói.
dụ: viên thuốc con nhộng được đóng gói với nhiều loại thuốc bên trong.
Một class trong java một dụ về đóng gói. Java bean một lớp được đóng gói hoàn toàn tất cả
các dữ liệu thành viên là private.
9/. Thế mạnh của OOPs so với ngôn ngữ lập trình hướng thủ tục:
i. Lập trình hướng đối tượng giúp việc phát triển bảo trì dễ dàng hơn. Trong khi phương pháp
lập trình hướng thủ tục là không dễ dàng quản lý khi code lớn.
ii. Lập trình hướng đối tượng có tính năng ẩn dấu thông tin, trong khi hướng thủ tục có thể truy cập
dữ liệu toàn cục ở bất kỳ nơi nào
iii. Lập trình hướng đối tượng cung cấp khả năng mô phỏng sự kiện thực tế hiệu quả hơn.
ĐỐI TƯỢNG và LỚP TRONG JAVA
1/. Đối tượng (Object):
Đối tượng một đơn vị bản của lập trình hướng đối tượng đại diện cho các thực thể trong cuộc
sống thực. Một chương trình Java điển hình tạo ra nhiều đối tượng, như ta biết, tương tác với đối tượng
bằng cách gọi các phương thức.
Một đối tượng bao gồm:
Trạng thái (State): Nó được thể hiện bằng các thuộc tính của một đối tượng. Nó cũng phản ánh
các thuộc tính của một đối tượng.
Hành vi (Method): Nó được thể hiện bằng các phương thức của một đối tượng. cũng phản
ánh phản ứng của một đối tượng với các đối tượng khác.
Định danh (Identity): đặt một tên (key) duy nhất cho một đối tượng cho phép một đối
tượng phân biệt với các đối tượng khác.
Ví dụ: về một đối tượng người, cây cối, thú, xe,...
Đối tượng(Object) một thể hiện của một lớp(Class). Lớp một mẫu hoặc thiết kế từ đó các đối
tượng được tạo ra. Vì vậy, đối tượng là các thể hiện (kết quả) của một lớp. Đối tượng phải thể hiện được:
identity (thuộc tính nhận diện), State/Attributes (trạng thái / thuộc tính), Behaviors (hành vi / phương
thức).
lOMoARcPSD|36667950
Đối tượng tương ứng với những thứ tìm thấy trong thế giới thực. Chẳng hạn, một chương trình đồ họa
có thể có các đối tượng như vòng tròn đường phố, đường vuông góc, đường menu Menu. Một hệ thống
mua sắm trực tuyến có thể các đối tượng như giỏ hàng mua hàng trực tuyến, khách hàng trực tuyến,
và sản phẩm trực tuyến.
Ví dụ: quan sát hình sau:
2/. Lớp (Class):
Các lớp và các đối tượng là các khái niệm cơ bản của lập trình hướng đối tượng xoay quanh các thực thể
trong cuộc sống thực.
Một lớp một bản thiết kế hoặc nguyên mẫu do người dùng định nghĩa từ đó các đối tượng được tạo.
Lớp đại diện cho tập các thuộc tính, phương thức chung cho tất cả các đối tượng của một loại. Nói chung,
khai báo lớp có thể bao gồm các thành phần sau:
Modifiers: Một lớp có thể là public (công khai) hoặc private (chỉ có hiệu lực trong nội bộ Class,
nhằm mục đích che giấu thông tin, ngăn cản sự truy cập không mong muốn ) default (mặc định
tương tự public) hoặc protected (tương tự default nhưng cho phép kế thừa dù lớp con và cha khác
gói).
Class name: Tên nên bắt đầu bằng một chữ cái đầu tiên (viết hoa theo quy ước).
Superclass (nếu có): Tên của lớp cha (superclass), nếu có, đứng trước từ khóa extends (mở rộng).
Một lớp chỉ có thể mở rộng (subclass) từ một lớp cha.
Interfaces (nếu có): Danh sách các giao diện được phân tách bằng dấu phẩy được thực hiện bởi
lớp, nếu có, trước từ khóa implements (thực hiện). Một lớp có thể có nhiều giao diện.
Body: Thân lớp được bao quanh bởi dấu ngoặc nhọn, {} có chứa:
Thành viên dữ liệu
Constructor
Phương thức
lOMoARcPSD|36667950
Khối lệnh
Lớp con và Interface (nếu có)
pháp khai báo: xem ví dụ
dụ:
Truy xuất thuộc tính, phương thức:
Ví dụ:
public class Car
{
private String color;
//thành viên / field
private String model;
private int year;
public Car(String color, String model, int year)
{
this.color = color;
this.model = model;
this.year = year;
}
public String getColor()
//method / function
{
return color;
}
public String getModel()
//method / function
{
return model;
}
public int getYear()
//method / function
{
return year;
}
}
Object.
thuộc tính
Object.
phương thức()
lOMoARcPSD|36667950
public
class
Dog
{
//khai báo Instance Variables|Field|Properties.
String name;
String breed;
int
age;
String color;
//khai báo Constructor ca lp
public
Dog(String
name
, String
breed
,int
age
, String
color
)
{
this.name =
name
;
//tên
this.breed =
breed
;
//ging
this.age =
age
;
//tui
this.color =
color
;
//màu lông
}
//
method 1
public
String getName()
{
return
name;
}
//
method 2
public
String getBreed()
lOMoARcPSD|36667950
Kết quả:
Hi my name is Lucky.
My breed, age and color are papillon, 5, white
3/. Các cách để tạo đối tượng trong java:
Có 04 cách để tạo đối tượng trong java, đó là:
1. Sử dụng từ khóa new
2. Sử dụng phương thức newInstance()
3. Sử dụng phương thức clone()
4. Sử dụng Deserialization
{
return
breed;
}
// method 3
public
int
getAge()
{
return
age;
}
// method 4
public
String getColor()
{
return
color;
}
// method xut thông tin
public
String output()
{
return("Hi my name is "+ this.getName()+
".\nMy breed, age and color are "
+
this.getBreed()+", "
+
this.getAge()+
", "+ this.getColor());
}
public
static
void
main(String[] args)
{
Dog x =
new
Dog("Lucky","papillon", 5, "white");
System.out.println(x.output());
}
}
lOMoARcPSD|36667950
3.1/. Sử dụng từ khóa new:
Đây là cách phổ biến và chung nhất để tạo đối tượng trong java.
dụ:
3.2/. Sử dụng phương thức newInstance():(sinh viên tham khảo)
một lớp được c định trước trong gói java.lang với tên Class. Phương thức forName (String
className) trả về đối tượng Class được liên kết với lớp theo tên chuỗi đã cho. Chúng tôi phải đặt tên đủ
điều kiện cho một lớp. Khi gọi phương thức new Instance () trên lớp đối tượng này sẽ trả về thể hiện
mới của lớp với tên chuỗi đã cho. Ví dụ:
//creating object of public class Test
//consider class Test present in com.p1 package
Test obj = (Test)Class.forName("com.p1.Test").newInstance();
3.3/. Sử dụng phương thức clone():
Phương thức clone () có trong lớp Object. Nó tạo và trả về một bản sao của đối tượng.
dụ:
3.4/. Sử dụng Deserialization: (sinh viên tham khảo)
De-serialization là kỹ thuật đọc một đối tượng từ trạng thái đã lưu trong một tập tin.
dụ:
FileInputStream file = new FileInputStream(filename);
ObjectInputStream in = new ObjectInputStream(file);
Object obj = in.readObject();
4/. Đối tượng Annonymous trong java:
Các đối tượng ẩn danh các đối tượng được khởi tạo nhưng không được lưu trữ trong một biến tham
chiếu.
Chúng được sử dụng để gọi phương thức ngay lập tức.
Chúng sẽ bị phá hủy sau khi gọi phương thức.
Ví dụ: myClass là đối tượng ẩn danh, chỉ được gọi 1 lần new myClass().message()
//creating object of class Test
Test t = new Test();
//creating object of class Test
Test t1 = new Test();
//creating clone of above object
Test t2 = (Test)t1.clone();
public
class
myClass
{
lOMoARcPSD|36667950
Kết quả:
I'm anonymous object!
MỘT SỐ VÍ DỤ THAM KHẢO
Ví dụ 1:
Kết quả:
Giai th a c a 5 là: 120
Ví dụ 2:
public class Car
{
String colour;
String model;
double mileage;
public
class
AA
{
void
fact(
int
n
)
{
int
kq
= 1;
for
(
int
i
= 1;
i
<=
n
;
i
++)
kq
=
kq
*
i
;
System.
out
.println(
"Giai tha ca "
ừủ
+
n
+
" là: "
+
kq
)
;
}
public
static
void
main(String[]
args
)
{
//gi phng thc ca đi tng annonymous
ứủốượ
ươ
new
AA().fact(5);
}
}
public
String message()
{
return
"I'm anonymous object!"
;
}
public
static
void
main(String[]
args
)
{
System.
out
.println(
new
myClass().message());
}
}
lOMoARcPSD|36667950
public void startCar()
{
System.out.println("Car starts !");
}
public void changeGears()
{
System.out.println("Gears changed !");
}
public void stopCar()
{
System.out.println("Car stopped !");
}
public String getInfo()
{
return ("Model:" +model + " Colour:" + colour + " Mileage:" +mileage);
}
public static void main (String args[])
{
Car Suzuki = new Car();
Suzuki.model = "Class A_2021";
Suzuki.colour = "Black";
Suzuki.mileage = 500.00;
Suzuki.startCar();
System.out.println(Suzuki.getInfo());
Suzuki.stopCar();
System.out.println("Bye.");
}
package HK2_2022; import
java.util.Scanner; public
class Mobile
{
String phone_Name;
String company;
float size;
// Method of class Mobile
public void printPhoneDetail()
{
System.out.println("Phone Name = "+ phone_Name);
}
Kết quả:
Ví dụ 3:
lOMoARcPSD|36667950
System.out.println("Company Name = "+ company);
System.out.println("Size = "+ size +" inch");
}
public static void main (String arg[])
{
Scanner input = new Scanner(System.in);
// Now creating first object of type class Mobile
Mobile newMobile1 = new Mobile();
// access the variable by using first object
System.out.print("Nh p Tên đi n tho i : " );
String pName = input.nextLine();
System.out.print("Nh p Hãng đi n tho i : " );
String cName = input.nextLine();
System.out.print("Nh p Size đi n tho i : "
); float pSize = input.nextFloat();
newMobile1.phone_Name = pName;
newMobile1.company = cName; newMobile1.size =
pSize;
// access the method by using first object
newMobile1.printPhoneDetail();
// Now creating second object of type class Mobile
Mobile newMobile2 = new Mobile();
// access the variable by using second object
newMobile2.phone_Name = "Iphone";
newMobile2.size = 6;
// access the method by using second object
newMobile2.printPhoneDetail()
; System.out.print("Bye.");
input.close(); }
5/. Sự khác nhau giữa lớp và đối tượng trong java:
Sự khác nhau giữa lớp và đối tượng trong java được thống kê trong bảng sau:
No Đối tượng Lớp
1. Đối tượng là thể hiện của 1 lớp. Lớp một khuôn mẫu hay thiết kế để tạo ra
các đối tượng.
}
Kết quả:
lOMoARcPSD|36667950
2. Đối tượng là 1 thực thể trong thế Lớp một nhóm các đối tượng tương tự giới
thực như Bút chì, Xe đạp, … nhau.
3. Đối tượng là 1 thực thể vật lý Lớp là 1 thực thể logic
4. Đối tượng được tạo ra chủ yếu từ từ Lớp được khai báo bằng việc sử dụng từ khóa
new. khóa class.
Ví dụ: Student s1=new Student(); Ví dụ: class Student{}
5. Đối tượng có thể được tạo nhiều Lớp được khai báo 1 lần duy nhất. lần.
6. Đối tượng được cấp bộ nhớ khi nó Lớp không được cấp bộ nhớ khi được tạo
được tạo ra. ra.
7. Có rất nhiều cách để tạo ra đối Chỉ có một cách để định nghĩa lớp trong tượng trong
java như từ khóa new, java sử dụng từ khoá class. phương thức newInstance(),
phương thức clone(), ...
CONSTRUCTOR TRONG JAVA
1/. Constructor trong Java:
Constructor trong java một phương thức đặc biệt của class được sdụng để khởi tạo các đối tượng.
Java Constructor được gọi tại thời điểm tạo đối tượng. khởi tạo các giá trị để cung cấp dữ liệu cho
các đối tượng, đó là lý do tại sao nó được gọi là constructor. Khi nào thì một constructor được gọi?
Mỗi khi một đối tượng được tạo bằng từ khóa new (), ít nhất một constructor (hàm khởi tạo, thể
m khởi tạo mặc định) được gọi để gán giá trị ban đầu cho các thành viên dữ liệu / của thuộc tính của
một lớp.
2/. Các quy tắc tạo constructor trong Java:
Các quy tắc cơ bản cho việc tạo constructor:
Tên constructor phải giống tên lớp chứa nó.
Constructor không thể là abstract, final, static, Synchronized Constructor không trả về giá trị.
3/. Các kiểu của Java constructor:
Có 2 kiểu của constructor
Constructor mặc định (không có tham số truyền vào)
Constructor có tham số
3.1/. Constructor mặc định (default constructor):
Constructor không có đối số là hàm khởi tạo không có tham số được gọi. Nếu chúng ta không định nghĩa
một constructor trong một lớp thì trình biên dịch sẽ tạo ra constructor (không có đối số) cho lớp đó.
nếu chúng ta viết một m tạo với các đối số hoặc không có đối số thì trình biên dịch không tạo ra hàm
lOMoARcPSD|36667950
tạo mặc định. Constructor mặc định cung cấp các giá trị mặc định cho đối tượng n0, null, v.v. y
thuộc vào kiểu dữ liệu.
null
0
{
System.out.println("Gi Constructor.");
}
}
class GFG {
public static void main (String[] args)
{ //gi default
constructor. Test1 x = new
Test1();
//Default constructor cung cp giá tr mc đnh
//là giá tr null, 0
Ví dụ:
không có constructor
//minh ha cho Ct không có constructor
import
java.io.*;
class
Test1
{
int
num;
String name;
}
class
GFG
{
public
static
void
main (String[] args)
{
//gi default constructor.
Test1 x = new
Test1
()
;
System.out.println(x.name);
System.out.println(x.num);
}
}
Kết quả:
Ví dụ:
có constructor không tham số
//minh ha cho constructor không tham s (no-argument)
import
java.io.*;
class
Test1
{
int
num;
String name;
Test1()
lOMoARcPSD|36667950
System.out.println(x.name);
System.out.println(x.num);
}
}
Kết quả :
G i
Constructor.
null 0
3.2/. Constructor có tham số (parameterized constructor):
Một constructor có tham số được gọi là constructor tham số hóa. Nếu chúng ta muốn khởi tạo các field
(trường) của lớp bằng các giá trị của riêng, thì hãy sử dụng constructor với tham số. Ví dụ:
class
Test2
{
int
num
;
String
name
;
//constructor có 02 tham s dùng khi to d liu đi tng
ởạữệốượ
Test2(
int
num
, String
name
)
{
this
.
num
=
num
;
this
.
name
=
name
;
}
}
public
class
CFG2
{
public
static
void
main(String[]
args
)
{
//gi constructor có cung cp tham s
Test2
x
=
new
Test2(100,
"Bill Gates"
)
;
lOMoARcPSD|36667950
Kết quả :
Num: 100
Name: Bill Gates
4/. Constructor :
Constructor Overloading là một kỹ thuật trong Java. Ta có thể tạo nhiều constructor trong cùng một lớp
với danh sách tham số truyền vào khác nhau. Trình biên dịch sẽ phân biệt các constructor này thông qua
số lượng kiểu của các tham số truyền vào. Constructor Overloading thực hiện tương tự như các
phương thức khác.
Ví dụ: tạo file CFG3.Java
Overloading
System.
out
.println(
"Num: "
+
x
.
num
)
;
System.
out
.println(
"Name: "
+
x
.
name
)
;
}
}
class
Test
{
//constructor có 1 tham s kiu String
ốể
Test(String
name
)
{
System.
out
.println(
"Constructor có 1 tham s - String: "
+
name
)
;
}
//constructor có 2 tham s kiu String, int
ốể
Test(String
name
,
int
age
)
{
System.
out
.println(
"Constructor có 2 tham s - String, Int: "
+
name
+
", "
+
age
)
;
}
//constructor có 1 tham s kiu Long
ốể
Test(
long
id
)
{
System.
out
.println(
"Constructor có 1 tham s - Long: "
+
id
)
;
}
}
public
class
CFG3
{
public
static
void
main(String[]
args
)
{
//To các đi tng có truyn các tham s khác nhau
ốượ
//Gi constructor truyn 1 tham s kiu String
ốể
Test
x
=
new
Test(
"H Chí Minh"
)
;
lOMoARcPSD|36667950
//G i constructor truy n 2 tham s ki u String, int
Test y = new Test("Nguy n T t Thành" ,
130);
//G i constructor truy n 1 tham s ki u Long
Test z = new Test(123456789);
} }
Kết quả:
Constructor có 1 tham s - String: H Chí Minh
Constructor có 2 tham s - String, Int: Nguy n T t Thành, 130
Constructor có 1 tham s - Long: 123456789
Bài tập mẫu: Khai báo Class Sinhvien như hình sau, viết chương trình Test Drive Class Sinhvien.
Tạo file Sinhvien.Java như sau: dùng từ khóa this (chỉ đối tượng hiện tại / đang làm việc) 2
constructor.
package
Goi1;
import
java.util.Scanner;
public
class
Sinhvien
{
public
String
hoten
;
public
double
diemtb
;
public
Sinhvien()
{
//
this
.
hoten
=
"No name"
;
//
this
.
diemtb
=0.0
;
}
public
Sinhvien(String
ten
,
double
diem
)
lOMoARcPSD|36667950
Tạo file TestSinhvien.Java như sau:
{
this
.
hoten
=
ten
;;
this
.
diemtb
=
diem
;
}
public
void
xuat()
{
System.
out
.println(
"H tên: "
+
this
.
hoten
)
;
System.
out
.println(
"Đim TB: "
+
this
.
diemtb
)
;
}
public
void
nhap()
{
Scanner
input
=
new
Scanner(System.
in
;
)
String
ten
=
""
;
double
diem
=0.0
;
System.
out
.print(
"Nhp H tên: "
)
;
ten
=
input
.nextLine();
do
{
System.
out
.print(
"Nhp đim: "
;
)
diem
=
input
.nextDouble();
}
while
((
diem
<0)
||
(
diem
;
>10))
this
.
hoten
=
ten
;
this
.
diemtb
=
diem
;
}
public
String xepLoai()
{
String
kq
=
""
;
if
(
this
.
diemtb
<5)
kq
=
"Yu"
ế
;
else
if
((
this
.
diemtb
>= 5) && (
this
.
diemtb
<7))
kq
=
"Trung bình"
;
else
if
((
this
.
diemtb
>= 7) && (
this
.
diemtb
<8.5))
kq
=
"Khá"
;
else
kq
=
"Gii"
;
return
kq
;
}
}
package
Goi1;
import
Goi1.Sinhvien.*;
//đng quên khi khác gói
public
class
TestSinhvien {
public
static
void
main(String[]
args
{
)
Sinhvien
x
=
new
Sinhvien();
x
.nhap();
x
.xuat();
System.
out
.println(
"Xp loi: "
ế
+
x
.xepLoai());
Sinhvien
y
=
new
Sinhvien();
y
.nhap();
y
.xuat();
lOMoARcPSD|36667950
+ Nếu Class Sinhvien là private thì chương trình sẽ chạy như thế nào?
+ Nếu bỏ public của Class Sinhvien thì chương trình sẽ chạy như thế nào?
5/. Sự khác nhau giữa constructor và phương thức trong Java:
Constructor Phương thức (Method / Function)
Constructor được sử dụng để khởi tạo Phương thức được sử dụng để thực hiện tác động cho trạng thái
của một đối tượng. một đối tượng.
Constructor không có kiểu trả về. Phương thức có kiểu trả về hoặc không (void).
Constructor được gọi ngầm. Phương thức được gọi tường minh.
Trình biên dịch Java tạo ra constructor Phương thức không được tạo ra bởi trình biên dịch
mặc định nếu ta không có constructor Java. nào.
Tên của constructor phải giống tên lớp. Tên phương thức thể giống hoặc khác tên lớp. (nên khác
để tránh nhầm lẫn)
Bài tập mẫu:
Tạo file Hinhtron.Java
package Goi1;
public class Hinhtron { // Save file v i tên "Hinhtron.java"
//khai báo các h ng sằố
public static final double DEFAULT_RADIUS = 2.5;
public static final String DEFAULT_COLOR = "black";
System.
out
.println(
"Xp loi: "
ế
+
y
.xepLoai());
Sinhvien z =
new
Sinhvien(
"Trn Văn Rt", 7.6
;
)
z
.xuat();
System.
out
.println(
"Xp loi: "
ế
+
z
.xepLoai());
}
}
Kết quả:
lOMoARcPSD|36667950
Tạo file chương trình (Test Drive) TestHinhtron.Java:
lOMoARcPSD|36667950
package Goi1;
import Goi1.Hinhtron.*; //đ ng thi u l nh này
ểế import java.io.*; public class TestHinhtron
{ public static void main(String[] args) throws IOException {
//Save file v i tên TestHinhtron.Java
// G i constructors and xuattt()
InputStreamReader is=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(is);
Hinhtron c1 = new Hinhtron(1.1, "blue");
System.out.println(c1.xuatTT());
Hinhtron c2 = new Hinhtron(2.2);
System.out.println(c2.xuatTT());
Hinhtron c3 = new Hinhtron();
System.out.println(c3.xuatTT());
// Test ph ng th c Set và Getươ
System.out.print("Nh p Bán kinh hình tròn: "
); double bk =
Double.parseDouble(br.readLine());
c1.setBanKinh(bk); //c1.setBanKinh(5.0);
System.out.print("Nh p Màu hình tròn: ");
String mau = br.readLine();
c1.setMau(mau);
//c1.setMau("green");
System.out.println(c1.xuatTT());
System.out.println("Bán kính là : " + c1.getBanKinh());
System.out.println("Màu là: " + c1.getMau());
// Test getArea() and getCircumference()
System.out.printf("Di n tích là: %.2f%n", c1.getDienTich());
System.out.printf("Chu vi là: %.2f%n", c1.getChuVi());} }
Bài tập 1
:
Khai báo Class
Hanghoa
theo hình sau:
lOMoARcPSD|36667950
Downloaded by Albedo Lili (albedo0208@gmail.com)
Bài tập 2: Khai báo Class Nhanvien theo hình và viết chương trình Test drive thực hiện nhập dữ liệu cho 2
nhân viên và xuất kết quả ra cho xem.
lOMoARcPSD|36667950
Downloaded by Albedo Lili (albedo0208@gmail.com)
Phương thức getter và setter
1/. Giới thiệu:
Ta đã học được từ bài học trước rằng các thuộc tính private chỉ có thể được truy cập trong cùng một lớp
(một lớp bên ngoài không có quyền truy cập đến nó). Tuy nhiên, có thể truy cập đến chúng nếu Ta cung
cấp các phương thức getter và setter là public.
Phương thức get trả về giá trị của thuộc tính / Field/ biến phương thức set đặt giá trị cho thuộc tính /
Field/ biến.
Đây là đặc trưng của Encapsulation (tính đóng gói), có lợi ích như sau:
Các thuộc tính của một Class có thể được là chỉ đọc, chỉ ghi.
Một Class có toàn quyền kiểm soát những gì được lưu trữ trong các thuộc tính của nó.
Cú pháp cho cả hai getter và setter là chúng bắt đầu bằng get hoặc set, theo sau là tên của thuộc
tính Field/ biến, với chữ cái đầu tiên viết hoa: Ví dụ:
Xem chương trình sử dụng: (sinh viên chú ý nghe giảng và ghi nhớ)
Giải quyết bằng Setter Getter:
public class MyClass {
public
class
Person
{
private
String
name;
//private = gii hn truy cp
ớạ
//phng thc Getter
public
String
getName() {
return
name;
}
//phng thc Setter
public
void
setName(
String
newName) {
this
.
name
=
newName;
}
}
public
class
MyClass {
public
static
void
main(
String
[]
args)
{
Person myObj =
new
Person();
myObj.
name
=
"Tom Bille"
;
//li
System.
out
.
println
myObj.
(
name
)
;
//li
}
}
public
static
void
main(
String
{
[]
args)
Person myObj =
new
Person();
myObj.
setName
(
"Tom Bille"
)
;
lOMoARcPSD|36667950
Downloaded by Albedo Lili (albedo0208@gmail.com)
2/. dụ áp dụng: (sinh viên tìm hiểu) BT mẫu 1: Tạo file Person.Java:
class Person
Tạo file TestPerson.Java:
//đt giá tr cho name là "Tom Bille"
System.
out
.
println
(
myObj.
getName
())
;
//xut ra
"Tom Bille"
}
}
package
Goi4;
{
private
String
name
;
private
String
address
;
private
int
age
;
Person(String
x1
, String x2,
int
x3) {
this
.
name
=
x1
;
this
.
address
= x2;
this
.
age
=
x3
;
}
Person(String
name
, String
address
,
int
age
)
{
this
.
name
=
name
;
this
.
address
=
address
;
this
.
age
=
age
;
}
public
String getName() {
return
this
.
name
;
}
public
String getAddress() {
return
this
.
address
;
}
public
int
getAge() {
return
this
.
age
;
}
}
package
Goi4;
import
java.io.*;
import
Goi4.Person;
public
class
TestPerson
{
public
static
void
main(String[]
args
)
throws
IOException {
InputStreamReader
is
=
new
InputStreamReader(System.
in
;
)
lOMoARcPSD|36667950
BufferedReader br=new BufferedReader(is);
Person x0 =new Person(); //l i: gi i thích t i sao
sai?
String ten, diachi, ch;
int tuoi;
System.out.print("Nh p H tên ng i: " ườ );
ten = br.readLine();
System.out.print("Nh p Đ a ch : " ỉể );
diachi = br.readLine();
System.out.print("Nh p tu i: " ổể ); tuoi
= Integer.parseInt(br.readLine());
Person x1=new Person(ten, diachi, tuoi);
System.out.println("Xem l i ng i v a nh p:" ườ );
System.out.println("___________________________________");
System.out.println("H tên ng i: " ườ +
x1.getName());
System.out.println("Đ a ch : " +
x1.getAddress());
System.out.println("Tu i : " + x1.getAge());
System.out.println("___________________________________");
System.out.println("Xem l i H tên ng i: " + x1.name);
ườ //l i, gi i thích t i sao? }
}
lOMoARcPSD|36667950
BT mẫu 2:
Tạo file
Animals.Java
:
package
Goi4;
public
class
Animals {
private
int
id
;
private
String
name
;
public
String getName() {
return
name
;
}
public
void
setName(String
name
{
)
this
.
name
=
name
;
}
public
int
getId() {
return
id
;
}
public
void
setId(
int
id
)
{
this
.
id
=
id
;
}
}
Tạo file
TestAnimals.Java
:
lOMoARcPSD|36667950
package
Goi4;
import
java.io.*;
import
Goi4.Animals;
public
class
TestAnimals
{
public
static
void
main(String[]
args
)
throws
IOException
{
InputStreamReader
is
=
new
InputStreamReader(System.
in
;
)
BufferedReader
br
=
new
BufferedReader(
is
;
)
String
ten
;
int
ms
;
Animals
x
=
new
Animals();
System.
out
.print(
"Nhp Mã s Thú: "
;
)
ms
= Integer.
parseInt
(
br
.readLine());
System.
out
.print(
"Nhp Tên Thú: "
)
;
ten
=
br
.readLine();
x
.setId(
ms
)
;
x
.setName(
ten
)
;
System.
out
.println(
"Xem li con thú va nhp:"
;
)
System.
out
.println(
"___________________________________"
;
)
System.
out
.println(
"Mã s Thú : "
+
x
.getId());
System.
out
.println(
"Tên Thú : "
+
x
.getName());
System.
out
.println(
"___________________________________"
)
;
System.out.println("Xem li Tên Thú: " + x.name);
//li, gii thích ti sao?
}
}
| 1/25

Preview text:

lOMoARcPSD| 36667950
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TRONG JAVA
1/. Lập trình hướng đối tượng (OOP-Object-Oriented Programming):
Là một phương pháp hay mô hình giúp tăng năng suất, đơn giản hóa việc bảo trì, dễ dàng mở rộng trong
thiết kế phần mềm bởi việc cung cấp một vài khái niệm như: • Đối tượng (Object) • Lớp (Class) • Kế thừa (Inheritance) • Đa hình (Polymorphism) • Trừu tượng (Abstraction) • Đóng gói (Encapsulation)
2/. Lập trình hướng đối tượng có 4 tính chất:
3/. Đối tượng (Object):
Tất cả những thực thể có trạng thái và hành vi được biết đến như là một đối tượng của thế giới thực. Ví
dụ: bàn, ghế, bút chì, xe đạp, ô tô… 4/. Lớp (Class):
Tập hợp các đối tượng có cùng thuộc tính được gọi là lớp.
5/. Kế thừa (Inheritance):
Khi một đối tượng được truyền lại tất cả các thuộc tính và phương thức của đối tượng cha được gọi là kế
thừa. Kế thừa giúp tái sử dụng lại mã nguồn. Nó được sử dụng cho đa hình lúc runtime.
6/. Đa hình (Polymorphism):
Khi một nhiệm vụ được thực hiện bởi nhiều cách khác nhau, tính chất này được gọi là đa hình. Ví dụ có
nhiều cách để thuyết phục các khách hàng khác nhau, nhiều thứ để vẽ như hình tròn, hình chữ nhật, …
Trong java, để áp dụng tính đa hình chúng ta sử dụng phương thức orverloading hoặc overriding. lOMoARcPSD| 36667950
7/. Trừu tượng (Abstraction):
Trừu tượng là sự ẩn đi những chi tiết bên trong và hiển thị ra các chức năng, tính chất này gọi là trừu
tượng. Ví dụ: khi gọi điện thoại chúng ta không biết xử lý nội bộ thế nào, khi đi xe máy cũng vậy, mà
chúng ta chỉ biết đến các chức năng thông qua giao tiếp bên ngoài.
Trong java, chúng ta áp dụng tính chất trừu tượng bằng cách sử dụng abstract class và interface.
8/. Đóng gói (Encapsulation):
Việc ràng buộc giữa code và data với nhau tạo thành một khối duy nhất được biết đến là đóng gói. Ví
dụ: viên thuốc con nhộng được đóng gói với nhiều loại thuốc bên trong.
Một class trong java là một ví dụ về đóng gói. Java bean là một lớp được đóng gói hoàn toàn vì tất cả
các dữ liệu thành viên là private.
9/. Thế mạnh của OOPs so với ngôn ngữ lập trình hướng thủ tục: i.
Lập trình hướng đối tượng giúp việc phát triển và bảo trì dễ dàng hơn. Trong khi phương pháp
lập trình hướng thủ tục là không dễ dàng quản lý khi code lớn. ii.
Lập trình hướng đối tượng có tính năng ẩn dấu thông tin, trong khi hướng thủ tục có thể truy cập
dữ liệu toàn cục ở bất kỳ nơi nào iii.
Lập trình hướng đối tượng cung cấp khả năng mô phỏng sự kiện thực tế hiệu quả hơn.
ĐỐI TƯỢNG và LỚP TRONG JAVA
1/. Đối tượng (Object):
Đối tượng là một đơn vị cơ bản của lập trình hướng đối tượng và đại diện cho các thực thể trong cuộc
sống thực. Một chương trình Java điển hình tạo ra nhiều đối tượng, như ta biết, tương tác với đối tượng
bằng cách gọi các phương thức.
Một đối tượng bao gồm:
Trạng thái (State): Nó được thể hiện bằng các thuộc tính của một đối tượng. Nó cũng phản ánh
các thuộc tính của một đối tượng.
Hành vi (Method): Nó được thể hiện bằng các phương thức của một đối tượng. Nó cũng phản
ánh phản ứng của một đối tượng với các đối tượng khác.
Định danh (Identity): Nó đặt một tên (key) duy nhất cho một đối tượng và cho phép một đối
tượng phân biệt với các đối tượng khác.
Ví dụ: về một đối tượng người, cây cối, thú, xe,...
Đối tượng(Object) là một thể hiện của một lớp(Class). Lớp là một mẫu hoặc thiết kế từ đó các đối
tượng được tạo ra. Vì vậy, đối tượng là các thể hiện (kết quả) của một lớp. Đối tượng phải thể hiện được:
identity (thuộc tính nhận diện), State/Attributes (trạng thái / thuộc tính), Behaviors (hành vi / phương thức). lOMoARcPSD| 36667950
Đối tượng tương ứng với những thứ tìm thấy trong thế giới thực. Chẳng hạn, một chương trình đồ họa
có thể có các đối tượng như vòng tròn đường phố, đường vuông góc, đường menu Menu. Một hệ thống
mua sắm trực tuyến có thể có các đối tượng như giỏ hàng mua hàng trực tuyến, khách hàng trực tuyến,
và sản phẩm trực tuyến.
Ví dụ: quan sát hình sau: 2/. Lớp (Class):
Các lớp và các đối tượng là các khái niệm cơ bản của lập trình hướng đối tượng xoay quanh các thực thể trong cuộc sống thực.
Một lớp là một bản thiết kế hoặc nguyên mẫu do người dùng định nghĩa từ đó các đối tượng được tạo.
Lớp đại diện cho tập các thuộc tính, phương thức chung cho tất cả các đối tượng của một loại. Nói chung,
khai báo lớp có thể bao gồm các thành phần sau:
Modifiers: Một lớp có thể là public (công khai) hoặc private (chỉ có hiệu lực trong nội bộ Class,
nhằm mục đích che giấu thông tin, ngăn cản sự truy cập không mong muốn ) default (mặc định
tương tự public) hoặc protected (tương tự default nhưng cho phép kế thừa dù lớp con và cha khác gói).
Class name: Tên nên bắt đầu bằng một chữ cái đầu tiên (viết hoa theo quy ước).
Superclass (nếu có): Tên của lớp cha (superclass), nếu có, đứng trước từ khóa extends (mở rộng).
Một lớp chỉ có thể mở rộng (subclass) từ một lớp cha.
Interfaces (nếu có): Danh sách các giao diện được phân tách bằng dấu phẩy được thực hiện bởi
lớp, nếu có, trước từ khóa implements (thực hiện). Một lớp có thể có nhiều giao diện.
Body: Thân lớp được bao quanh bởi dấu ngoặc nhọn, {} có chứa: Thành viên dữ liệu Constructor Phương thức lOMoARcPSD| 36667950 Khối lệnh
Lớp con và Interface (nếu có)
Cú pháp khai báo: xem ví dụ dụ: public class Car {
private String color; //thành viên / field private String model; private int year;
public Car(String color, String model, int year) //constructor { this.color = color; this.model = model; this.year = year; }
public String getColor() //method / function { return color; }
public String getModel() //method / function { return model; } public int getYear() //method / function { return year; } }
Truy xuất thuộc tính, phương thức: Object. thuộc tính
Object. phương thức() Ví dụ: lOMoARcPSD| 36667950
public class Dog {
//khai báo Instance Variables|Field|Properties. String name; String breed; int age; String color;
//khai báo Constructor của lớp
public Dog(String name , String breed ,int age , String color ) {
this.name = name ; //tên
this.breed = breed ; //giống
this.age = age ; //tuổi
this.color = color ; //màu lông }
// method 1
public String getName() { return name; } // method 2
public String getBreed() lOMoARcPSD| 36667950 { return breed; } // method 3
public int getAge() { return age; } // method 4
public String getColor() { return color; }
// method xuất thông tin
public String output() {
return("Hi my name is "+ this.getName()+
".\nMy breed, age and color are " +
this.getBreed()+", " + this.getAge()+
", "+ this.getColor()); }
public static void main(String[] args) {
Dog x = new Dog("Lucky","papillon", 5, "white");
System.out.println(x.output()); } } Kết quả: Hi my name is Lucky.
My breed, age and color are papillon, 5, white
3/. Các cách để tạo đối tượng trong java:
Có 04 cách để tạo đối tượng trong java, đó là:
1. Sử dụng từ khóa new
2. Sử dụng phương thức newInstance()
3. Sử dụng phương thức clone()
4. Sử dụng Deserialization lOMoARcPSD| 36667950
3.1/. Sử dụng từ khóa new:
Đây là cách phổ biến và chung nhất để tạo đối tượng trong java. dụ:
//creating object of class Test Test t = new Test();
3.2/. Sử dụng phương thức newInstance():(sinh viên tham khảo)
Có một lớp được xác định trước trong gói java.lang với tên Class. Phương thức forName (String
className) trả về đối tượng Class được liên kết với lớp theo tên chuỗi đã cho. Chúng tôi phải đặt tên đủ
điều kiện cho một lớp. Khi gọi phương thức new Instance () trên lớp đối tượng này sẽ trả về thể hiện
mới của lớp với tên chuỗi đã cho. Ví dụ:
//creating object of public class Test
//consider class Test present in com.p1 package
Test obj = (Test)Class.forName("com.p1.Test").newInstance();
3.3/. Sử dụng phương thức clone():
Phương thức clone () có trong lớp Object. Nó tạo và trả về một bản sao của đối tượng. dụ:
//creating object of class Test Test t1 = new Test();
//creating clone of above object Test t2 = (Test)t1.clone();
3.4/. Sử dụng Deserialization: (sinh viên tham khảo)
De-serialization là kỹ thuật đọc một đối tượng từ trạng thái đã lưu trong một tập tin. dụ:
FileInputStream file = new FileInputStream(filename);
ObjectInputStream in = new ObjectInputStream(file); Object obj = in.readObject();
4/. Đối tượng Annonymous trong java:
Các đối tượng ẩn danh là các đối tượng được khởi tạo nhưng không được lưu trữ trong một biến tham chiếu.
• Chúng được sử dụng để gọi phương thức ngay lập tức.
• Chúng sẽ bị phá hủy sau khi gọi phương thức.
Ví dụ: myClass là đối tượng ẩn danh, chỉ được gọi 1 lần new myClass().message()
public class myClass { lOMoARcPSD| 36667950
public String message() {
return "I'm anonymous object!" ; }
public static void main(String[] args ) {
System. out .println( new myClass().message()); } } Kết quả: I'm anonymous object!
MỘT SỐ VÍ DỤ THAM KHẢO Ví dụ 1: public class AA {
void fact( int n ) { int kq = 1;
for ( int i = 1; i <= n ; i ++) kq = kq * i ;
System. out .println( "Giai tha c
ừủ a " + n + " là: " + kq ) ; }
public static void main(String[] args ) { //gi ọ phng t ươ hc ca đi ứủố ư t ợ n g annonymous new AA().fact(5); } } Kết quả:
Giai th a c a 5 là: 120ừ ủ Ví dụ 2:
public class Car { String colour; String model; double mileage; lOMoARcPSD| 36667950
public void startCar() {
System.out.println("Car starts !"); }
public void changeGears() {
System.out.println("Gears changed !"); }
public void stopCar() {
System.out.println("Car stopped !"); }
public String getInfo() {
return ("Model:" +model + " Colour:" + colour + " Mileage:" +mileage); }
public static void main (String args[]) {
Car Suzuki = new Car();
Suzuki.model = "Class A_2021"; Suzuki.colour = "Black"; Suzuki.mileage = 500.00; Suzuki.startCar();
System.out.println(Suzuki.getInfo()); Suzuki.stopCar();
System.out.println("Bye."); } } Kết quả: Ví dụ 3:
package HK2_2022; import
java.util.Scanner; public class Mobile { String phone_Name; String company; float size; // Method of class Mobile
public void printPhoneDetail() {
System.out.println("Phone Name = "+ phone_Name); lOMoARcPSD| 36667950
System.out.println("Company Name = "+ company);
System.out.println("Size = "+ size +" inch"); }
public static void main (String arg[]) {
Scanner input = new Scanner(System.in);
// Now creating first object of type class Mobile
Mobile newMobile1 = new Mobile();
// access the variable by using first object
System.out.print("Nh p Tên đi n tho i : "ậ ệ ạ );
String pName = input.nextLine();
System.out.print("Nh p Hãng đi n tho i : "ậ ệ ạ );
String cName = input.nextLine();
System.out.print("Nh p Size đi n tho i : "ậ ệ
ạ ); float pSize = input.nextFloat(); newMobile1.phone_Name = pName;
newMobile1.company = cName; newMobile1.size = pSize;
// access the method by using first object
newMobile1.printPhoneDetail();
// Now creating second object of type class Mobile
Mobile newMobile2 = new Mobile();
// access the variable by using second object
newMobile2.phone_Name = "Iphone"; newMobile2.size = 6;
// access the method by using second object newMobile2.printPhoneDetail()
; System.out.print("Bye."); input.close(); } } Kết quả:
5/. Sự khác nhau giữa lớp và đối tượng trong java:
Sự khác nhau giữa lớp và đối tượng trong java được thống kê trong bảng sau: No Đối tượng Lớp 1.
Đối tượng là thể hiện của 1 lớp.
Lớp là một khuôn mẫu hay thiết kế để tạo ra các đối tượng. lOMoARcPSD| 36667950 2.
Đối tượng là 1 thực thể trong thế
Lớp là một nhóm các đối tượng tương tự giới
thực như Bút chì, Xe đạp, … nhau. 3.
Đối tượng là 1 thực thể vật lý Lớp là 1 thực thể logic 4.
Đối tượng được tạo ra chủ yếu từ từ Lớp được khai báo bằng việc sử dụng từ khóa new. khóa class.
Ví dụ: Student s1=new Student(); Ví dụ: class Student{} 5.
Đối tượng có thể được tạo nhiều
Lớp được khai báo 1 lần duy nhất. lần. 6.
Đối tượng được cấp bộ nhớ khi nó Lớp không được cấp bộ nhớ khi nó được tạo được tạo ra. ra. 7.
Có rất nhiều cách để tạo ra đối Chỉ có một cách để định nghĩa lớp trong tượng trong
java như từ khóa new, java sử dụng từ khoá class. phương thức newInstance(), phương thức clone(), ... CONSTRUCTOR TRONG JAVA
1/. Constructor trong Java:
Constructor trong java là một phương thức đặc biệt của class được sử dụng để khởi tạo các đối tượng.
Java Constructor được gọi tại thời điểm tạo đối tượng. Nó khởi tạo các giá trị để cung cấp dữ liệu cho
các đối tượng, đó là lý do tại sao nó được gọi là constructor. Khi nào thì một constructor được gọi?
Mỗi khi một đối tượng được tạo bằng từ khóa new (), ít nhất một constructor (hàm khởi tạo, có thể là
hàm khởi tạo mặc định) được gọi để gán giá trị ban đầu cho các thành viên dữ liệu / của thuộc tính của một lớp.
2/. Các quy tắc tạo constructor trong Java:
Các quy tắc cơ bản cho việc tạo constructor:
• Tên constructor phải giống tên lớp chứa nó.
• Constructor không thể là abstract, final, static, Synchronized Constructor không trả về giá trị.
3/. Các kiểu của Java constructor:
Có 2 kiểu của constructor
• Constructor mặc định (không có tham số truyền vào) • Constructor có tham số
3.1/. Constructor mặc định (default constructor):
Constructor không có đối số là hàm khởi tạo không có tham số được gọi. Nếu chúng ta không định nghĩa
một constructor trong một lớp thì trình biên dịch sẽ tạo ra constructor (không có đối số) cho lớp đó. Và
nếu chúng ta viết một hàm tạo với các đối số hoặc không có đối số thì trình biên dịch không tạo ra hàm lOMoARcPSD| 36667950
tạo mặc định. Constructor mặc định cung cấp các giá trị mặc định cho đối tượng như 0, null, v.v. tùy
thuộc vào kiểu dữ liệu.
Ví dụ: không có constructor
//minh họa cho Ct không có constructor
import java.io.*;
class Test1 { int num; String name; } class GFG {
public static void main (String[] args) {
//gọi default constructor.
Test1 x = new Test1 () ;
System.out.println(x.name);
System.out.println(x.num); } } Kết quả: null 0
Ví dụ: có constructor không tham số
//minh họa cho constructor không tham số (no-argument)
import java.io.*;
class Test1 { int num; String name; Test1() {
System.out.println("Gọi Constructor."); } } class GFG {
public static void main (String[] args) { //gọi default constructor. Test1 x = new Test1();
//Default constructor cung cấp giá trị mặc định
//là giá trị null, 0 lOMoARcPSD| 36667950
System.out.println(x.name);
System.out.println(x.num); } } Kết quả : G i Constructor.ọ null 0
3.2/. Constructor có tham số (parameterized constructor):
Một constructor có tham số được gọi là constructor tham số hóa. Nếu chúng ta muốn khởi tạo các field
(trường) của lớp bằng các giá trị của riêng, thì hãy sử dụng constructor với tham số. Ví dụ: class Test2 { int num ; String name ; //constructor có 02 tham s d ố ùng khi to d ởạữệố l ư i ợ u đi tng
Test2( int num , String name ) { this . num = num ; this . name = name ; } }
public class CFG2 {
public static void main(String[] args ) { //gi c ọ onstructor có cung cp th ấ am s ố
Test2 x = new Test2(100, "Bill Gates" ) ; lOMoARcPSD| 36667950
System. out .println( "Num: " + x . num ) ;
System. out .println( "Name: " + x . name ) ; } } Kết quả : Num: 100 Name: Bill Gates
4/. Constructor Overloading :
Constructor Overloading là một kỹ thuật trong Java. Ta có thể tạo nhiều constructor trong cùng một lớp
với danh sách tham số truyền vào khác nhau. Trình biên dịch sẽ phân biệt các constructor này thông qua
số lượng và kiểu của các tham số truyền vào. Constructor Overloading thực hiện tương tự như các phương thức khác.
Ví dụ: tạo file CFG3.Java class Test { //constructor có 1 tham s ki ốể u String Test(String name ) {
System. out .println( "Constructor có 1 tham s - ố String: " + name ) ; } //constructor có 2 tham s ki ốể u String, int
Test(String name , int age ) {
System. out .println( "Constructor có 2 tham s - ố String, Int: " + name + ", " + age ) ; } //constructor có 1 tham s ki ốể u Long Test( long id ) {
System. out .println( "Constructor có 1 tham s - ố Long: " + id ) ; } }
public class CFG3 {
public static void main(String[] args ) { //To c ạ ác đi tn ố g ư ợ có truyn các t ề ham s khác nh ố a u //Gi ọ constructor truyn 1 ề tham s kiu ốể String
Test x = new Test( "H C ồ hí Minh" ) ; lOMoARcPSD| 36667950
//G i constructor truy n 2 tham s ki u String, int ọ ề ố ể
Test y = new Test("Nguy n T t Thành"ễ ấ , 130);
//G i constructor truy n 1 tham s ki u Long ọ ề
ố ể Test z = new Test(123456789); } } Kết quả:
Constructor có 1 tham s - String: H Chí Minhố ồ
Constructor có 2 tham s - String, Int: Nguy n T t Thành, 130ố ễ ấ
Constructor có 1 tham s - Long: 123456789ố
Bài tập mẫu: Khai báo Class Sinhvien như hình sau, viết chương trình Test Drive Class Sinhvien.
Tạo file Sinhvien.Java như sau: có dùng từ khóa this (chỉ đối tượng hiện tại / đang làm việc) và có 2 constructor. package Goi1;
import java.util.Scanner;
public class Sinhvien { public String hoten ;
public double diemtb ; public Sinhvien() {
// this . hoten = "No name" ;
// this . diemtb =0.0 ; }
public Sinhvien(String ten , double diem ) lOMoARcPSD| 36667950 { this . hoten = ten ;; this . diemtb = diem ; }
public void xuat() {
System. out .println( "H tên: " + this . hoten ) ;
System. out .println( "Đim TB: " ể + this . diemtb ) ; }
public void nhap() {
Scanner input = new Scanner(System. in ); String ten = "" ; double diem =0.0 ;
System. out .print( "Nhp H tên: " ) ; ten = input .nextLine(); do {
System. out .print( "Nhp đim: " ; ) diem = input .nextDouble();
} while (( diem <0) || ( diem ; >10)) this . hoten = ten ; this . diemtb = diem ; }
public String xepLoai() { String kq = "" ;
if ( this . diemtb <5) kq = "Yu" ế ;
else if (( this . diemtb >= 5) && ( this . diemtb <7)) kq = "Trung bình" ;
else if (( this . diemtb >= 7) && ( this . diemtb <8.5)) kq = "Khá" ; else kq = "Gii" ỏ ; return kq ; } }
Tạo file TestSinhvien.Java như sau: package Goi1;
import Goi1.Sinhvien.*; //đng quên khi khác gói
public class TestSinhvien {
public static void main(String[] args ) {
Sinhvien x = new Sinhvien(); x .nhap(); x .xuat();
System. out .println( "Xp loi: " ế ạ + x .xepLoai());
Sinhvien y = new Sinhvien(); y .nhap(); y .xuat(); lOMoARcPSD| 36667950
System. out .println( "Xp loi: " ế ạ + y .xepLoai());
Sinhvien z = new Sinhvien( "Trn Văn Rt", 7.6 ầ ớ ; ) z .xuat();
System. out .println( "Xp loi: " ế ạ + z .xepLoai()); } } Kết quả:
+ Nếu Class Sinhvien là private thì chương trình sẽ chạy như thế nào?
+ Nếu bỏ public của Class Sinhvien thì chương trình sẽ chạy như thế nào?
5/. Sự khác nhau giữa constructor và phương thức trong Java: Constructor
Phương thức (Method / Function)
Constructor được sử dụng để khởi tạo Phương thức được sử dụng để thực hiện tác động cho trạng thái
của một đối tượng. một đối tượng.
Constructor không có kiểu trả về.
Phương thức có kiểu trả về hoặc không (void).
Constructor được gọi ngầm.
Phương thức được gọi tường minh.
Trình biên dịch Java tạo ra constructor Phương thức không được tạo ra bởi trình biên dịch
mặc định nếu ta không có constructor Java. nào.
Tên của constructor phải giống tên lớp.
Tên phương thức có thể giống hoặc khác tên lớp. (nên khác
để tránh nhầm lẫn)
Bài tập mẫu:
Tạo file Hinhtron.Java package Goi1;
public class Hinhtron { // Save file v i tên "Hinhtron.java"ớ
//khai báo các h ng sằố
public static final double DEFAULT_RADIUS = 2.5;
public static final String DEFAULT_COLOR = "black"; lOMoARcPSD| 36667950
Tạo file chương trình (Test Drive) TestHinhtron.Java: lOMoARcPSD| 36667950 package Goi1;
import Goi1.Hinhtron.*; //đ ng thi u l nh nàyừ
ểế ệ import java.io.*; public class TestHinhtron
{ public static void main(String[] args) throws IOException {
//Save file v i tên TestHinhtron.Javaớ
// G i constructors and xuattt()ọ
InputStreamReader is=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(is);
Hinhtron c1 = new Hinhtron(1.1, "blue");
System.out.println(c1.xuatTT());
Hinhtron c2 = new Hinhtron(2.2);
System.out.println(c2.xuatTT());
Hinhtron c3 = new Hinhtron();
System.out.println(c3.xuatTT());
// Test ph ng th c Set và Getươ ứ
System.out.print("Nh p Bán kinh hình tròn: "ậ ); double bk =
Double.parseDouble(br.readLine());
c1.setBanKinh(bk); //c1.setBanKinh(5.0);
System.out.print("Nh p Màu hình tròn: "ậ); String mau = br.readLine(); c1.setMau(mau); //c1.setMau("green");
System.out.println(c1.xuatTT());
System.out.println("Bán kính là : " + c1.getBanKinh());
System.out.println("Màu là: " + c1.getMau());
// Test getArea() and getCircumference()
System.out.printf("Di n tích là: %.2f%n"ệ, c1.getDienTich());
System.out.printf("Chu vi là: %.2f%n", c1.getChuVi());} }
Bài tập 1 : Khai báo Class Hanghoa theo hình sau: lOMoARcPSD| 36667950
Bài tập 2: Khai báo Class Nhanvien theo hình và viết chương trình Test drive thực hiện nhập dữ liệu cho 2
nhân viên và xuất kết quả ra cho xem.
Downloaded by Albedo Lili (albedo0208@gmail.com) lOMoARcPSD| 36667950
Phương thức getter và setter 1/. Giới thiệu:
Ta đã học được từ bài học trước rằng các thuộc tính private chỉ có thể được truy cập trong cùng một lớp
(một lớp bên ngoài không có quyền truy cập đến nó). Tuy nhiên, có thể truy cập đến chúng nếu Ta cung
cấp các phương thức getter và setter là public.
Phương thức get trả về giá trị của thuộc tính / Field/ biến và phương thức set đặt giá trị cho thuộc tính / Field/ biến.
Đây là đặc trưng của Encapsulation (tính đóng gói), có lợi ích như sau:
• Các thuộc tính của một Class có thể được là chỉ đọc, chỉ ghi.
• Một Class có toàn quyền kiểm soát những gì được lưu trữ trong các thuộc tính của nó.
Cú pháp cho cả hai getter và setter là chúng bắt đầu bằng get hoặc set, theo sau là tên của thuộc
tính Field/ biến, với chữ cái đầu tiên viết hoa: Ví dụ: public class Person {
private String name; //private = gii hn truy cp ớạ ậ //phng thc Getter public String getName() { return name; } //phng thc Setter
public void setName( String newName) { this . name = newName; } }
Xem chương trình sử dụng: (sinh viên chú ý nghe giảng và ghi nhớ) public class MyClass {
public static void main( String [] args) { Person myObj = new Person(); myObj. name = "Tom Bille" ; //li ỗ System. out . println myObj. ( name ) ; //li ỗ } }
Giải quyết bằng Setter và Getter:
public static void main( String [] args) { Person myObj = new Person();
myObj. setName ( "Tom Bille" ) ; public class MyClass {
Downloaded by Albedo Lili (albedo0208@gmail.com) lOMoARcPSD| 36667950
//đt giá tr cho name là "Tom Bille"
System. out . println ( myObj. getName ()) ; //xut ra ấ "Tom Bille" } }
2/. Ví dụ áp dụng: (sinh viên tìm hiểu) BT mẫu 1: Tạo file Person.Java: package Goi4; { private String name ;
private String address ;
private int age ;
Person(String x1 , String x2, int x3) { this . name = x1 ; this . address = x2; this . age = x3 ; }
Person(String name , String address , int age ) { this . name = name ;
this . address = address ; this . age = age ; }
public String getName() {
return this . name ; }
public String getAddress() {
return this . address ; }
public int getAge() {
return this . age ; } } class Person
Tạo file TestPerson.Java: package Goi4; import java.io.*; import Goi4.Person;
public class TestPerson {
public static void main(String[] args ) throws IOException {
InputStreamReader is = new InputStreamReader(System. in ; )
Downloaded by Albedo Lili (albedo0208@gmail.com) lOMoARcPSD| 36667950
BufferedReader br=new BufferedReader(is);
Person x0 =new Person(); //l i: gi i thích t i sao sai?ỗ ả ạ String ten, diachi, ch; int tuoi;
System.out.print("Nh p H tên ng i: "ậ ọ ườ ); ten = br.readLine();
System.out.print("Nh p Đ a ch : "ậ ị ỉể ); diachi = br.readLine();
System.out.print("Nh p tu i: "ậ ổể ); tuoi =
Integer.parseInt(br.readLine());
Person x1=new Person(ten, diachi, tuoi);
System.out.println("Xem l i ng i v a nh p:"ạ ườ ừ ậ );
System.out.println("___________________________________");
System.out.println("H tên ng i: "ọ ườ + x1.getName());
System.out.println("Đ a ch : "ị ỉ + x1.getAddress());
System.out.println("Tu i : "ổ + x1.getAge());
System.out.println("___________________________________");
System.out.println("Xem l i H tên ng i: " + x1.name);ạ ọ
ườ //l i, gi i thích t i sao?ỗ ả ạ } } lOMoARcPSD| 36667950 BT mẫu 2:
Tạo file Animals.Java : package Goi4;
public class Animals {
private int id ; private String name ;
public String getName() { return name ; }
public void setName(String name ) { this . name = name ; }
public int getId() { return id ; }
public void setId( int id ) { this . id = id ; } }
Tạo file TestAnimals.Java : lOMoARcPSD| 36667950 package Goi4; import java.io.*; import Goi4.Animals;
public class TestAnimals {
public static void main(String[] args ) throws IOException {
InputStreamReader is = new InputStreamReader(System. in );
BufferedReader br = new BufferedReader( is ; ) String ten ; int ms ;
Animals x = new Animals();
System. out .print( "Nhp Mã s Thú: " ; )
ms = Integer. parseInt ( br .readLine());
System. out .print( "Nhp Tên Thú: " ) ; ten = br .readLine(); x .setId( ms ) ; x .setName( ten ) ;
System. out .println( "Xem li con thú va nhp:" );
System. out .println( "___________________________________" ; )
System. out .println( "Mã s Thú : " ố + x .getId());
System. out .println( "Tên Thú : " + x .getName());
System. out .println( "___________________________________" ) ;
System.out.println("Xem li Tên Thú: " + x.name); //li, gii thích ti sao? ỗ ả ạ } }