Tải bản đầy đủ (.pdf) (32 trang)

TỰ HỌC LẬP TRÌNH VỚI HTTPS:LAP-TRINH-MAY-TINH BLOGSPOT COM TỰ HỌC LẬP TRÌNH JAVA 1 BÀI THỰC HÀNH 03: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI JAVA (OOP WITH JAVA)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (947.51 KB, 32 trang )

TỰ HỌC LẬP TRÌNH JAVA

Bài thực hành 03: Lập trình hướng đối tượng với Java (OOP with Java)

--------------------------------------------
NỘI DUNG:

Thừa kế và đa hình trong Java ..................................................................................................................2
1- Giới thiệu ..........................................................................................................................................2
2- Class, cấu tử và đối tượng (Class, Constructor, instance) ................................................................2
3- Thừa kế trong java ............................................................................................................................5
4- Tính đa hình trong Java ..................................................................................................................12

Abstract class và Interface trong Java.....................................................................................................15
1- Giới thiệu ........................................................................................................................................15
2- Class trừu tượng (Abstract Class)...................................................................................................15
3- Ví dụ với lớp trừu tượng.................................................................................................................16
4- Tổng quan về Interface ...................................................................................................................19
5- Cấu trúc của một Interface..............................................................................................................20
6- Class thực hiện Interface ................................................................................................................22

Access modifier trong Java .....................................................................................................................26
1- Modifier trong Java ........................................................................................................................26
2- Tổng quan về access modifier ........................................................................................................26
3- private access modifier ...................................................................................................................26
4- private constructor ..........................................................................................................................27
5- Access modifier mặc định ..............................................................................................................28
6- protected access modifier ...............................................................................................................30
7- public access modifier ....................................................................................................................30
8- Ghi đè phương thức ........................................................................................................................31


-------------------------------------------
Xem thêm tài liệu khác TẠI ĐÂY
-------------------------------------------

Tự học lập trình với

1

TỰ HỌC LẬP TRÌNH JAVA

Thừa kế và đa hình trong Java

1- Giới thiệu

Thừa kế và đa hình (Inheritance & polymorphism) - đây là một khái niệm vô cùng quan trọng trong
Java. Mà bạn bắt buộc phải hiểu nó.

2- Class, cấu tử và đối tượng (Class, Constructor, instance)

Bạn cần hiểu một cách rạch ròi về class, cấu tử (constructor) và đối tượng trước khi bắt đầu tìm hiểu

quan hệ thừa kế trong java. Chúng ta xem class Person, mô tả một con người với các thông tin tên,

năm sinh, nơi sinh.

Person.java

?

1 package org.o7planning.tutorial.inheritance.basic;


2 public class Person {
3

4 // Trường name - Thông tin tên người.

5 private String name;

6 // Trường bornYear - thông tin năm sinh

7 private Integer bornYear;

8 // Trường placeOfBirth - thông tin nơi sinh.

9 private String placeOfBirth;

10 // Constructor có 3 tham số.

11 // Mục đích nhằm để gán các giá trị cho các trường của Person.

12 // Chỉ định rõ tên, năm sinh, nơi sinh của một người.

13 public Person(String name, Integer bornYear, String placeOfBirth) {

14 this.name = name;

15 this.bornYear = bornYear;

this.placeOfBirth = placeOfBirth;


16 }

17

18 // Constructor có 2 tham số.

19 // Mục đích gán các giá trị cho 2 trường tên và năm sinh cho Person.
// Nơi sinh không được gán.
20
public Person(String name, Integer bornYear) {

21 this.name = name;

22 this.bornYear = bornYear;

23 }

24 public String getName() {

25 return name;

26 }

27

Tự học lập trình với

2

TỰ HỌC LẬP TRÌNH JAVA


28 public void setName(String name) {
29 this.name = name;
30
31 }
32
33 public Integer getBornYear() {
34 return bornYear;
35
36 }
37
38 public void setBornYear(Integer bornYear) {
39 this.bornYear = bornYear;
40
41 }
42
43 public String getPlaceOfBirth() {
44 } return placeOfBirth;
45
46 }
47
48 public void setPlaceOfBirth(String placeOfBirth) {
49 this.placeOfBirth = placeOfBirth;
50
51 }
52

PersonDemo.java
?
1 package org.o7planning.tutorial.inheritance.basic;

