Lập trình Java cơ bản - Chương 3: Lớp trong Java

Các khái niệm trong lập trình hướng đối tượng

Khai báo lớp

Các lớp lồng nhau

Lớp Abstract

Gói

Phạm vi truy cập

Interface

Thừa kếvàđa hình

pdf55 trang | Chuyên mục: Java | Chia sẻ: dkS00TYs | Lượt xem: 3808 | Lượt tải: 1download
Tóm tắt nội dung Lập trình Java cơ bản - Chương 3: Lớp trong Java, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
{
return radius * radius * 3.14159; 
}
} 
15/25
Khai báo lớp
Khai báo & tạo đối tượng
 Khai báo đối tượng
• Cú pháp: className objectName;
• Ví dụ: Circle myCircle;
 Tạo đối tượng
• Cú pháp: 
objectName = new className();
• Ví dụ: 
myCircle=new Circle();
myCircle=new Circle(5);
16/25
 Khai báo & tạo đối tượng
• Cú pháp: className objName=new className();
• Ví dụ:
Circle myCircle=new Circle();
Circle myCircle=new Circle(5);
17/25
Khai báo & tạo đối tượng
 Tham chiếu dữ liệu của đối tượng:
• Cú pháp: objectReference.data
• Ví dụ: myCircle.radius
 Gọi phương thức của đối tượng:
• Cú pháp: objectReference.method
• Ví dụ: 
myCircle.findArea() 
myCircle.setRadius(6);
18/25
Khai báo & tạo đối tượng
Ví dụ
public class Main { 
public static void main(String args[]) { 
Circle myCircle=new Circle(2,1);
doule area = myCircle.findArea()
System.out.println("Area is " + area);
}
}
19/25
 Là 1 tham chiếu đến đối tượng hiện tại
 Ví dụ
class Circle { 
double radius = 1.0;
int color;
Circle(double radius, int color){
this.radius = newRadius;
this.color=newColor;
}
Circle(newColor){
this(0,newColor);
}
}
20/25
Mở rộng – Từ khóa this
 Thuộc tính static 
• Ví dụ: static double radius=1.0;
 Phương thức static
• Ví dụ: 
static double findArea(){
return radius * radius * 3.14159; 
}
 Có thể được truy cập qua tên lớp
• Ví dụ:
Circle.radius;
Circle.findArea();
21/25
Mở rộng – Từ khóa static
 Tất cả các đối tượng cùng 1 lớp chia sẻ các 
biến static trong lớp đó
 Phương thức static
• Chỉ có thể gọi các phương thức static khác
• Chỉ truy cập thuộc tính static
• Không thể dùng từ khóa this để truy cập
22/25
Mở rộng – Từ khóa static
 Java cho phép định nghĩa 1 lớp bên trong 1 lớp 
khác
 Cấu trúc
class OuterClass { 
... 
static class StaticNestedClass {
... 
} 
class InnerClass { 
... 
} 
} 23/25
Các lớp lồng nhau
 Ví dụ
class Outer { 
int outer_x = 100; 
void test() { 
Inner inner = new Inner(); 
inner.display(); 
} 
class Inner { 
void display() { 
System.out.println("display: outer_x = " + outer_x); } 
} 
} 
public class Main { 
public static void main(String args[]) { 
Outer outer = new Outer(); 
outer.test(); 
} 
} 24/25
Các lớp lồng nhau
 Lớp bên ngoài không thể truy cập dữ liệu của 
lớp bên trong trực tiếp
 Ví dụ
public class Main { 
int outer_x = 100; 
class Inner { 
int y = 10;
void display() { 
System.out.println("display: outer_x = " + outer_x);
} 
} 
void showy() { 
System.out.println(y); 
} 
} 25/25
Các lớp lồng nhau
 Tạo lớp mới từ lớp đã tồn tại
• Lớp mới gọi là lớp con (subclass)
• Lớp cũ gọi là lớp cha (superclass)
 Cú pháp: class subClass extends superClass{
}
26/25
Thừa kế
 Ví dụ
27/25
Thừa kế
Shape
String color;
Shape(color);
double calculateArea();
String getColor();
Circle
double radius;
double getRadius();
Rectangle
Double length;
Double width;
Double getLength();
Double getWidth();
 Ví dụ
