intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Lập trình hướng đối tượng trong java (Phần 2)

Chia sẻ: Nguyễn Thị Hồng Ngọc Ngọc | Ngày: | Loại File: PDF | Số trang:6

164
lượt xem
43
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Lập trình hướng đố i tượng trong Java ́ LẬP TRINH HƯƠNG ĐÔI TƯỢ NG TRONG JAVA ́ phần 2 IV. LƠP KẾ THỪA ́ 1. Khai báo kế thưa ̀ Ta có thể s ử dụng tính kế thừa tạo lớp tổng quát có những đặc tính chung đại diện cho một tập hợ p các đố i tƣợ ng có cùng mố i quan hệ. Sau đó, lơp này có thể đƣợ c ́ kế thƣa bơi một hay nhiề u lơp khác và nhƣ̃ng đặc tinh này trơ t ̉ ̉ ̀ ́ ́ nhƣ̃ng đặc tinh của lơp...

Chủ đề:
Lưu

Nội dung Text: Lập trình hướng đối tượng trong java (Phần 2)

  1. Lập trình hướng đố i tượng trong Java ́ LẬP TRINH HƯƠNG ĐÔI TƯỢ NG TRONG JAVA ́ phần 2 IV. LƠP KẾ THỪA ́ 1. Khai báo kế thưa ̀ Ta có thể s ử dụng tính kế thừa tạo lớp tổng quát có những đặc tính chung đại diện cho một tập hợ p các đố i tƣợ ng có cùng mố i quan hệ. Sau đó, lơp này có thể đƣợ c ́ kế thƣa bơi một hay nhiề u lơp khác và nhƣ̃ng đặc tinh này trơ t hành những thành ̉ ̉ ̀ ́ ́ nhƣ̃ng đặc tinh của lơp kế thƣa ́ ́ ̀ - Lơp đƣợ c kế thƣa gọi là lơp cha (SuperClass : là lớp cha trực tiếp) ́ ̀ ́ - Lơp kế thƣa gọi là lơp con (SubClass) ́ ̀ ́ Lơp con kế thƣa tấ t cả các biế n và hàm đinh nghia trong lơp cha ̣ ́ ̀ ̃ ́ class ClassName extends SuperClass { //Member Variables Declarations, Methods } - Mặc dù vậy , lơp con không thể truy xuấ t các thành phầ n đƣợ c khai báo private trong ́ lơp cha ́ - Một biế n tham chiế u của lơp cha có thể gán để tham chi ếu đến một lớp con bất kỳ ́ dẫn xuấ t tƣ lơp cha . Khi một tham chiế u đế n một lơp con đƣợ c gán cho biế n tham ̀́ ́ chiế u kiể u lơp cha, ta chỉ có quyề n truy xuấ t nhƣ̃ng phầ n đƣợ c đinh nghia bơi lơp cha. ̣ ̉́ ́ ̃ 2. Viế t chồ ng hàm hay che khuấ t hàm (Overriding Methods) Trong phân cấ p lơp , khi một hàm của lơp con có cùng tên , và giống nhau về s ố ́ ́ lƣợ ng và kiể u tham đố i cũng nhƣ kiể u trả 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 . Khi đó hàm của lơp con sẽ che khuấ t hàm ́ ́ thƣa kế tƣ lơp cha ̀ ̀́ Tuy nhiên lơp con không đƣợ c viế t chồ ng hàm hằ ng (có khai báo final ) và hàm ́ lơp trong lơp cha. ́ ́ Ví dụ : Tấ t cả các lơp là hậu duệ của lơp Object . Lớp Object chứa phƣơng thức ́ ́ toString, mà trả về một đối tƣợng String chứa tên lớp của đối tƣợng . Hầ u hế t các lơp ́ con viế t chồ ng phƣơng thƣc này và in ra một vài điề u gì đó có nghia cho lơp đó ́ ̃ ́ 1
  2. Lập trình hướng đố i tượng trong Java 3. Tư khoá super ̀ Đôi khi bạn không muố n thƣ̣ c hiện viế t chồ ng một phƣơng thƣc mà chỉ muố n ́ thêm chƣc năng vào phƣơng thƣc . Để làm đƣợ c điề u này , bạn gọi phƣơng thức đƣợc ́ ́ viế t chồ ng dùng tƣ khoá super. Tƣ khoá super dùng khi lơp con cầ n tham chiế u lơp cha ̀ ̀ ́ ́ trƣ̣ c tiế p của nó. Super có hai dạng cú pháp : - Dạng 1 : Hàm khởi tạo lớp cha phải đƣợc gọi trƣớc hàm khởi tạo của lớp con . Nế u trong đinh nghia hàm khơi tạo ơ lơp con không có câu lệnh gọi hàm khơi tạo lơp cha , ̣ ̉ ̉́ ̉ ̃ ́ trình biên dich Java sẽ tƣ̣ động đƣa vào câu lệnh gọi hàm khơi tạo mặc đinh của lơp ̣ ̣ ̉ ́ cha có dạng : classname() Bạn có thể tự thêm lệnh gọi hàm khởi tạo ở lớp cha có dạng nhƣ sau : super(Parameter-List) Parameter-List là danh sách c ác tham đối cần thiết cho hàm khởi tạo của lớp cha . super() phải luôn luôn là phát biểu đầu tiên đƣợc thực hiện trong hàm khởi tạo của lớp con Ví dụ : class MyPoint { int x, y; MyPoint(int x, int y) { this.x = x; this.y = y; } void display() { System.out.print(“x = “+x+”, y = “+y+”\n”); } } class MyPoint2 extends MyPoint { int z; String name; MyPoint2(int x, int y, int z, String name) { // Khởi tạo 2 biế n x, y bằ ng cách gọi super(x,y); // hàm dựng của lơp cha ́ this.z = z; this.name = name; 2
  3. Lập trình hướng đố i tượng trong Java } // Viết chồng hàm kế thừa từ lớp cha void display() { System.out.print(“x = “+x+”, y = “+y+”, z = “+z+” “+”name :”+name+”\n”); } } - Dạng 2 : dùng để hàm lớp con truy xuất hàm kế thừa từ lớp cha : super.Member Member có thể là phƣơng thƣc hay biế n của đố i tƣợ ng ́ Ví dụ : Viế t lại hàm display() trong class MyPoint2, có gọi hàm kế thừa từ lớp cha : void display() { super.display(); System.out.print(”, z = “+z+” “+”name :”+name+”\n”); } V. LƠP, PHƢƠNG THƢC TRƢU TƢỢ NG ́ ́ ̀ Trong trƣơng hợ p chúng ta muố n đinh nghia một lơp cha theo một cấ u trúc trƣu ̣ ̀ ̃ ́ ̀ tƣợ ng cho trƣơc mà không cầ n hiện thƣ̣ c đầ y đủ các phƣơng thƣc . Tƣc là ta muố n tạo ́ ́ ́ một lơp cha có dạng chung c ho tấ t cả các lơp con và để các lơp con hiện thƣ̣ c chi tiế t . ́ ́ ́ Khi đó , 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 ́ phải đƣợc chồng lắp trong lớp con gọi là phƣơng thức trừu tƣợng , đƣợ c khai báo abstract và không có phầ n thân phƣơng thƣc ́ abstract [Type] MethodName(Parameter-List) ; Bấ t kỳ lơp nào chƣa một hay nhiề u phƣơng thƣc trƣu tƣợ ng cũng phải khai báo ́ ́ ́ ̀ trƣu tƣợ ng , sƣ dụng tƣ khoá abstract trƣơc tƣ khoá class . Không thể khơi tạo đố i ̉ ̉ ̀ ̀ ́ ̀ tƣợ ng kiể u lơp trƣu tƣợ ng , vì lớp trừu tƣợng không đƣợc định nghĩa đầy đủ . Do đó , ́ ̀ bạn cũng không thể khai báo hàm khởi tạo . Bấ t kỳ lơp con nào cũng phải hoặc là viế t ́ chồ ng tấ t cả các phƣơng thƣc trƣu tƣợng hoặc chính nó lại đƣợ c khai báo abstract ́ ̀ Ví dụ : Trong các ƣng dụng , bạn có thể vẽ đƣờng tròn , hình chữ nhật , đoạn thẳ ng , ́ đƣơng cong… Mỗi một đố i tƣợ ng đồ hoạ này đề u chƣa các thuộc tinh (vị trí , nét viền ) ̀ ́ ́ và hà nh vi (di chuyể n , thay kich thƣơc , vẽ). Bạn có thể khai báo chúng kế thừa lớp ́ ́ Graphic. Tuy nhiên vẽ một đƣơng tròn là hoàn toàn khác vơi vẽ một hinh chƣ̃ nhật , nên ̀ ́ ̀ lơp Graphic đƣợ c khai báo là lơp trƣu tƣơng , chƣa các phƣơ ng thƣc đã đƣợ c hiện ́ ́ ̀ ̀ ́ ́ thƣ̣ c nhƣ moveTo, và phƣơng thức trừu tƣợng nhƣ draw 3
  4. Lập trình hướng đố i tượng trong Java abstract class GraphicObject { int x, y; ... void moveTo(int newX, int newY) { ... } abstract void draw(); } Mỗi một lơp con không trƣu tƣợ ng của lơp Graphic nhƣ C ircle, Rectangle sẽ ́ ̀ ́ phải cài đặt đầy đủ cho phƣơng thức draw class Circle extends GraphicObject { void draw() { ... } } class Rectangle extends GraphicObject { void draw() { ... } } VI. LƠP HĂNG (KHÔNG KẾ THƢA), HÀM HẰNG (KHÔNG VIẾT CHÔNG) ̀ ̀ ̀ ́ ̀ 1. Sư dụng tư khoá final cấ m sự chồ ng lắ p ̉ ̀ Mặc dù chồ ng lắ p phƣơng thƣc là một trong nhƣ̃ng đặc điể m mạnh nhấ t của ́ Java, tuy nhiên trong vài trƣơng hợ p bạn muố n cấ m điề u này . Để 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ừ khoá final vào đầu khai ́ ́ báo Ví dụ : class Box { double width; double height; double depth; … final double volume() { 4
  5. Lập trình hướng đố i tượng trong Java return width * height * depth; } ... } 2. Sư dụng tư khoá final cấ m sự kế thưa ̉ ̀ ̀ Muố n khai báo một lơp mà không có lơp con kế thƣa , bạn sử dụng từ khoá final. ́ ́ ̀ Vơi một lơp final, thì tất cả các phƣơng thức của nó sẽ là final. ́ ́ Ta không thể khai báo một lơp vƣa abstract và final vì một lơp trƣu tƣợ ng là một ́ ̀ ́ ̀ lơp chƣa hoàn chinh và phải có lơp con để hiện thƣ̣ c đầ y đủ ̉ ́ ́ Ví dụ : final class Box { . . . } ̀ VII. LƠP LÔNG NHAU ́ Có thể định nghĩa một lớp bên trong một lớp khác . Lơp nhƣ vậy gọi là lơp lồ ng ́ ́ (Nested Class) và đƣợc cài đặt nhƣ sau : class EnclosingClass{ // Lơp bao bên ngoài ́ ... static class StaticNestedClass { // Lơp lồ ng tinh ́ ̃ ... } class InnerClass { // Lơp lồ ng phi tinh hay lơp nội bộ ́ ̃ ́ ... } } Lơp lồ ng chỉ đƣợ c biế t bên trong tầ m vƣ̣ c của lơp bao bên ngoài . Bộ dich Java ̣ ́ ́ sẽ báo lỗi nếu một đoạn mã bất kỳ bên ngoài lớp bao cố dùng trực tiếp lớp lồng. Một lơp lồ ng c ó quyề n truy cập đế n các thành viên của lơp bao bên ngoài , thậm ́ ́ chí nếu c húng đƣợc khai báo private . Tuy nhiên, lơp bao không thể truy xuấ t các thành ́ phầ n của lơp lồ ng. ́ Có hai kiểu lớp lồng : tĩnh và phi tĩnh. Lớp lồng tĩnh (static nested class) đƣợ c bổ sung tƣ khoá static . Nó không thể ̀ tham chiế u trƣ̣ c tiế p đế n biế n hay phƣơng thƣc đố i tƣợ ng đƣợ c đinh nghia trong lơp ̣ ́ ̃ ́ 5
  6. Lập trình hướng đố i tượng trong Java bao, mà chỉ dùng chúng thông qua đối tƣợng . Vì giới hạn này nên lớp lồng tĩnh ít đƣợc dùng. Hầu hết các lớp lồng là lớp nội bộ Lớp lồng phi tĩnh (nonstatic nested class ) không bổ sung tƣ khoá static , còn ̀ đƣợ c gọi là lơp nội bộ (inner class). Nó có thể truy cập trực tiếp đến các biến và ́ phƣơng thƣc đố i tƣợ ng. ́ class Outer { int outer_x = 100; void test() { Inner inner = new Inner(); inner.display_x(); } class Inner { // có thể truy xuất trực tiếp biến đối tƣợng của lớp Outer int inner_y = 10; void display_x() { System.out.println(“display : outer_x = “ + outer_x); } } void display_y() { // không thể truy xuất biến đối tƣợng của lớp Inner System.out.println(“display : inner_y = “ + inner_y); // Error } } class InnerClassDemo { public static void main(String args[]) { Outer outer = new Outer(); outer.test(); } } 6
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2