2 public class PersonDemo {
3

Tự học lập trình với

3

TỰ HỌC LẬP TRÌNH JAVA

4 public static void main(String[] args) {
5
6 // Đối tượng: Thomas Edison.
7 Person edison = new Person("Thomas Edison", 1847);
8
9 System.out.println("Info:");
10 System.out.println("Name: " + edison.getName());
11 System.out.println("Born Year: " + edison.getBornYear());
12 System.out.println("Place Of Birth: " + edison.getPlaceOfBirth() );
13
14 // Đối tượng: Bill Gates
15 Person billGates = new Person("Bill Gate", 1955, "Seattle, Washington");
16
17 System.out.println("Info:");
18 System.out.println("Name: " + billGates.getName());
19 System.out.println("Born Year: " + billGates.getBornYear());
20 System.out.println("Place Of Birth: " + billGates.getPlaceOfBirth());
21 }
22 }
23
24

25

Phân biệt Class, cấu tử (constructor) và đối tượng:

Lớp Person mô phỏng một lớp người, nó là một thứ gì đó trừu tượng, nhưng nó có các trường để
mang thơng tin, trong ví dụ trên là tên, năm sinh, nơi sinh.

Cấu tử (Constructor) - Người ta cịn gọi là "Phương thức khởi tạo"

• Cấu tử ln có tên giống tên lớp.
• Một class có một hoặc nhiều cấu tử.
• Cấu tử có hoặc khơng có tham số, cấu tử khơng có tham số cịn gọi là cấu tử mặc định.
• Cấu tử được sử dụng để tạo ra một đối tượng của lớp.

Như vậy lớp Person (Mô tả lớp người) là thứ trừu tượng, nhưng khi chỉ rõ vào bạn hoặc tơi thì đó là 2
đối tượng (instance) thuộc lớp Person. Và Constructor là phương thức đặc biệt để tạo ra đối tượng,
Constructor sẽ gán các giá trị vào các trường (field) của class cho đối tượng..

Hãy xem minh họa, khởi tạo đối tượng từ cấu tử như thế nào.

Tự học lập trình với

4

TỰ HỌC LẬP TRÌNH JAVA

3- Thừa kế trong java

Chúng ta cần một vài class tham gia vào minh họa.
• Animal: Class mô phỏng một lớp Động vật.

• Duck: Class mơ phỏng lớp vịt, là một class con của Animal.
• Cat: Class mô phỏng lớp mèo, là một class con của Animal
• Mouse: Class mơ phỏng lớp chuột, là một class con của Animal.

Ở đây chúng ta có class Animal, với một method khơng có nội dung.
• public abstract String getAnimalName();

Method này là một method trừu tượng (abstract), tại các class con cần phải khai báo và triển khai nội
dung của nó. Method này có ý nghĩa là trả về tên lồi động vật.
Class Animal có 1 phương thức trừu tượng nó phải được khai báo là trìu tượng (abstract). Class trừu
tượng có các cấu tử (constructor) nhưng bạn không thể khởi tạo đối tượng từ nó.

• Về bản chất nghĩa là bạn muốn tạo một đối tượng động vật, bạn cần tạo từ một loại đông vật cụ
thể, trong trường hợp này bạn phải khởi tạo từ cấu tử (constructor) của Cat, Mouse hoặc Duck.

Tự học lập trình với

5

TỰ HỌC LẬP TRÌNH JAVA

Animal.java

?

1

2

3 package org.o7planning.tutorial.inheritance.animal;


4

5 // Lớp có ít nhất 1 phương thức trừu tượng

6 // bắt buộc phải được khai báo là trừu tượng.
7 public abstract class Animal {

8 // Tên, ví dụ Mèo Tom, Chuột Jerry.
9
private String name;

10

11 // Constructor mặc định.

12 public Animal() {

13 // Gán giá trị mặc định cho 'name'.

14 this.name = this.getAnimalName();

15 }

16 public Animal(String name) {

17 this.name = name;

18 }


19
20 public String getName() {
return name;
21
}

22

23 public void setName(String name) {

24 this.name = name;

25 }

26 // Đây là một phương thức trừu tượng.

27 // Trả về tên của loài động vật này.

28 // Nội dung cụ thể của phương thức này

29 // sẽ được thực hiện (implemented) tại các lớp con.

30 public abstract String getAnimalName();

31
32 }