class A { 
A() { System.out.println(“Cấu trúc A"); }
} 
class B extends A { 
B() { System.out.println(“Cấu trúc B"); }
} 
class C extends B { 
C() { System.out.println(“Cấu trúc C"); }
} 
public class Main{ 
public static void main(String args[]) {
C c = new C(); 
} 
}
28/25
Thừa kế
 Gọi phương thức khởi tạo của lớp cha
• Cú pháp: super(ds tham số)
• Ví dụ
public Circle(String myColor, double myRadius)
{
super(myColor);
radius = myRadius;
}
29/25
Thừa kế-Sử dụng từ khóa super
 Truy cập 1 thành phần của lớp cha
• Cú pháp: super.tên
• Ví dụ
class Base { int i; } 
class SubClass extends Base { 
int i; 
SubClass(int a, int b) { 
super.i = a; 
i = b;
}
}
30/25
Thừa kế-Sử dụng từ khóa super
 Xảy ra khi 1 phương thức trong lớp con có
cùng tên và kiểu trả về như 1 phương thức 
trong lớp cha
 Phương thức trong lớp cha sẽ bị che khuất
 Để truy cập phương thức trong lớp cha, sử
dụng từ khóa super
31/25
Thừa kế - Chồng phương thức
 Ví dụ
public class Shape {
…
public double calculateArea() {
return 0;
}
}
public class Circle{
…
public double calculateArea() {
return PI * radius * radius;
}
}
32/25
Thừa kế - Chồng phương thức
 So sánh với Quá tải phương thức (Overloading)
• Xảy ra khi các phương thức có cùng tên nhưng khác 
nhau về tham số
• Có thể khác nhau về kiểu trả về của phương thức
 Ví dụ
33/25
Thừa kế - Chồng phương thức
class OverloadDemo { 
void test() { 
System.out.println("No parameters"); } 
void test(int a) { 
System.out.println("a: " + a); } 
void test(int a, int b) { 
System.out.println("a and b: " + a + " " 
+ b); } 
double test(double a) { 
System.out.println("double a: " + a); 
return a * a; } 
}
34/25
Thừa kế - Chồng phương thức
public class Shape {
…
public double calculateArea()
{ return 0; }
}
public class Circle{
…
public double calculateArea()
{ return PI * radius * radius; }
}
public class Rectangle{
…
public double calculateArea()
{ return width*height; }
} 35/25
Đa hình (Polymorphism)
public class Main { 
public static void main(String args[]) { 
Shape f = new Shape(); 
Rectangle r = new Rectangle(9, 5);
Circle t = new Circle(10); 
Shape figref; 
figref = r; 
System.out.println("Area:"+figref.calculateArea());
figref = t; 
System.out.println("Area:"+figref.calculateArea());
figref = f; 
System.out.println("Area:"+figref.calculateArea()); 
} 
}
36/25
Đa hình (Polymorphism)
Lớp Object
 Tất cả các lớp trong Java đều từ lớp Object
37/25
 Phương thức equals: so sánh 2 biến cùng tham 
chiếu 1 đối tượng hay không
• Cú pháp: ObjectName1.equals(ObjectName2)
• Ví dụ: boolean b = object1.equals(object2)
 Toán tử instanceof: kiểm tra 1 đối tượng có
thuộc lớp hay không
• Cú pháp: objectNam instanceof className
• Ví dụ: boolean b = object1 instanceof Rectangle
38/25
Lớp Object
 Gán
• Câu lệnh đúng
Object obj = new Circle(5);
• Câu lệnh sai
Circle myCircle = obj;
 Ép kiểu
Circle myCircle = (Circle)obj;
if (obj instanceof Circle) { 
Circle myCircle = (Circle)obj; 
}
39/25
Lớp Object
Lớp Abstract
 Phương thức abstract: dùng để chỉ định 1 
phương thức cần được viết chồng ở lớp con
• Cú pháp: abstract type name(parameter-list);
• Ví dụ: abstract void callme();
 Lớp abstract:
• Được khai báo vơi từ khóa abstract
• Có thể có hoặc không chứa phương thức abstract
• Không thể tạo đối tượng 
• Cú pháp: abstract class MyAbstractClass{ 
abstract type name(parameter-list); 
} 40/25
abstract class MyAbstractClass { 
abstract void callme(); 
void callmetoo() 
{ System.out.println(“Day khong phai abstract"); } 
} 
class B extends MyAbstractClass { 
void callme() 
{ System.out.println(“Thuc thi lop B"); } 
} 
public class Main { 
public static void main(String args[]) { 
B b = new B(); 
b.callme(); 
b.callmetoo(); } 
}
41/25
 Là bộ chứa các lớp và các interface
 Trong Java, gói được thể hiện là các thư mục
 Tác dụng
• Nhóm các thành phần liên quan
• Giới hạn sự truy cập từ các thành phần bên ngoài 
• Tổ chức code dễ quản lý
42/25
Gói (Package)
 Khai báo gói
package tên_gói;
 Khai báo gói đa cấp
package pkg1[.pkg2[.pkg3]];
 Ví dụ
package graphics; 
public class Rectangle{
…
public double calculateArea() {
return width*height;
}
}
43/25
Gói (Package)
 Truy cập các thành phần thuộc gói
• Sử dụng tên: 
graphics.Circle myCircle = new graphics.Circle();
• Sử dụng câu lệnh import để nạp thành phần
import graphics.Rectangle;
Rectangle myRectangle = new Rectangle();
• Sử dụng import để nạp toàn bộ gói
import graphics.*;
Circle myCircle = new Circle(); 
Rectangle myRectangle = new Rectangle();
44/25
Gói (Package) 
 Quản lý code
• Khai báo gói
• Các câu lệnh import
• Khai báo các thành phần
package MyPack; 
import java.util.Date; 
public class Main { 
public static void main(String args[]) { 
System.out.println(new Date()); 
} 
}
45/25
Gói (Package)
 Cách khai báo
[modifier] class ten_lop{
[modifier] dataType ten_thuoctinh;
[modifier] returnedValue ten_phuongthuc{
…
}
}
46/25
Phạm vi truy cập
Phạm vi truy cập
 Java có 4 phạm vi truy cập cho các thành phần
• public: được truy cập bởi tất cả các thành phần 
khác
• private: được truy cập chỉ bởi các thành phần cùng 
lớp
• protected: được truy cập bởi chỉ các lớp con
• default (không khai báo): được truy cập bởi các 
thành phần cùng gói
47/25
 Vị trí & phạm vi truy cập
48/25
Phạm vi truy cập
49/25
Phạm vi truy cập
o Modifier của Alpha
 Khai báo
[modifier] interface name { 
return-type method-name1(parameter-list); 
return-type method-name2(parameter-list); 
type final-varname1 = value; 
type final-varname2 = value; 
// ... 
return-type method-nameN(parameter-list); 
type final-varnameN = value; }
 Các biến ngầm định là: public, static, final
50/25
Interface
 Ví dụ
interface MyInterface{ 
void callback(int param); 
}
51/25
Interface
 Tạo class từ interface
[modifier] class classname 
[extends superclass] 
[implements interface [,interface...]] { 
// class-body
}
 Trong Java, không cho phép thừa kế từ nhiều 
superclass nhưng có thể thừa kế từ nhiều 
interface
52/25
Interface
 Ví dụ
interface MyInterface { 
void callback(int param); } 
class Client implements MyInterface{ 
public void callback(int p) { 
System.out.println(“Call:" + p); } 
}
public class Main { 
public static void main(String args[]) { 
MyInterface c = new Client(); 
c.callback(42); 
} 
}
53/25
Interface
 Nếu 1 class thực thi interface không đầy đủ thì
lớp đó phải là lớp abstract
 Ví dụ
interface MyInterface { 
void callback(int param);
void show(); 
} 
abstract class Incomplete implements MyInterface 
{ 
int a, b; 
public void show() { 
System.out.println(a + " " + b); } 
} 54/25
Interface
 Interface có thể được thừa kế
interface IntefaceA { 
void meth1(); 
void meth2();
}
interface IntefaceB extends IntefaceA { 
void meth3(); 
}
55/25
Interface

File đính kèm:

  • pdfLập trình Java cơ bản - Chương 3_Lớp trong Java.pdf
Tài liệu liên quan