33

34


Tiếp theo xem class Cat, thừa kế từ Animal.

Cat cũng có các cấu tử của nó, và cũng có các trường của nó. Trong dòng đầu tiên của cấu tử bao giờ
cũng phải gọi super(..) nghĩa là gọi lên cấu tử cha, để khởi tạo giá trị cho các trường của class cha.

Nếu bạn không gọi, mặc định Java hiểu là đã gọi super(), nghĩa là gọi cấu tử mặc định của class cha.
Cat.java
?
1 package org.o7planning.tutorial.inheritance.animal;
2 public class Cat extends Animal {

Tự học lập trình với

6

TỰ HỌC LẬP TRÌNH JAVA

3 private int age;
4 private int height;
5
6 public Cat(int age, int height) {
7 // Gọi tới Constructor mặc định của lớp cha (Animal).
8 // Nhằm mục đích gán tạo giá trị cho các trường (field) của lớp cha.
9 super();
10 // Sau đó mới gán giá trị cho các trường (field) của nó.
11 this.age = age;
12 this.height = height;
13
14 }

15
16 public Cat(String name, int age, int height) {
17 // Gọi tới Constructor của lớp cha (Animal)
18 // Nhằm mục đích gán tạo giá trị cho các trường (field) của lớp cha.
19 super(name);
20 // Sau đó mới gán giá trị cho các trường (field) của nó.
21 this.age = age;
22 this.height = height;
23
24 }
25
26 public int getAge() {
27 return age;
28
29 }
30
31 public void setAge(int age) {
32 this.age = age;
33
34 }
35
36 public int getHeight() {
37 return height;
38
39 }
40
41 } public void setHeight(int height) {
42 this.height = height;
43
44 }

45
46 // Thực hiện (implement) phương thức trừu tượng được khai báo tại lớp cha.
47 @Override
48 public String getAnimalName() {

return "Cat";
}

Tự học lập trình với

7

TỰ HỌC LẬP TRÌNH JAVA

Khi bạn khởi tạo một đối tượng Cat điều gì xẩy ra?

Xem class Mouse, thừa kế từ Animal.

Mouse.java

?

1 package org.o7planning.tutorial.inheritance.animal;

2

3 public class Mouse extends Animal {

4
5 private int weight;


6 // Constructor mặc định.
7
public Mouse() {

8 // Gọi tới cấu tử Mouse(int)

9 // Call to constructor Mouse(int)

10 this(100);

11 }

12 // Constructor có 1 tham số

13 public Mouse(int weight) {

14 // Nếu bạn không gọi bất kỳ một super(..) nào.

15 // Java sẽ gọi một super() mặc định.

16 // super();
this.weight = weight;
17
}

18

19 // Constructor có 2 tham số.


20 public Mouse(String name, int weight) {

21 super(name);

22 this.weight = weight;

23 }

24 public int getWeight() {

25 return weight;

26 }

Tự học lập trình với

8

TỰ HỌC LẬP TRÌNH JAVA

27 public void setWeight(int weight) {
28 this.weight = weight;
29
30 }
31
32 @Override
33 public String getAnimalName() {
34
35 } return "Mouse";
36 }

37
38
39
40

InstanceofDemo.java

?

1 package org.o7planning.tutorial.inheritance.demo;
2

3 import org.o7planning.tutorial.inheritance.animal.Animal;

4 import org.o7planning.tutorial.inheritance.animal.Cat;
5 import org.o7planning.tutorial.inheritance.animal.Mouse;

6
7 public class InstanceofDemo {

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

9

10 // Khởi tạo một đối tượng động vật.

11 // Animal là một lớp trừu tượng,

12 // bạn không thể tạo ra một đối tượng từ Constructor của Animal.


13 Animal tom = new Cat("Tom", 3, 20);

14 System.out.println("name: " + tom.getName());
15
System.out.println("animalName: " + tom.getAnimalName());
16

17 // Sử dụng toán tử 'instanceof' để kiểm tra xem

18 // một đối tượng có phải là một kiểu nào đó hay khơng.

19 boolean isMouse = tom instanceof Mouse;

20 System.out.println("Tom is mouse? " + isMouse);

21 boolean isCat = tom instanceof Cat;
22
System.out.println("Tom is cat? " + isCat);

23

24 boolean isAnimal = tom instanceof Animal;

25 System.out.println("Tom is animal? " + isAnimal);

26

27 }

28

29 }

Tự học lập trình với

9

TỰ HỌC LẬP TRÌNH JAVA

30
31
32

Kết quả chạy ví dụ:

?
1 name: Tom
2 animalName: Cat
3 Tom is mouse? false
4 Tom is cat? true
5 Tom is animal? true

InheritMethodDemo.java

?

1

2 package org.o7planning.tutorial.inheritance.demo;

3


4 import org.o7planning.tutorial.inheritance.animal.Cat;

5

6 public class InheritMethodDemo {

7
8 public static void main(String[] args) {

9 // Tạo một đối tượng Cat.
10
Cat tom = new Cat("Tom", 3, 20);

11

12 // Gọi các phương thức thừa kế được từ lớp cha (Animal).

13 System.out.println("name: " + tom.getName());

14 System.out.println("animalName: " + tom.getAnimalName());

15
16 System.out.println("-----------------");

17 // Gọi các phương thức được khai báo trên lớp Cat.

18 System.out.println("Age: " + tom.getAge());

19 System.out.println("Height: " + tom.getHeight());


20 }

21
22 }

23

Kết quả chạy ví dụ:
?

Tự học lập trình với

10

TỰ HỌC LẬP TRÌNH JAVA

1 name: Tom
2 animalName: Cat

3 -----------------
4 Age: 3
5 Height: 20

Ép kiểu (Cast) trong Java

CastDemo.java

?


1 package org.o7planning.tutorial.inheritance.demo;

2 import java.util.Random;
3

4 import org.o7planning.tutorial.inheritance.animal.Animal;
5 import org.o7planning.tutorial.inheritance.animal.Cat;

6 import org.o7planning.tutorial.inheritance.animal.Mouse;

7

8 public class CastDemo {

9
10 // Phương thức này trả về ngẫu nhiên một con vật.
public static Animal getRandomAnimal() {
11
// Trả về giá trị ngẫu nhiên 0 hoặc 1.

12 int random = new Random().nextInt(2);

13

14 Animal animal = null;

15 if (random == 0) {

16 animal = new Cat("Tom", 3, 20);


17 } else {

animal = new Mouse("Jerry", 5);

18 }

19 return animal;

20 }

21 public static void main(String[] args) {
22

23 Animal animal = getRandomAnimal();

24

25 if (animal instanceof Cat) {

26 // Ép kiểu (cast) thành kiểu Cat.

27 Cat cat = (Cat) animal;

28 // Và gọi một phương thức của lớp Cat.

29 System.out.println("Cat height: " + cat.getHeight());

30 } else if (animal instanceof Mouse) {

31 // Ép kiểu (cast) thành kiểu Mouse.


32 Mouse mouse = (Mouse) animal;

33

34 // Và gọi một phương thức của lớp Mouse.

35 System.out.println("Mouse weight: " + mouse.getWeight());

36 }

37 }

Tự học lập trình với

11

TỰ HỌC LẬP TRÌNH JAVA

38
39 }
40
41
42
43
44
45

4- Tính đa hình trong Java


Bạn có một con mèo nguồn gốc châu Á (AsianCat), bạn có thể nói nó là một con mèo (Cat) hoặc nói
nó là một con vật (Animal) đó là một khía cạnh của từ đa hình.

Hoặc một ví dụ khác: Trên lý lịch của bạn ghi rằng bạn là một người châu Á, trong khi đó bạn thực tế
là một người Việt Nam.

Ví dụ dưới đây cho bạn thấy cách hành sử giữa khai báo và thực tế
Class AsianCat là một class thừa kế từ Cat

AsianCat.java

?

1

2 package org.o7planning.tutorial.inheritance.animal;

3
4 public class AsianCat extends Cat {

5 public AsianCat(String name, int age, int height) {
6
super(name, age, height);

7 }

8

9 // Ghi đè (override) phương thức của lớp cha (Cat)


10 @Override

11 public String getAnimalName() {

12 return "Asian Cat";

}

13 }

14

Tính đa hình của Java được giải thích trong hình minh họa dưới đây:

Tự học lập trình với

12

TỰ HỌC LẬP TRÌNH JAVA

PolymorphismDemo.java

?

1

2 package org.o7planning.tutorial.polymorphism;

3
4 import org.o7planning.tutorial.inheritance.animal.AsianCat;

5 import org.o7planning.tutorial.inheritance.animal.Cat;

6 public class PolymorphismDemo {
7

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

9

10 Cat cat1 = new Cat("Tom", 3, 20);

11

12 Cat cat2 = new AsianCat("ATom", 2, 19);

13
14 System.out.println("Animal Name of cat1: " + cat1.getAnimalName());

15 System.out.println("Animal Name of cat2: " + cat2.getAnimalName());

16

17 }

18

19 }

20


Kết quả chạy ví dụ:
Tự học lập trình với

13

TỰ HỌC LẬP TRÌNH JAVA
?
1 Animal Name of cat1: Cat
2 Animal Name of cat2: Asian Cat

Tự học lập trình với

14

TỰ HỌC LẬP TRÌNH JAVA

Abstract class và Interface trong Java

1- Giới thiệu

Trong tài liệu hướng dẫn này tôi sẽ hướng dẫn về Interface và class trừu tượng (Abstract Class). Đồng
thời phân tích sự giống và khác nhau giữa chúng.

2- Class trừu tượng (Abstract Class)

Abstract class (Class trừu tượng). Hãy xem ví dụ về một class như thế:

?

1 // Đây là một lớp trừu tượng.

2 // Nó bắt buộc phải khai báo là abstract

// vì trong nó có một phương thức trừu tượng

3 public abstract class ClassA {
4

5 // Đây là một phương thức trừu tượng.

6 // Nó khơng có thân (body).

7 // Access modifier của phương thức này là public.

8 public abstract void doSomething();

9 // Access modifier của phương thức này là protected.
10
protected abstract String doNothing();
11
// Phương thức này không khai báo access modifier.

12 // Access modifier của nó là mặc định.

13 abstract void todo() ;
14 }

15 // Đây là một lớp trừu tượng.
16 // Nó được khai báo là abstract,
17 // mặc dù nó khơng có phương thức trừu tượng nào.


18 public abstract class ClassB {

Tự học lập trình với

15

TỰ HỌC LẬP TRÌNH JAVA

19
20 }
21
22
23
Đặc điểm của một class trừu tượng là:

1. Nó được khai báo abstract.
2. Nó có thể khai báo 0, 1 hoặc nhiều method trừu tượng bên trong.
3. Không thể khởi tạo 1 đối tượng trực tiếp từ một class trừu tượng.

3- Ví dụ với lớp trừu tượng

Hãy xem hình minh họa:

AbstractJob.java

?

1 package org.o7planning.tutorial.abs;
2


3 // Một lớp trừu tượng (Mơ phỏng một cơng việc)

4 // Nó khai báo 2 phương thức trừu tượng.

5 public abstract class AbstractJob {

6

7 public AbstractJob() {

8 }
9

10 // Đây là một phương thức trừu tượng.

11 // Method này trả về tên của công việc.

12 public abstract String getJobName();

13

14 // Đây là một phương thức trừu tượng.

15 public abstract void doJob();

16 }
17

Tự học lập trình với


16

TỰ HỌC LẬP TRÌNH JAVA

18

JavaCoding.java

?

1

2 package org.o7planning.tutorial.abs;
3

4 // Lớp này thực hiện hết các phương thức trừu tượng của lớp cha.
5 public class JavaCoding extends AbstractJob {

6

7 public JavaCoding() {

8 }

9 // Thực hiện phương thức trừu tượng khai báo tại lớp cha.

10 @Override

11 public void doJob() {


12 System.out.println("Coding Java...");

13 }

14
15 // Thực hiện phương thức trừu tượng khai báo tại lớp cha.
// Phương thức này sẽ có thân (body).
16
// Và trả về tên của công việc.

17 @Override

18 public String getJobName() {

19 return "Coding Java";

20 }

21 }
22

23

ManualJob.java

?

1

2 package org.o7planning.tutorial.abs;


3

4 // ManualJob - (Mô phỏng một công việc phổ thông)
5 // Lớp cha (AbstractJob) có 2 phương thức trừu tượng.

// Lớp này mới chỉ thực hiện 1 phương thức trừu tượng của lớp cha.

6 // Vì vậy nó bắt buộc phải khai báo là abstract.
7 public abstract class ManualJob extends AbstractJob {

8

9 public ManualJob() {

10

11 }

12
13 // Thực hiện phương thức trừu tượng của lớp cha.
@Override
14
public String getJobName() {

15 return "Manual Job";

16 }

17

18 }

19

Tự học lập trình với

17

TỰ HỌC LẬP TRÌNH JAVA

BuildHouse.java

?

1

2 package org.o7planning.tutorial.abs;

3

4 // Class này thừa kế từ class trìu tượng ManualJob

5 // BuildHouse không được khai báo là trừu tượng.
// Vì vậy nó cần thực hiện tất cả các phương thức trừu tượng còn lại.
6
public class BuildHouse extends ManualJob {

7

8 public BuildHouse() {


9

10 }

11

12 // Thực hiện phương thức trừu tượng của lớp cha.

13 @Override

14 public void doJob() {

System.out.println("Build a House");

15 }

16

17 }

18

Ví dụ demo
JobDemo.java

?

1 package org.o7planning.tutorial.abs;


2 public class JobDemo {
3

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

5

6 // Khởi tạo một đối tượng AbstractJob

7 // từ Constructor của lớp JavaCoding.

8 AbstractJob job1 = new JavaCoding();

9 // Gọi phương thức doJob()
10
job1.doJob();

11

12 // Phương thức getJobName là trừu tượng trong lớp AbstractJob.

13 // Nhưng nó đã được thực hiện tại một lớp con nào đó.

14 // Vì vậy bạn có thể gọi nó.

15 String jobName = job1.getJobName();

16 System.out.println("Job Name 1= " + jobName);

17


Tự học lập trình với

18

TỰ HỌC LẬP TRÌNH JAVA

18 // Khởi tạo một đối tượng AbstractJob

19 // từ Constructor của lớp BuildHouse.
20 AbstractJob job2 = new BuildHouse();

21 job2.doJob();

22

23 String jobName2 = job2.getJobName();

24

25 System.out.println("Job Name 2= " + jobName2);

26

27 }

28 }

29


30

31

32

Kết quả chạy ví dụ: Java
? Job
1 Coding Java...
2 Job Name 1= Coding
3 Build a House
4 Job Name 2= Manual

4- Tổng quan về Interface

Chúng ta biết rằng một class chỉ có thể mở rộng từ một class cha.

?

1

2 // Lớp B là con của lớp A, hoặc nói cách khác là B mở rộng từ A

3 // Java chỉ cho phép một lớp mở rộng từ duy nhất một lớp khác.
public class B extends A {
4
// ....
5 }

6


7 // Trong trường hợp không chỉ rõ lớp B mở rộng từ một lớp cụ thể nào.

8 // Mặc định, hiểu rằng B mở rộng từ lớp Object.
9 public class B {

10 }
11

12 // Cách khai báo này, và cách phía trên là tương đương nhau.
13 public class B extends Object {

14

15 }

16

Tự học lập trình với

19

TỰ HỌC LẬP TRÌNH JAVA

Nhưng một class có thể mở rộng từ nhiều Interface

?
1 // Một lớp chỉ có thể mở rộng từ 1 lớp cha.
2 // Nhưng có thể thực hiện (mở rộng) từ nhiều Interface.
3 public class Cat extends Animal implements CanEat, CanDrink {

4
5 // ....
6 }

Các đặc điểm của interface

1. Interface ln ln có modifier là: public interface, cho dù bạn có khai báo rõ hay khơng.
2. Nếu có các trường (field) thì chúng đều là: public static final, cho dù bạn có khai báo rõ hay

không.
3. Các method của nó đều là method trừu tượng, nghĩa là khơng có thân hàm, và đều có modifier

là: public abstract, cho dù bạn có khai báo hay khơng.
4. Interface khơng có Constructor (cấu tử).

5- Cấu trúc của một Interface

NoAccessModifierInterface.java
?
1 package org.o7planning.tutorial.itf;
2
3 // Đây là một interface không chỉ định rõ 'access modifier'.
4 // Access modifier của nó là mặc định.
5 // Chỉ các lớp cùng package mới có thể thi hành interface này.
6 interface NoAccessModifierInterface {
7 }
8

Tự học lập trình với


20


×