logo

Lâp trinh hướng đôi tượng trong Java

Tham khảo tài liệu 'lâp trinh hướng đôi tượng trong java', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
Lâp trinh 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 trinh hương đôi tương. Nêu ban chưa bao giơ dung môt ngôn ̣ ̣ ̀ ́ ́ ̣ ̀ ̣ ngư lâp trinh hương đôi tương trươc đây, ban cân phai hiêu cac khai niêm sau : lâp trinh hương ̣ ̀ ́ ̣ ̀ ̉ ̉ ́ ́ ̣ ̣ ̀ đôi tương (Object Oriented Programming) là gì ? đôi tương (Object), lơp (class) là gi, môi quan ́ ́ ̀ ́ hệ giưa đôi tương và lơp, gơi thông điêp (Messages) đên cac đôi tương là gì ? ́ ̣ ́ ́ ́ I. KHAI NIÊM LÂP TRINH HƯƠNG ĐÔI TƯƠNG ́ ̣ ̣ ́ 1. Lâp trinh hương đôi tương (Object Oriented Programming) ̣ ̀ ́ Môi môt chương trinh may tinh đêu gôm có 2 phân : phân mã lênh và phân dư liêu. Môt ̃ ̣ ̀ ́ ́ ̀ ̀ ̀ ̀ ̣ ̀ ̣ ̣ số chương trinh đăt trong tâm ơ phân mã lênh, số khac đăt trong tâm ơ phân dư liêu. Tư đó dân ̀ ̣ ̣ ̀ ̣ ́ ̣ ̣ ̀ ̣ ̃ đên 2 mô hinh quyêt đinh nên câu truc cua chương trinh : môt trả lơi cho câu hoi “Điêu gì đang ́ ̀ ́ ̣ ́ ́ ̉ ̀ ̣ ̉ ̀ xay ra”, và môt cho “Cai gì đang chiu tac đông”. Mô hinh 1 goi là mô hinh hương xư ly, nó mô ̉ ̣ ́ ̣ ́ ̣ ̀ ̣ ̀ ́ tả như là môt chương trinh bao gôm môt chuôi cac bươc thưc hiên (mã lênh). Nhưng khi ̣ ̀ ̀ ̣ ̃ ́ ̣ ̣ chương trinh cang ngay cang lơn và phưc tap thì khó khăn để sư dung mô hinh thư nhât. ̀ ̀ ̀ ̀ ̣ ̣ ̀ ́ Vì vây mô hinh thư 2 đươc đưa ra, đó là mô hinh hương đôi tương. Chương trinh cua ̣ ̀ ̀ ́ ̀ ̉ ban sẽ xây dưng dưa vao dư liêu và phân giao diên đươc đinh nghia cho phân dư liêu đo. Mô ̣ ̀ ̣ ̀ ̣ ̣ ̃ ̀ ̣ ́ hinh nay đươc mô tả như là dư liêu điêu khiên truy xuât đôi vơi mã lênh. ̀ ̀ ̣ ̀ ̉ ́ ́ ̣ Ngôn ngư lâp trinh hương đôi tương có cac khả năng sau : ̣ ̀ ́ ́ - Mô phong thế giơi thưc môt cach tư nhiên bơi cac đôi tương và môi quan hệ giưa chung, ̉ ̣ ́ ́ ́ ́ ́ thuân tiên cho viêc thiêt kế hệ thông phưc tap ̣ ̣ ̣ ́ ́ ̣ - Thưa kế mã có săn môt cach dễ dang, giup tiêt kiêm công sưc và nâng cao năng suât cua ngươi ̃ ̣ ́ ̀ ́ ́ ̣ ́ ̉ lâp trinh, dễ bao tri, dễ nâng câp, mơ rông ̣ ̀ ̉ ̀ ́ ̣ 2. Trưu tương hoá (Abstraction) Con ngươi đã đơn gian hoá cac vân đề phưc tap thông qua sư trưu tương hoa. Ví du, ̉ ́ ́ ̣ ́ ̣ ngươi sư dung may tinh không nhin may tinh môt cach phưc tap. Nhơ sư trưu tương hoá mà ̣ ́ ́ ̀ ́ ́ ̣ ́ ̣ ngươi ta có thể sư dung may tinh mà không quan tâm đên câu truc chi tiêt bên trong may tinh. ̣ ́ ́ ́ ́ ́ ́ ́ ́ Họ chỉ sư dung chung như là môt thưc thể ̣ ́ ̣ Cach tôt nhât để năm vưng kỹ thuât trưu tương là dung hệ thông phân câp. Điêu nay cho ́ ́ ́ ́ ̣ ̀ ́ ́ ̀ ̀ phep ban phân lơp cac thanh phân có ý nghia cua cả hệ thông phưc tap, chia nhỏ chung thanh ́ ̣ ́ ̀ ̀ ̃ ̉ ́ ̣ ́ ̀ nhưng phân đơn gian có thể quan lý đươc. Nhin bên ngoai may tinh là môt đôi tương, nêu nhin ̀ ̉ ̉ ̀ ̀ ́ ́ ̣ ́ ́ ̀ sâu hơn môt câp, may tinh bao gôm môt số bộ phân : hôp điêu khiên, man hinh, ban phim, ̣ ́ ́ ́ ̀ ̣ ̣ ̣ ̀ ̉ ̀ ̀ ̀ ́ chuôt..., cac bộ phân nay lai bao gôm cac bộ phân nhỏ hơn, ví dụ như hôp điêu khiên có bang ̣ ́ ̣ ̀ ̣ ̀ ́ ̣ ̣ ̀ ̉ ̉ mach chinh chưa CPU, cac mach giao tiêp găn trên bang mach chinh, đia cưng, ổ đia mêm… ̣ ́ ́ ̣ ́ ́ ̉ ̣ ́ ̃ ̃ ̀ Nhơ sư trưu tương hoá mà ban không quan tâm đên chi tiêt tưng bang mach, mà chỉ quan tâm ̣ ́ ́ ̉ ̣ môi quan hê, giao tiêp giưa cac bộ phân. Môt mach giao tiêp dù có chưc năng ly kỳ thế nao đi ́ ̣ ́ ́ ̣ ̣ ̣ ́ ̀ nưa, ban có thể sư dung không mây khó khăn nêu đươc ân vưa văn vao khe căm trên bang mach ̣ ̣ ́ ́ ́ ̣ ̀ ́ ̉ ̣ chinh. ́ Sư phân câp trưu tương môt hệ thông phưc tap có thể ap dung cho cac chương trinh ́ ̣ ́ ̣ ́ ̣ ́ ̀ may tinh. Phân dư liêu tư môt chương trinh hương xư lý kinh điên có thể trưu tương hoá thanh ́ ́ ̀ ̣ ̣ ̀ ̉ ̀ cac đôi tương thanh phân. Day cac xư lý trơ thanh cac thông điêp giưa cac đôi tương. Vì thế cac ́ ́ ̀ ̀ ̃ ́ ̀ ́ ̣ ́ ́ ́ đôi tương cân có hoat đông đăc trưng riêng. Ban có thể coi cac đôi tương nay như nhưng thưc ́ ̀ ̣ ̣ ̣ ̣ ́ ́ ̀ thể đôc lâp tiêp nhân cac yêu câu tư bên ngoai. Đây là phân côt loi cua lâp trinh hương đôi ̣ ̣ ́ ̣ ́ ̀ ̀ ̀ ́ ̃ ̉ ̣ ̀ ́ tương. II. CƠ CHẾ TRIÊN KHAI MÔ HINH HƯƠNG ĐÔI TƯƠNG ̉ ́ Tât cả cac ngôn ngư lâp trinh hương đôi tương đêu có cac cơ chế cho phep ban triên ́ ́ ̣ ̀ ́ ̀ ́ ́ ̣ ̉ khai cac mô hinh hương đôi tương. Đó là tinh đong goi, kế thưa, và tinh đa hinh. ́ ̀ ́ ́ ́ ́ ́ ̀ 1 Lâp trinh hướng đôi tượng trong Java ̣ ̀ ́ ́ 1. Tinh đong goi (Encapsulation) ́ ́ Đây là cơ chế dung môt vỏ boc kêt hơp phân dư liêu và cac thao tac trên dư liêu đó ̀ ̣ ̣ ́ ̀ ̣ ́ ́ ̣ (phân mã lênh) thanh môt thể thông nhât, tao nên sư an toan, tranh viêc sư dung không đung ̀ ̣ ̀ ̣ ́ ́ ̣ ̀ ́ ̣ ̣ ́ thiêt kê, bao vệ cho mã lênh và dư liêu chông viêc truy xuât tư nhưng đoan mã lênh bên ngoai. ́ ́ ̉ ̣ ̣ ́ ̣ ́ ̣ ̣ ̀ Trong Java tinh đong goi thể hiên qua khai niêm lơp (Class). Lơp là hat nhân cua Java, ́ ́ ́ ̣ ́ ̣ ̣ ̉ tao nên tang cho lâp trinh hương đôi tương trong Java. Nó đinh nghia dư liêu và cac hanh vi cua ̣ ̀ ̉ ̣ ̀ ́ ̣ ̃ ̣ ́ ̀ ̉ nó (dư liêu và mã lênh), goi là cac thanh viên cua lơp, dung chung cho cac đôi tương cung loai. ̣ ̣ ̣ ́ ̀ ̉ ̀ ́ ́ ̀ ̣ Tư sư phân tich hệ thông, ngươi ta trưu tương nên cac lơp. Sau đó cac đôi tương đươc tao ra ́ ́ ́ ́ ́ ̣ theo khuôn mâu cua lơp. Môi đôi tương thuôc môt lơp có dư liêu và hanh vi đinh nghia cho lơp ̃ ̉ ̃ ́ ̣ ̣ ̣ ̀ ̣ ̃ đo, giông như là sinh ra tư môt khuôn đuc cua lơp đo. Vì vây mà l ơp là khuôn mâu cua đôi ́ ́ ̣ ́ ̉ ́ ̣ ̃ ̉ ́ tương, đôi tương là thể hiên cua môt lơp. Lơp là câu truc logic, con đôi tương là câu truc vât ly. ́ ̣ ̉ ̣ ́ ́ ̀ ́ ́ ́ ̣ ́ Dư liêu đinh nghia trong lơp goi là biên, mã lênh goi là phương thưc. Phương thưc đinh nghia ̣ ̣ ̃ ̣ ́ ̣ ̣ ̣ ̃ cho viêc sư dung dư liêu như thế nao. Điêu nay có nghia là hoat đông cua lơp đươc đinh nghia ̣ ̣ ̣ ̀ ̀ ̀ ̃ ̣ ̣ ̉ ̣ ̃ thông qua phương thưc. Cac đăc trưng cua lơp gôm có hai phân chinh : thuôc tinh (Attribute) và hanh vi ́ ̣ ̉ ̀ ̀ ́ ̣ ́ ̀ (Behavior). Giả sư ban phai tao ra giao diên vơi ngươi dung và cân có nhưng nut nhân (Button). ̣ ̉ ̣ ̣ ̀ ̀ ́ ́ Thế thì trươc hêt ban xây dưng lơp Button vơi cac thuôc tinh như nhan ghi trên nut, chiêu rông, ́ ̣ ́ ̣ ́ ̃ ́ ̀ ̣ chiêu cao, mau cua nut, đông thơi quy đinh hanh vi cua nut nhân, nghia là nut nhân cân phan ̀ ̀ ̉ ́ ̀ ̣ ̀ ̉ ́ ́ ̃ ́ ́ ̀ ̉ ưng như thế nao khi đươc chon, phat yêu câu gi, có đôi mau hay nhâp nhay chi không. Vơi lơp ̀ ̣ ́ ̀ ̀ ̉ ̀ ́ ́ Button như vây, ban có thể tao ra nhanh chong nhưng nut nhân cụ thể phuc vụ cho cac muc đich ̣ ̣ ̣ ́ ́ ́ ̣ ́ ̣ ́ ́ khac nhau Goi là kỹ thuât cua Java, dung để phân hoach không gian tên lơp, giao diên thanh ́ ̣ ̉ ̀ ̣ ̣ ̀ nhưng vung dễ quan lý hơn, thể hiên tinh đong goi cua Java. ̀ ̉ ̣ ́ ́ ́ ̉ 2. Tinh kế thưa (Inheritance) ́ Tinh kế thưa là khả năng xây dưng cac lơp mơi tư cac lơp đã co. Tinh đong goi cung tac ́ ́ ́ ́ ́ ́ ́ ̃ ́ đông đên tinh kế thưa. Khi lơp đong goi môt số dư liêu và phương thưc, lơp mơi sẽ kế thưa ̣ ́ ́ ́ ́ ̣ ̣ moi câu truc dư liêu và cac phương thưc cua lơp mà nó kế thưa. Ngoai ra nó có thể bổ sung cac ̣ ́ ́ ̣ ́ ̉ ̀ ́ dư liêu và cac phương thưc cua riêng minh. ̣ ́ ̉ ̀ Nó rât quan trong vì nó ưng dung cho khai niêm cây phân câp (mô hinh TopDown). ́ ̣ ̣ ́ ̣ ́ ̀ Không sư dung cây phân lơp, môi lơp phai đinh nghia tât cả cac dư liêu và phương thưc cua ̣ ̃ ̉ ̣ ̃ ́ ́ ̣ ̉ minh môt cach rõ rang. Nêu sư dung sư kế thưa, môi lơp chỉ cân đinh nghia thêm nhưng đăc ̀ ̣ ́ ̀ ́ ̣ ̃ ̀ ̣ ̃ ̣ trưng cua minh. ̉ ̀ Ví dụ : Xe có thể xem như môt lơp và cac xe Pergout, BWM, Dream là cac đôi tương cua lơp ̣ ́ ́ ́ ̉ xe. Cac xe đêu có thể lai đi, dưng lai... Tư lơp xe ơ trên, ta có thể xây dưng cac lơp xe đap, xe ́ ̀ ́ ̣ ́ ̣ ôtô. Xe ôtô có thêm may và có thể tư khơi đông… ́ ̣ ́ ̀ 3. Tinh đa hinh (Polymorphism) Khi môt lơp đươc kế thưa tư cac lơp tổ tiên thì nó có thể thay đôi cach thưc lam viêc ̣ ́ ̉ ́ ̀ ̣ cua lơp tổ tiên trong môt số phương thưc nao đó ( nhưng tên, kiêu trả vê, danh sach tham đôi ̉ ̣ ̀ ̉ ̀ ́ ́ cua phương thưc thì vân giư nguyên). Điêu nay goi là viêt chông. Như vây vơi môt tên phương ̉ ̃ ̀ ̀ ̣ ́ ̀ ̣ ̣ thưc, chương trinh có thể có cac hanh đông khac nhau tuy thuôc vao lơp cua đôi tương goi ̀ ́ ̀ ̣ ́ ̀ ̣ ̀ ̉ ́ ̣ phương thưc. Đó là tinh đa hinh ́ ̀ Ví dụ : vơi môt phương thưc chay, xe ôtô, xe may có thể tăng ga, con xe đap thì phai đap… ̣ ̣ ́ ̀ ̣ ̉ ̣ Tinh đa hinh con thể hiên ơ viêc môt giao diên có thể sư dung cho cac hoat đông cua môt ́ ̀ ̀ ̣ ̣ ̣ ̣ ̣ ́ ̣ ̣ ̉ ̣ lơp tông quat, hay con goi là “môt giao diên, nhiêu phương thưc”. Có nghia là có thể thiêt kế ̉ ́ ̀ ̣ ̣ ̣ ̀ ̃ ́ môt giao diên tông quat cho môt nhom cac hanh vi liên quan. Điêu nay giam thiêu sư phưc tap ̣ ̣ ̉ ́ ̣ ́ ́ ̀ ̀ ̀ ̉ ̉ ̣ băng cach cho phep môt giao diên có thể sư dung cho cac hoat đông cua môt lơp tông quat. ̀ ́ ́ ̣ ̣ ̣ ́ ̣ ̣ ̉ ̣ ̉ ́ Trinh biên dich sẽ xac đinh hoat đông cụ thể nao sẽ đươc thi hanh tuy theo điêu kiên. Ban chỉ ̀ ̣ ́ ̣ ̣ ̣ ̀ ̀ ̀ ̀ ̣ ̣ 2 Lâp trinh hướng đôi tượng trong Java ̣ ̀ ́ cân nhơ cac giao diên cua lơp tông quat và sư dung no. ̀ ́ ̣ ̉ ̉ ́ ̣ ́ Sư kêt hơp đung đăn giưa : đa hinh, đong goi và kế thưa tao nên môt môi trương lâp ́ ́ ́ ̀ ́ ́ ̣ ̣ ̣ trinh có khả năng phat triên tôt hơn rât nhiêu so vơi môi trương không hỗ trơ hương đôi tương. ̀ ́ ̉ ́ ́ ̀ ́ Môt cây phân câp lơp thiêt kế tôt là điêu căn ban cho viêc sư dung lai nhưng đoan mã lênh mà ̣ ́ ́ ́ ̀ ̉ ̣ ̣ ̣ ̣ ̣ ban đã tôn công sưc nhiêu cho viêc phat triên và kiêm tra. Tinh đong goi cho phep ban sư dung ̣ ́ ̀ ̣ ́ ̉ ̉ ́ ́ ́ ́ ̣ ̣ cac đôi tương và ra lênh thi hanh tơi chung mà không phá vơ câu truc cac đoan mã lênh đã bao ́ ́ ̣ ̀ ́ ́ ́ ́ ̣ ̣ ̉ vệ bơi giao diên cua cac lơp. Sư đa hinh cho phep ban tao ra nhưng đoan mã lênh gon gang, dễ ̣ ̉ ́ ̀ ́ ̣ ̣ ̣ ̣ ̣ ̀ đoc, dễ hiêu và có tinh ôn đinh. ̣ ̉ ́ ̉ ̣ Java là ngôn ngư lâp trinh hương đôi tương nên có đây đủ cac tinh năng trên, thư ̣ ̀ ́ ̀ ́ ́ viên lơp Java đươc cung câp khá đây đủ cho ngươi lâp trinh để băt đâu môt dư an mơi ̣ ́ ̀ ̣ ̀ ́ ̀ ̣ ́ 3 Đôi tượng và lớp, mang ́ ̉ Chương : ĐÔI TƯỢNG VÀ LỚP, MANG ́ ̉ I. XÂY DƯNG LƠP Khi đinh nghia môt lơp, ban chỉ ra thuôc tinh mà nó chưa đươc thể hiên băng biên ̣ ̃ ̣ ̣ ̣ ́ ̣ ̀ ́ (Member Variable) và hanh vi đươc thể hiên bơi ham (Method) ̀ ̣ ̀ Cac biên đinh nghia bên trong môt lơp goi là cac biên thanh viên (Member Variables). ́ ́ ̣ ̃ ̣ ̣ ́ ́ ̀ Mã lênh chưa trong cac phương thưc (Method). Cac phương thưc và biên đinh nghia trong lơp ̣ ́ ́ ́ ̣ ̃ goi chung là thanh phân cua lơp. Trong hâu hêt cac lơp, cac biên thể hiên đươc truy câp bơi cac ̣ ̀ ̀ ̉ ̀ ́ ́ ́ ́ ̣ ̣ ́ phương thưc đinh nghia trong lơp đo. Vì vây, chinh cac phương thưc quyêt đinh dư liêu cua lơp ̣ ̃ ́ ̣ ́ ́ ́ ̣ ̣ ̉ có thể dung như thế nao. Lơp đinh nghia môt kiêu dư liêu mơi, dung để tao cac đôi tương thuôc ̀ ̀ ̣ ̃ ̣ ̉ ̣ ̀ ̣ ́ ́ ̣ ̉ kiêu đo. ́ Dang đây đủ cua môt đinh nghia lơp như sau : ̣ ̀ ̉ ̣ ̣ ̃ [public] Lơp đươc truy xuât chung cho cac Package ́ ́ khac, măc đinh chỉ có cac đoan mã trong ́ ̣ ̣ ́ ̣ cung môt goi mơi có quyên truy xuât nó ̀ ̣ ́ ̀ ́ [abstract] Lơp trưu tương, không thể khơi tao ̣ [final] Lơp hăng không có lơp con, không kế thưa ̀ class ClassName Tên lơp [extends SuperClass] Kế thưa lơp cha SuperClass [implements Interfaces] Giao diên đươc cai đăt bơi Class ̣ ̀ ̣ { //Member Variables Declarations ́ Khai bao cac biên ́ ́ // Methods Declarations Khai bao cac phương thưc ́ ́ } Ví dụ : Tao môt lơp Box đơn gian vơi ba biên : width, height, depth ̣ ̣ ̉ ́ /* Đinh nghia lơp ̣ ̃ */ class Box { double width; double height; double depth; } II. TAO ĐÔI TƯƠNG ̣ ́ 1. Khai bao đôi tương ́ ́ Để có đươc cac đôi tương cua môt lơp phai qua hai giai đoan : ́ ́ ̉ ̣ ̉ ̣  ClassName ObjectName; Ví dụ : Box myBox Khai bao biên myBox có kiêu lơp Box. Khai bao nay thưc ra không câp phat ký ưc đủ ́ ́ ̉ ́ ̀ ́ ́ chưa đôi tương thuôc lơp Box, mà chỉ tao ra quy chiêu trỏ đên đôi tương Box. Sau câu lênh nay, ́ ̣ ̣ ́ ́ ́ ̣ ̀ quy chiêu myBox xuât hiên trên ký ưc chưa giá trị null chỉ ra răng nó chưa trỏ đên môt đôi ́ ́ ̣ ̀ ́ ̣ ́ tương thưc tế nao ̀ Khac vơi câu lênh khai bao biên kiêu sơ câp là danh chỗ trên ký ưc đủ chưa môt ́ ̣ ́ ́ ̉ ́ ̀ ̣ trị thuôc kiêu đó : ̣ ̉ Ví dụ : int i; ̣ ̀ ́ Sau câu lênh nay, biên nguyên i hinh thanh. ̀ ̀  Sau đo, để thưc sư tao ra môt đôi tương và gan đia chỉ cua đôi tương cho biên ́ ̣ ̣ ́ ́ ̣ ̉ ́ ́ 4 Đôi tượng và lớp, mang ́ ̉ nay, dung toan tư new ̀ ̀ ́ ObjectName = new ClassName(); Ví dụ : myBox = new Box();  Có thể kêt hơp cả hai bươc trên vao môt câu lênh : ́ ̀ ̣ ̣ ClassName ObjectName = new ClassName(); Ví dụ : Box myBox = new Box(); Box myBox2 = myBox; myBox2 tham chiêu đên cung đôi tương mà myBox tham chiêu ́ ́ ̀ ́ ́ myBox width Box Object height depth myBox2 2. Cach truy xuât thanh phân cua lơp ́ ́ ̀ ̀ ̉  Biên khai bao trong đinh nghia lơp gôm có hai loai : ́ ́ ̣ ̃ ̀ ̣ - Biên đôi tương (Instance Variable hay Object Variable) : chỉ thuôc tinh đôi tương, khi truy ́ ́ ̣ ́ ́ xuât phai khơi tao đôi tương ́ ̉ ̣ ́ + Cach khai bao biên đôi tương : ́ ́ ́ ́ Type InstanceVar; + Cach truy câp biên đôi tương : ́ ̣ ́ ́ ObjectName.InstanceVar - Biên lơp (Class Variable) : về ban chât là biên toan cuc, là biên tinh đươc tao lâp môt lân cung ́ ̉ ́ ́ ̀ ̣ ́ ̃ ̣ ̣ ̣ ̀ ̀ vơi lơp, dung chung cho moi đôi tương thuôc lơp, khi truy xuât không cân khơi tao đôi tương, ̀ ̣ ́ ̣ ́ ̀ ̣ ́ để trao đôi thông tin cua cac đôi tương cung lơp ̉ ̉ ́ ́ ̀ + Cach khai bao biên lơp : ́ ́ ́ static Type ClassVar; + Cach truy câp biên lơp : ́ ̣ ́ ClassName.ClassVar  Ham khai bao trong đinh nghia lơp gôm có hai loai : ̀ ́ ̣ ̃ ̀ ̣ - Ham đôi tương (Object Method) : cach truy xuât ham đôi tương như biên đôi tương ̀ ́ ́ ́ ̀ ́ ́ ́ ObjectName.ObjectMethod(Parameter-List) - Ham lơp (Class Method) : thông thương môt thanh phân cua lơp chỉ truy xuât trong sư ̀ ̣ ̀ ̀ ̉ ́ liên kêt vơi môt đôi tương thuôc lơp cua no. Tuy nhiên, có thể tao ra môt thanh phân mà có thể ́ ̣ ́ ̣ ̉ ́ ̣ ̣ ̀ ̀ dung môt đôc lâp môt minh, không cân tham chiêu đên môt đôi tương cụ thê, có thể đươc truy ̀ ̣ ̣ ̣ ̣ ̀ ̀ ́ ́ ̣ ́ ̉ xuât trươc khi bât kỳ đôi tương nao cua lơp đó đươc tao ra, băng cach đăt trươc khai bao cua ́ ́ ́ ̀ ̉ ̣ ̀ ́ ̣ ́ ̉ nó tư khoá static. Cach truy xuât ham lơp :́ ́ ̀ ClassName.ClassMethod(Parameter-List) Cac ham toan hoc cua lơp Math trong Package Java.Lang là ham lơp nên khi goi không cân phai ́ ̀ ́ ̣ ̉ ̀ ̣ ̀ ̉ khơi tao đôi tương̣ ́ Ví dụ : double a = Math.sqrt(453.28); Ví dụ 1: class BaiTho { static int i; // Biên lơp ́ String s; // Biên đôi tương ́ ́ BaiTho(String ss) { // Ham khơi tao ̀ ̣ s = ss; i++; 5 Đôi tượng và lớp, mang ́ ̉ } void content( ) { System.out.println(s); } } class UngDung { public static void main(String args[]){ BaiTho p1 = new BaiTho(“Chi co thuyen moi hieu”); BaiTho p2 = new BaiTho(“Bien menh mong nhuong nao”); p1.content(); p2.content(); System.out.println(“So cau tho la : “+BaiTho.i); } } Khi tao đôi tương p1, p2 bơi toan tư new, ham dưng BaiTho () đươc goi, và i tăng lên 1 ̣ ́ ́ ̀ ̣ Ví dụ 2: class BaiTho2 { static int i; String s; BaiTho2(String ss) { // Ham khơi tao ̀ ̣ s = ss; i++; } static int number() { // Ham lơp̀ return i; } String content() { // Ham đôi tương ̀ ́ return s; } } class UngDung2 { public static void main (String args[]) { System.out.println(“Bai tho co “+BaiTho2.number()+“ cau”); BaiTho2.p1 = new BaiTho2(“Chi co thuyen moi hieu”); BaiTho2.p2 = new BaiTho2(“Bien menh mong nhuong nao”); System.out.println(“Bai tho co “+BaiTho2.number()+“ cau”); System.out.println(“Cau tho\n“+p1.content().toUpperCase()+”\nco” + p1.content().length() +” ky tu”); System.out.println(“Tu \”tinh yeu\“ bat dau sau ky tu thu“+ p2.content().indexOf(“tinh yeu”)+” trong cau\n”+ p2.content().toUpperCase()); } } Goi ham lơp BaiTho2.number() luc chưa goi ham dưng BaiTho2 để khơi tao đôi tương sẽ cho ̣ ̀ ́ ̣ ̀ ̣ ́ trị 0 p1.content() trả về môt đôi tương String ̣ ́ III. GIƠI THIÊU VỀ PHƯƠNG TH ƯC ̣ 1. Khai bao phương thưc (ham) ́ ̀ Dang tông quat cua môt phương thưc như sau : ̣ ̉ ́ ̉ ̣ 6 Đôi tượng và lớp, mang ́ ̉ [acess] ̀ ̉ ́ điêu khiên truy xuât [static] ham lơp ̀ [abstract] ham trưu tương ̀ [final] ̀ ham hăng ̀ [Type] MethodName(Parameter-List) throws exceptions { // Body of method } - Type : Kiêu dư liêu do ham trả vê, có thể là kiêu bât ky, kể cả cac kiêu lơp do ban tao ra. Nêu ̉ ̣ ̀ ̀ ̉ ́ ̀ ́ ̉ ̣ ̣ ́ ham không trả về giá trị nao, kiêu trả về cua nó phai là void. ̀ ̀ ̉ ̉ ̉ - Cac ham có kiêu trả về không phai là void sẽ trả về môt giá trị cho chương trinh goi nó dung ́ ̀ ̉ ̉ ̣ ̀ ̣ ̀ dang câu lênh return như sau : ̣ ̣ return biêu thưc; ̉ Giá trị cua biêu thưc đươc tinh và trả về cho ham ̉ ̉ ́ ̀ - Tât cả thông tin ban muôn truyên đươc gơi thông qua tham số năm trong hai dâu ( ) ngay sau ́ ̣ ́ ̀ ̀ ́ tên ham. Nêu không có tham số vân phai có ( ) ̀ ́ ̃ ̉ Parameter-List : Danh sach tham đôi phân cach bơi cac dâu phây, môi tham đôi phai đươc khai ́ ́ ́ ́ ́ ̉ ̃ ́ ̉ bao kiêu, có thể là kiêu bât ky, có dang : Type Parameter1, Type Parameter2 ... ́ ̉ ̉ ́ ̀ ̣ 2. Pham vi truy xuât thanh phân cua lơp ̣ ́ ̀ ̀ ̉ Cac điêu khiên truy xuât cua Java là public, private và protected. protected chỉ ap dung ́ ̀ ̉ ́ ̉ ́ ̣ khi có liên quan đên kế thưa sẽ xet đên sau ́ ́ ́ Khi bổ sung tiên tố cho môt thanh phân cua lơp (biên và ham) là : ̀ ̣ ̀ ̀ ̉ ́ ̀ - Tư khoá public : chỉ ra răng thanh phân nay có thể đươc truy xuât bơi bât kỳ dong lênh ̀ ̀ ̀ ̀ ́ ́ ̀ ̣ nao dù ơ trong hay ngoai lơp mà nó khai bao ̀ ̀ ́ - private : chỉ có thể đươc truy xuât trong lơp cua no, moi đoan mã năm ngoai lơp, kể cả nhưng ́ ̉ ́ ̣ ̣ ̀ ̀ lơp con đêu không có quyên truy xuât ̀ ̀ ́ - Khi không có điêu khiên truy xuât nao đươc dung, măc nhiên là public nhưng chỉ trong goi cua ̀ ̉ ́ ̀ ̀ ̣ ́ ̉ no, không thể truy xuât tư bên ngoai goi cua nó ́ ́ ̀ ́ ̉ 3. Phương thưc main() Khi chay ưng dung đôc lâp, ban chỉ tên Class muôn chay, Java tim goi ham main() trươc ̣ ̣ ̣ ̣ ̣ ́ ̣ ̀ ̣ ̀ tiên trong Class đo, phương thưc main sẽ điêu khiên chay cac phương thưc khac. ́ ̀ ̉ ̣ ́ ́ Dang tông quat cua phương thưc main() ̣ ̉ ́ ̉ public static void main(String args[]) { // Body of Method } - Môt chương trinh chỉ cân môt lơp có phương thưc main() goi là lơp ưng dung đôc lâp ̣ ̀ ̀ ̣ ̣ ̣ ̣ ̣ Primary Class. - Tư khoá static cho phep ham main() đươc goi khi không cân khơi tao đôi tương. Vì main () ́ ̀ ̣ ̀ ̣ ́ đươc trinh thông dich cua Java goi trươc khi bât kỳ lơp nao đươc khơi tao ̀ ̣ ̉ ̣ ́ ̀ ̣ - Tư khoá void cho biêt ham main() không trả về giá trị ́ ̀ - Tư khoá public chỉ ra răng ham nay đươc goi bơi dong lênh bên ngoai lơp khi chương trinh ̀ ̀ ̀ ̣ ̀ ̣ ̀ ̀ khơi đông.̣ - Tham đôi String args[ ] khai bao tham số tên args thuôc lơp String, chưa chuôi ký tư. Tham đôi ́ ́ ̣ ̃ ́ nay giư cac tham đôi dong lênh dung khi thi hanh chương trinh. ̀ ́ ́ ̀ ̣ ̀ ̀ ̀ Ví dụ 1 : class ViDu { public static void main (String args[]) { 7 Đôi tượng và lớp, mang ́ ̉ for (int i=0; i < args.length; i++) { System.out.println(“Tham doi thu “+i+”: “+args[i]); } } } Khi chay chương trinh : ̣ ̀ C:\>java ViDu Thu tham doi dong lenh ↵ Tham doi thu 0 : Thu Tham doi thu 1 : tham .... C:>java ViDu Thu “tham doi” “dong lenh” ↵ Tham doi thu 0 : Thu Tham doi thu 1 : tham doi Tham doi thu 2 : dong lenh Ví dụ 2 : class ViDu2; public static void main(String args[]) { int sum = 0; float avg = 0; for (int i=0; ijava ViDu2 1 2 3 ↵ Tong = 6 Trung binh = 2 4. Ham khơi tao (Constructor) ̀ ̣ Có nhưng thao tac cân thưc hiên môi khi đôi tương lân đâu tiên đươc tao như khơi tao ́ ̀ ̣ ̃ ́ ̀ ̀ ̣ ̣ giá trị cho cac biên. Cac công viêc nay có thể lam tư đông băng cach dung ham khơi tao. ́ ́ ́ ̣ ̀ ̀ ̣ ̀ ́ ̀ ̀ ̣ Ham khơi tao có cung tên vơi lơp mà nó thuôc vê, chỉ đươc tư đông goi bơi toan tư new ̀ ̣ ̀ ̣ ̀ ̣ ̣ ́ khi đôi tương thuôc lơp đươc tao. Ham khơi tao không có giá trị trả vê, khi đinh nghia ham có ́ ̣ ̣ ̀ ̣ ̀ ̣ ̃ ̀ thể ghi void hay không ghi. Ví dụ : - kich thươc hôp đươc khơi tao tư đông khi đôi tương đươc tao. ́ ̣ ̣ ̣ ́ ̣ class Box { double width; double height; double depth; double volume() { return width * height * depth; } Box(double w, double h, double d) { width = w; height = h; depth = d; } } 8 Đôi tượng và lớp, mang ́ ̉ class BoxDemo { public static void main (String args[ ]) { Box myBox1 = new Box(10,20,15); Box myBox2 = new Box(3,6,9); double vol; vol = myBox1.volume(); System.out.println(“Thể tich là : “+vol); ́ vol = myBox2.volume(); System.out.println(“Thể tich là : “+vol); ́ } } - Khi ban không đinh nghia tương minh ham khơi tao cho môt lơp, Java sẽ tao ham khơi ̣ ̣ ̃ ̀ ̣ ̣ ̣ ̀ tao măc nhiên cho lơp đo. Vì vây cac chương trinh trươc đó vân lam viêc binh thương. Ham ̣ ̣ ́ ̣ ́ ̀ ̃ ̀ ̣ ̀ ̀ khơi tao măc nhiên không có danh sach tham đôi, tư đông khơi tao tât cả cac biên cua đôi tương ̣ ̣ ́ ́ ̣ ̣ ́ ́ ́ ̉ ́ về trị rông theo cac quy ươc măc đinh cua Java, trị 0 cho kiêu sô, ký tư ‘\0’ cho kiêu ký tư char, ̃ ́ ̣ ̣ ̉ ̉ ́ ̉ trị false cho kiêu boolean, trị null cho cac đôi tương ̉ ́ ́ - Ham khơi tao cung có thể đươc nap chông như ham binh thương ̣(sẽ noi rõ ơ phân sau) nghia ̀ ̣ ̃ ̣ ̀ ̀ ̀ ́ ̀ ̃ là ta đươc phep đinh nghia nhiêu ham khơi tao khac nhau ơ danh sach tham đôi hay kiêu tham ́ ̣ ̃ ̀ ̀ ̣ ́ ́ ́ ̉ đôi ́ ̀ 5. Ham huy ̉ Cac đôi tương câp phat đông băng toan tư new, khi không tôn tai tham chiêu nao đên đôi ́ ́ ́ ́ ̣ ̀ ́ ̀ ̣ ́ ̀ ́ ́ tương, đôi tương đó xem như không con cân đên nưa và bộ nhơ cho nó có thể đươc tư đông ́ ̀ ̀ ́ ̣ giai phong bơi bộ thu gom rac (garbage collector). Trinh thu gom rac hoat đông trong môt tuyên ̉ ́ ́ ̀ ́ ̣ ̣ ̣ ́ đoan (Thread) đôc lâp vơi chương trinh cua ban. Ban không phai bân tâm gì đôi vơi công viêc ̣ ̣ ̣ ̀ ̉ ̣ ̣ ̉ ̣ ́ ̣ nay. Sau nay ban sẽ hiêu rõ tuyên đoan là thế nao ̀ ̀ ̣ ̉ ́ ̣ ̀ Tuy nhiên, Java cung cho phep ta viêt ham huy, có thể cung cân thiêt cho nhưng trương ̃ ́ ́ ̀ ̉ ̃ ̀ ́ hơp nao đo. Ham huy trong Java chỉ đươc goi bơi trinh thu gom rac, do vây ban khó đoan ̀ ́ ̀ ̉ ̣ ̀ ́ ̣ ̣ ́ trươc vao luc nao ham huy sẽ đươc goi ̀ ́ ̀ ̀ ̉ ̣ Dang ham huy như sau : ̣ ̀ ̉ protected void finalize() { // Body of Method } 6. Tư khoá this Nêu biên đươc đinh nghia trong thân ham, đó là biên cuc bộ chỉ tôn tai khi ham đươc ́ ́ ̣ ̃ ̀ ́ ̣ ̀ ̣ ̀ goi. Nêu biên cuc bộ như vây đươc đăt tên trung vơi biên đôi tương hoăc biên lơp , nó sẽ che ̣ ́ ́ ̣ ̣ ̣ ̀ ́ ́ ̣ ́ khuât biên đôi tương hay biên lơp trong thân ham : ́ ́ ́ ́ ̀ Ví dụ : class ViDu { int test = 10; // Biên đôi tương ́ ́ void printTest() { int test = 20; // Biên cuc bộ ́ ̣ System.out.println(“test = “+test); // In biên cuc bộ ́ ̣ } public static void main(String args[]) { ViDu a = new ViDu(); a.printTest(); } } 9 Đôi tượng và lớp, mang ́ ̉ Tư khoá this có thể dung bên trong bât cư phương thưc nao để tham chiêu đên đôi ̀ ́ ̀ ́ ́ ́ tương hiên hanh, khi biên đôi tương trung tên vơi biên cuc bô. ̣ ̀ ́ ́ ̀ ́ ̣ ̣ Ví dụ : Thay dong lênh trên : ̀ ̣ System.out.println(“test = “+this.test); // In biên cuc bô, this chỉ đôi tương a ́ ̣ ̣ ́ ̣ ̀ 7. Nap chông ham (Overloaded Methods) ̀ Trong cung môt lơp, Java cho phep ban đinh nghia nhiêu ham trung tên vơi điêu kiên cac ̀ ̣ ́ ̣ ̣ ̃ ̀ ̀ ̀ ̀ ̣ ́ ham như vây phai có danh sach tham đôi khac nhau, nghia là khac nhau về số tham đôi hoăc ̀ ̣ ̉ ́ ́ ́ ̃ ́ ́ ̣ kiêu cua cac tham đôi. Khả năng như vây goi là sư nap chông ham. Java chỉ phân biêt ham nay ̉ ̉ ́ ́ ̣ ̣ ̣ ̀ ̀ ̣ ̀ ̀ vơi ham khac dưa vao số tham đôi và kiêu cua cac tham đôi, bât châp tên ham và kiêu cua kêt ̀ ́ ̀ ́ ̉ ̉ ́ ́ ́ ́ ̀ ̉ ̉ ́ quả trả vê. ̀ Ví dụ : // MyRect.java import java.awt.Point; class MyRect { int x1 = 0; int y1 = 0; int x2 = 0; int y2 = 0; MyRect buildRect(int x1, int y1, int x2, int y2) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; return this; } MyRect buildRect(Point topLeft, Point bottomRight) { x1 = topLeft.x; y1 = topLeft.y; x2 = bottomRight.x; y2 = bottomRight.y; return this; } MyRect buildRect(Point topLeft, int w, int h) { x1 = topLeft.x; y1 = topLeft.y; x2 = x1+w; y2 = y1 + h; return this; } void display() { System.out.print(“Doi tuong MyRect : ”); } } Thât ra, trong goi awt có săn lơp Rectangle chuyên dung để biêu diên hinh chư nhât. Lơp ̣ ́ ̃ ̀ ̉ ̃ ̀ ̣ MyRect cua ta chỉ dung để minh hoạ cho khai niêm nap chông ham. Trong lơp MyRect có ̉ ̀ ́ ̣ ̣ ̀ ̀ nhưng ham giup ban tao ra đôi tương MyRect vơi nhưng yêu tố cho trươc khac nhau : ̀ ́ ̣ ̣ ́ ́ ́ - Cho trươc toạ độ goc trên trai x1, y1 và toạ độ goc dươi phai x2, y2 ́ ́ ́ ̉ - Cho trươc goc trên trai và goc dươi phai cua hinh chư nhât dươi dang đôi tương Point ́ ́ ́ ̉ ̉ ̀ ̣ ̣ ́ 10 Đôi tượng và lớp, mang ́ ̉ - Cho trươc toạ độ goc trên trai cua hinh chư nhât dang đôi tương Point cung chiêu rông, chiêu ́ ́ ̉ ̀ ̣ ̣ ́ ̀ ̀ ̣ ̀ cao Nhơ khả năng nap chông ham, ban chỉ cân nhơ môt tên ham cho cac ham khac nhau ̣ ̀ ̀ ̣ ̀ ̣ ̀ ́ ̀ ́ cung chưc năng ̀ Chương trinh sư dung lơp MyRect xây dưng ơ trên : ̀ ̣ import java.awt.Point; class UngDung { public static void main(String args[]) { MyRect rect = new MyRect(); rect.buildRect(25,25,50,50); rect.display(); rect.buildRect(new Point(10,10), new Point(20,20)); rect.display(); rect.buildRect(new Point(10,10), 50, 50); rect.display(); } } ̀ 8. Truyên tham đôi ́ Java dung cả hai cach truyên tham đôi : truyên băng giá trị và truyên băng tham chiêu, ̀ ́ ̀ ́ ̀ ̀ ̀ ̀ ́ tuy vao cai gì đươc truyên ̀ ̀ ́ ̀ - Khi ta truyên môt kiêu sơ câp cho phương thưc, nó sẽ truyên băng giá tri. Vì vây ̀ ̣ ̉ ́ ̀ ̀ ̣ ̣ nhưng gì xay ra vơi tham đôi trong phương thưc, khi ra khoi phương thưc sẽ hêt tac dung ̉ ́ ̉ ́ ́ ̣ - Khi ta truyên môt đôi tương (kiêu phưc hơp) cho phương thưc, nó sẽ truyên băng tham ̀ ̣ ́ ̉ ̀ ̀ chiêu. Vì vây, thay đôi ơ đôi tương bên trong phương thưc anh hương đên đôi tương dung lam ́ ̣ ̉ ́ ̉ ́ ́ ̀ ̀ tham đôi. ́ Ví dụ 1 : class ViDu { void tinhToan(int i, int j) { i *= 2; j /= 2; } } class UngDung { public static void main(String args) { ViDu o = new ViDu(); int a = 15, b = 20; System.out.println(“a và b trươc khi goi : “+a+ “ ”+b); ̣ o.tinhToan(a, b); System.out.println(“a và b sau khi goi : “+a+” “+b); ̣ } } Kêt quả cua chương trinh : ́ ̉ ̀ a và b trươc khi goi : 15 20 ̣ a và b sau khi goi : 15 20 ̣ Ví dụ 2 : class ViDu { int a, b; ViDu (int i, int j) { a = i; 11 Đôi tượng và lớp, mang ́ ̉ b = j; } void tinhToan(ViDu o) { o.a *= 2; 0.b /= 2; } } class UngDung { public static void main(String args[]) { ViDu o = new ViDu(15, 20); System.out.println(“o.a và o.b trươc khi goi : “+o.a+” “+o.b); ̣ o.tinhToan(o); System.out.println(“o.a và o.b sau khi goi : “+o.a+” “+o.b); ̣ } } Kêt quả chương trinh : ́ ̀ o.a và o.b trươc khi goi : 15 20 ̣ o.a và o.b sau khi goi : 30 10 ̣ IV. LƠP KẾ TH ƯA 1. Khai bao kế thưa ́ Ta có thể sư dung tinh kế thưa tao lơp tông quat có nhưng đăc tinh chung đai diên cho ̣ ́ ̣ ̉ ́ ̣ ́ ̣ ̣ môt tâp hơp cac đôi tương có cung môi quan hê. Sau đo, lơp nay có thể đươc kế thưa bơi môt ̣ ̣ ́ ́ ̀ ́ ̣ ́ ̀ ̣ hay nhiêu lơp khac và nhưng đăc tinh nay trơ thanh nhưng thanh nhưng đăc tinh cua lơp kế ̀ ́ ̣ ́ ̀ ̀ ̀ ̣ ́ ̉ thưa - Lơp đươc kế thưa goi là lơp cha (SuperClass : là lơp cha trưc tiêp) ̣ ́ - Lơp kế thưa goi là lơp con (SubClass) ̣ Lơp con kế thưa tât cả cac biên và ham đ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 cac thanh phân đươc khai bao private trong lơp cha ̣ ̣ ́ ́ ̀ ̀ ́ - Môt biên tham chiêu cua lơp cha có thể gan để 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 gan 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 ham hay che khuât ham (Overriding Methods) Trong phân câp lơp, khi môt ham cua lơp con có cung tên, và giông nhau về s ố lương và ́ ̣ ̀ ̉ ̀ ́ kiêu tham đôi cung như kiêu trả về vơi môt ham ơ lơp cha, thì ham ơ lơp con đươc goi là viêt ̉ ́ ̃ ̉ ̣ ̀ ̀ ̣ ́ chông ham trong lơp cha. Khi đó ham cua lơp con sẽ che khuât ham thưa kế tư lơp cha ̀ ̀ ̀ ̉ ́ ̀ Tuy nhiên lơp con không đươc viêt chông ham hăng ( có khai bao final) và ham lơp ́ ̀ ̀ ̀ ́ ̀ trong lơp cha. Ví dụ : Tât cả cac lơp là hâu duệ cua 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 cua đôi tương. Hâu hêt cac lơp con viêt chông phương ̣ ́ ̉ ́ ̀ ́ ́ ́ ̀ thưc nay và in ra môt vai điêu gì đó có nghia cho lơp đó ̀ ̣ ̀ ̀ ̃ 3. Tư khoá super Đôi khi ban 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 vao phương thưc. Để lam đươc điêu nay, ban goi phương thưc đươc viêt chông dung tư ̀ ̀ ̀ ̀ ̣ ̣ ́ ̀ ̀ 12 Đôi tượng và lớp, mang ́ ̉ khoá super. Tư khoá super dung khi lơp con cân tham chiêu lơp cha trưc tiêp cua no. Super có ̀ ̀ ́ ́ ̉ ́ hai dang cú phap : ̣ ́ - Dang 1 : Ham khơi tao lơp cha phai đươc goi trươc ham khơi tao cua lơp con. Nêu ̣ ̀ ̣ ̉ ̣ ̀ ̣ ̉ ́ trong đinh nghia ham khơi tao ơ lơp con không có câu lênh goi ham khơi tao lơp cha, trinh biên ̣ ̃ ̀ ̣ ̣ ̣ ̀ ̣ ̀ dich Java sẽ tư đông đưa vao câu lênh goi ham khơi tao măc đinh cua lơp cha c ó dang : ̣ ̣ ̀ ̣ ̣ ̀ ̣ ̣ ̣ ̉ ̣ classname() Ban có thể tư thêm lênh goi ham khơi tao ơ lơp cha có dang như sau : ̣ ̣ ̣ ̀ ̣ ̣ super(Parameter-List) Parameter-List là danh sach cac tham đôi cân thiêt cho ham khơi tao cua lơp cha. super() ́ ́ ́ ̀ ́ ̀ ̣ ̉ phai luôn luôn là phat biêu đâu tiên đươc thưc hiên trong ham khơi tao cua 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) { super(x,y); // Khơi tao 2 biên x, y băng cach goi ̣ ́ ̀ ́ ̣ this.z = z; // ham dưng cua lơp cha ̀ ̉ this.name = name; } void display() { // Viêt chông ham kế thưa tư lơp cha ́ ̀ ̀ System.out.print(“x = “+x+”, y = “+y+”, z = “+z+” “+”name :”+name+”\n”); } } - Dang 2 : dung để ham lơp con truy xuât ham kế thưa tư lơp cha : ̣ ̀ ̀ ́ ̀ super.Member Member có thể là phương thưc hay biên cua đôi tương ́ ̉ ́ Ví dụ : Viêt lai ham display() trong class MyPoint2, c ó goi ham 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 chung ta muôn đinh nghia môt lơp cha theo môt câu truc trưu tương ́ ́ ̣ ̃ ̣ ̣ ́ ́ cho trươc mà không cân hiên thưc đây đủ cac phương thưc. Tưc là ta muôn tao môt lơp cha có ̀ ̣ ̀ ́ ́ ̣ ̣ dang chung cho tât cả cac lơp con và để cac lơp con hiên thưc chi tiêt. Khi đo, ban muôn chăc ̣ ́ ́ ́ ̣ ́ ́ ̣ ́ ́ chăn lơp con có chông lăp phương thưc. Nhưng phương thưc phai đươc chông lăp trong lơp ́ ̀ ́ ̉ ̀ ́ con goi là phương thưc trưu tương, đươc khai bao abstract và không có phân thân phương thưc ̣ ́ ̀ abstract [Type] MethodName(Parameter-List) ; 13 Đôi tượng và lớp, mang ́ ̉ Bât kỳ lơp nao chưa môt hay nhiêu phương thưc trưu tương cung phai khai bao trưu ́ ̀ ̣ ̀ ̃ ̉ ́ tương, sư dung tư khoá abstract trươc tư khoá class. Không thể khơi tao đôi tương kiêu lơp ̣ ̣ ́ ̉ trưu tương, vì lơp trưu tương không đươc đinh nghia đây đu. Do đo, ban cung không thể khai ̣ ̃ ̀ ̉ ́ ̣ ̃ bao ham khơi tao. Bât kỳ lơp con nao cung phai hoăc là viêt chông tât cả cac phương thưc trưu ́ ̀ ̣ ́ ̀ ̃ ̉ ̣ ́ ̀ ́ ́ tương hoăc chinh nó lai đươc khai bao abstract ̣ ́ ̣ ́ Ví dụ : Trong cac ưng dung, ban có thể vẽ đương tron, hinh chư nhât, đoan thăng, đương ́ ̣ ̣ ̀ ̀ ̣ ̣ ̉ cong… Môi môt đôi tương đồ hoạ nay đêu chưa cac thuôc tinh (vị tri, net viên) và hanh vi (di ̃ ̣ ́ ̀ ̀ ́ ̣ ́ ́ ́ ̀ ̀ chuyên, thay kich thươc, ve). Ban có thể khai bao chung kế thưa lơp Graphic. Tuy nhiên vẽ môt ̉ ́ ̃ ̣ ́ ́ ̣ đương tron là hoan toan khac vơi vẽ môt hinh chư nhât, nên lơp Graphic đươc khai bao là lơp ̀ ̀ ̀ ́ ̣ ̀ ̣ ́ trưu tương, chưa cac phương thưc đã đươc hiên thưc như moveTo, và phương thưc trưu ́ ̣ tương như draw 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 cua lơp Graphic như Circle, Rectangle sẽ phai cai ̃ ̣ ̉ ̉ ̀ đă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), HAM HĂNG (KHÔNG VIÊT CHÔNG) ̀ ̀ ̀ ̀ ́ ̀ 1. Sư dung 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 manh nhât cua Java, tuy ̣ ̀ ́ ̣ ̣ ̉ ̣ ́ ̉ nhiên trong vai trương hơp ban muôn câm điêu nay. Để câm môt phương thưc lơp con viêt ̀ ̣ ́ ́ ̀ ̀ ́ ̣ ́ chông phương thưc ơ lơp cha, ban đưa tư khoá final vao đâu khai bao ̀ ̣ ̀ ̀ ́ Ví dụ : class Box { double width; double height; double depth; … final double volume() { return width * height * depth; } ... } 2. Sư dung tư khoá final câm sư kế thưa ̣ ́ 14 Đôi tượng và lớp, mang ́ ̉ Muôn khai bao môt lơp mà không có lơp con kế thưa, ban sư dung tư khoá final. Vơi ́ ́ ̣ ̣ ̣ môt lơp final, thì tât cả cac phương thưc cua nó sẽ là final. ̣ ́ ́ ̉ Ta không thể khai bao 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 hoan chinh và phai có lơp con để hiên thưc đây đủ ̀ ̉ ̉ ̣ ̀ Ví dụ : final class Box { . . . } VII. LƠP LÔNG NHAU ̀ Có thể đinh nghia môt lơp bên trong môt lơp khac. Lơp như vây goi là lơp lông ( Nested ̣ ̃ ̣ ̣ ́ ̣ ̣ ̀ Class) và đươc cai đăt như sau : ̀ ̣ class EnclosingClass{ // Lơp bao bên ngoai ̀ ... 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 cua lơp bao bên ngoai. Bộ dich Java sẽ bao lôi ̀ ́ ̀ ̉ ̀ ̣ ́ ̃ nêu môt đoan mã bât kỳ bên ngoai lơp bao cố dung trưc tiêp lơp lông. ́ ̣ ̣ ́ ̀ ̀ ́ ̀ Môt lơp lông có quyên truy câp đên cac thanh viên cua lơp bao bên ngoai, thâm chí nêu ̣ ̀ ̀ ̣ ́ ́ ̀ ̉ ̀ ̣ ́ chung đươc khai bao private. Tuy nhiên, lơp bao không thể truy xuât cac thanh phân cua lơp ́ ́ ́ ́ ̀ ̀ ̉ ̀ lông. Có hai kiêu lơp lông : tinh và phi tinh. ̉ ̀ ̃ ̃ Lơp lông tinh (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 bao, mà chỉ dung ́ ́ ́ ́ ̣ ̃ ̀ chung thông qua đôi tương. Vì giơi han nay nên lơp lông tinh it đươc dung. H âu hêt cac lơp ́ ́ ̣ ̀ ̀ ̃ ́ ̀ ̀ ́ ́ lông là lơp nôi bộ ̀ ̣ Lơp lông phi tinh (nonstatic nested class) không bổ sung tư khoá static, con đươc goi là ̀ ̃ ̀ ̣ lơp nôi bộ (inner class). Nó có thể truy câp trưc tiêp đên cac 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 cua 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 cua lơp Inner ́ ́ ́ ̉ System.out.println(“display : inner_y = “ + inner_y); // Error } } class InnerClassDemo { public static void main(String args[]) { Outer outer = new Outer(); 15 Đôi tượng và lớp, mang ́ ̉ outer.test(); } } ̉ ̉ ̉ VIII. CHUYÊN ĐÔI KIÊU 1. Chuyên đôi giưa cac kiêu phưc hơp ̉ ̉ ́ ̉ Java chỉ cho phep chuyên đôi đôi tương thuôc lơp con chau thanh đôi tương cua lơp cha ́ ̉ ̉ ́ ̣ ́ ̀ ́ ̉ ông (Ancestors), và không cho chuyên ngươc lai ̉ ̣ Giả sư ban có đôi tương thuôc lơp con Child và cân chuyên đôi thanh đôi tương thuôc ̣ ́ ̣ ̀ ̉ ̉ ̀ ́ ̣ lơp cha ông Parent. Java cho phep dung đôi tương Child môt cach tư nhiên ơ bât cư chỗ nao ́ ̀ ́ ̣ ́ ́ ̀ danh cho đôi tương Parent, ta không cân lam đông tac chuyên đôi nao ca. Đôi tương Child có ̀ ́ ̀ ̀ ̣ ́ ̉ ̉ ̀ ̉ ́ đây đủ thuôc tinh và hanh vi cua đôi tương Parent nên có thể “vao vai” đôi tương Parent. Nêu ̀ ̣ ́ ̀ ̉ ́ ̀ ́ ́ muôn, ban cung có thể chuyên đôi đôi tương thuôc lơp con chau thanh đôi tương thuôc lơp cha ́ ̣ ̃ ̉ ̉ ́ ̣ ́ ̀ ́ ̣ ông môt cach tương minh, nhưng không cân thiêt : ̣ ́ ̀ ́ Child c = new Child(); Parent p = (Parent) c; 2. Chuyên đôi kiêu sơ câp thanh kiêu phưc hơp ̉ ̉ ̉ ́ ̀ ̉ Trong goi java.lang có săn nhưng lơp tương ưng vơi cac kiêu sơ câp, có thể dung thay ́ ̃ ́ ̉ ́ ̀ cho kiêu sơ câp : lơp Integer thay cho kiêu int, lơp Boolean cho kiêu boolean, lơp Float cho kiêu ̉ ́ ̉ ̉ ̉ float, lơp Double cho kiêu double… Lơp Number là lơp cha cua moi lơp boc kiêu ̉ ̉ ̣ ̣ ̉ Chăng han, muôn cho kiêu int có thể xuât hiên như môt đôi tương thuôc lơp Integer : ̉ ̣ ́ ̉ ́ ̣ ̣ ́ ̣ Integer intObj = new Integer(25); Lơp Integer đươc trang bị nhưng phương thưc giup ban nhiêu viêc mà kiêu int không thể đam ́ ̣ ̀ ̣ ̉ ̉ đương. - Lây giá trị nguyên mà đôi tương intObj năm giư : ́ ́ ́ int i = intObj.intValue(); ̉ IX. MANG (ARRAY) Mang là môt câu truc lưu giư cac thanh phân có cung kiêu. Chiêu dai môt mang đươc ̉ ̣ ́ ́ ́ ̀ ̀ ̀ ̉ ̀ ̀ ̣ ̉ thiêt lâp và cố đinh khi mang đươc tao luc chay chương trinh. Môi thanh phân cua mang đươc ́ ̣ ̣ ̉ ̣ ́ ̣ ̀ ̃ ̀ ̀ ̉ ̉ truy xuât bơi chỉ số cua nó trong mang ́ ̉ ̉ Nêu ban muôn lưu giư cac thanh phân khac kiêu nhau hay kich thươc mang có thể thay ́ ̣ ́ ́ ̀ ̀ ́ ̉ ́ ̉ ̉ ̣ ̀ ̣ đôi đông, dung môt Vector thay cho mang ̉ 1. Tao và sư dung mang ̣ ̣ ̉ ́ ̣ ́  Khai bao môt biên tham chiêu đên mang ́ ́ ̉ ArrayType[] ArrayName Khai bao môt biên có kiêu ArrayType dung để tham chiêu đên mang, nhưng không có mang nao ́ ̣ ́ ̉ ̀ ́ ́ ̉ ̉ ̀ thât sư tôn tai ̣ ̀ ̣ ArrayType : là kiêu dư liêu cua cac thanh phân chưa trong mang và dâu [] chỉ đinh đó là môt ̉ ̣ ̉ ́ ̀ ̀ ̉ ́ ̣ ̣ mang ̉ Kiêu dư liêu thanh phân có thể là bât kỳ kiêu cơ sơ, tham chiêu ̉ ̣ ̀ ̀ ́ ̉ ́ int[] anArrayOfInts; // Khai bao môt mang số nguyên ́ ̣ ̉ float[] anArrayOfFloats; boolean[] anArrayOfBooleans; Object[] anArrayOfObjects; String[] anArrayOfStrings; ̣  Tao môt mang ̣ ̉ 16 Đôi tượng và lớp, mang ́ ̉ Ban dung toan tư new để tao môt mang, nghia là câp phat bộ nhơ cho cac thanh phân và ̣ ̀ ́ ̣ ̣ ̉ ̃ ́ ́ ́ ̀ ̀ gan mang đên biên đã khai bao ́ ̉ ́ ́ ́ ArrayName = new ArrayType[ArraySize] ArraySize : là số thanh phân cua mang ̀ ̀ ̉ ̉ Ví dụ : int[] M; // khai bao biên mang kiêu số nguyên ́ ́ ̉ ̉ M = new int[10]; // tao môt mang số nguyên ̣ ̣ ̉ Ban có thể kêt hơp sư khai bao biên mang và tao mang như sau : ̣ ́ ́ ́ ̉ ̣ ̉ ArrayType[] ArrayName = new ArrayType[ArraySize] Có thể viêt như sau : ́ ArrayType ArrayName[] = new ArrayType[ArraySize] Ví dụ : int[] M = new int[10]; int M[] = new int[10];  Truy xuât thanh phân cua mang ́ ̀ ̀ ̉ ̉ ArrayVar[index] index : chỉ vị trí cua thanh phân trong mang cân truy xuât, có thể là giá tri, biên hay biêu thưc, và ̉ ̀ ̀ ̉ ̀ ́ ̣ ́ ̉ có giá trị tư 0 đên ArraySize-1 ́ Ví dụ : M [1] = 20;  Lây kich thươc mang ́ ́ ̉ ArrayName.length  Khơi tao giá trị đâu cua mang ̣ ̀ ̉ ̉ Mang có thể khơi tao khi khai bao. Mang khơi tao là danh sach cac biêu thưc cach nhau ̉ ̣ ́ ̉ ̣ ́ ́ ̉ ́ bơi dâu phây và bao quanh bơi dâu ngoăc moc. Mang sẽ đươc khơi tao tư đông để lưu số phân ́ ̉ ́ ̣ ́ ̉ ̣ ̣ ̀ tư mà ban xac đinh luc khơi tao, không cân sư dung new. Chiêu dai cua mang là số giá trị giưa { ̣ ́ ̣ ́ ̣ ̀ ̣ ̀ ̀ ̉ ̉ và } Ví dụ : boolean[] answers = { true, false, true, true, false }; int month_days[] = {31,28,31,30,31,30,31,31,30,31,30,31}; Ví dụ 1: Tao và sư dung mang có thanh phân kiêu cơ sơ ̣ ̣ ̉ ̀ ̀ ̉ public class ArrayDemo { public static void main(String[] args) { int[] anArray; anArray = new int[10]; for (int i = 0; i < anArray.length; i++) { anArray[i] = i; System.out.print(anArray[i] + " "); } System.out.println(); } } Ví dụ 2 : Tao và sư dung mang có thanh phân kiêu tham lơp String ̣ ̣ ̉ ̀ ̀ ̉ public class ArrayOfStringsDemo { public static void main(String[] args) { String[] anArray = { "String One", "String Two", "String Three" }; for (int i = 0; i < anArray.length; i++) { System.out.println(anArray[i].toLowerCase()); } } } 17 Đôi tượng và lớp, mang ́ ̉ ̉ ̀ 2. Mang đa chiêu (Arrays of Arrays) Mang có thể chưa cac thanh phân là mang. Để khai bao môt biên mang đa chiêu cân xac ̉ ́ ̀ ̀ ̉ ́ ̣ ́ ̉ ̀ ̀ ́ đinh môi chiêu cua mang băng cach sư dung cac căp dâu ngoăc vuông. ̣ ̃ ̀ ̉ ̉ ̀ ́ ̣ ́ ̣ ́ ̣ Ví dụ : int M[][] = new int[4][5]; int[][] M = new int[4][5]; M là môt mang 4x5 thanh phân là cac số nguyên. ̣ ̉ ̀ ̀ ́ Khi câp phat bộ nhơ cho mang đa chiêu, ban có thể chỉ đinh chiêu dai cua mang chinh, ́ ́ ̉ ̀ ̣ ̣ ̀ ̀ ̉ ̉ ́ và không chỉ đinh chiêu dai cua mang con cho đên khi tao chung ̣ ̀ ̀ ̉ ̉ ́ ̣ ́ Ví dụ : int M[][] = new int[3][]; M[0] = new int[3]; M[1] = new int[4]; M[2] = new int[2]; Ví dụ 1 : public class ArrayOfArraysDemo { public static void main(String[] args) { String[][] cartoons = { { "Flintstones", "Fred", "Wilma", "Pebbles", "Dino" }, { "Rubbles", "Barney", "Betty", "Bam Bam" }, { "Jetsons", "George", "Jane", "Elroy", "Judy", "Rosie", "Astro" }, { "Scooby Doo Gang", "Scooby Doo", "Shaggy", "Velma", "Fred", "Daphne" } }; for (int i = 0; i < cartoons.length; i++) { System.out.print(cartoons[i][0] + ": "); for (int j = 1; j < cartoons[i].length; j++) { System.out.print(cartoons[i][j] + " "); } System.out.println(); } } } Chú ý là tât cả mang con có chiêu dai khac nhau. Tên cua mang con là cartoons[0], ́ ̉ ̀ ̀ ́ ̉ ̉ cartoons[1]... Ví dụ 2 : public class ArrayOfArraysDemo2 { public static void main(String[] args) { int[][] aMatrix = new int[4][]; for (int i = 0; i < aMatrix.length; i++) { aMatrix[i] = new int[5]; for (int j = 0; j < aMatrix[i].length; j++) { aMatrix[i][j] = i + j; } } for (int i = 0; i < aMatrix.length; i++) { for (int j = 0; j < aMatrix[i].length; j++) { System.out.print(aMatrix[i][j] + " "); } System.out.println(); } 18 Đôi tượng và lớp, mang ́ ̉ } } ́ ̉ 3. Sao chep mang (Copying Arrays) Sư dung phương thưc arraycopy cua System sao chep dư liêu tư môt mang đên môt ̣ ̉ ́ ̣ ̣ ̉ ́ ̣ mang khac. Phương thưc arraycopy yêu câu 5 tham đôi : ̉ ́ ̀ ́ public static void arraycopy(ArrayType[] source, int srcIndex, ArrayType[] dest, int destIndex, int length) Hai tham đôi Object chỉ đinh mang nguôn và mang đich. Ba tham đôi int chỉ vị trí băt ́ ̣ ̉ ̀ ̉ ́ ́ ́ đâu trong môi mang nguôn và đich, và số thanh phân để sao chep. Biêu đồ nay minh hoạ viêc ̀ ̃ ̉ ̀ ́ ̀ ̀ ́ ̉ ̀ ̣ ́ sao chep : Ví dụ : public class ArrayCopyDemo { public static void main(String[] args) { char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd' }; char[] copyTo = new char[7]; System.arraycopy(copyFrom, 2, copyTo, 0, 7); System.out.println(new String(copyTo)); } } Biêu đồ sau mô tả cho ví dụ trên : ̉ Chú ý răng mang đich phai đươc câp phat và phai đủ lơn để chưa dư liêu đươc sao chep ̀ ̉ ́ ̉ ́ ́ ̉ ̣ ́ 19 Goi và giao diên ́ ̣ ́ Chương : GOI VÀ GIAO DIÊN ̣ Goi (Package) và giao diên (Interface) là hai thanh phân cơ ban trong môt chương trinh ́ ̣ ̀ ̀ ̉ ̣ ̀ Java. ́ I. GOI Goi là kỹ thuât phân hoach không gian tên lơp, giao diên thanh nhưng vung dễ quan lý ́ ̣ ̣ ̣ ̀ ̀ ̉ hơn. Ví dụ khi ban tao môt lơp trong môt goi nao đo, ban không cân phai kiêm tra xem nó có bị ̣ ̣ ̣ ̣ ́ ̀ ́ ̣ ̀ ̉ ̉ trung tên vơi môt lơp nao đó trong goi khac không. ̀ ̣ ̀ ́ ́ Goi bao gôm hai kỹ thuât đăt tên và kỹ thuât điêu khiên truy xuât. Ban có thể câp hay ́ ̀ ̣ ̣ ̣ ̀ ̉ ́ ̣ ́ không câp quyên truy xuât cac lơp bên trong goi đôi vơi cac đoan mã năm ngoai goi. Ban cung ́ ̀ ́ ́ ́ ́ ́ ̣ ̀ ̀ ́ ̣ ̃ có thể xac đinh thanh phân nao cua lơp mà chỉ có cac thanh phân trong cung môt lơp mơi có ́ ̣ ̀ ̀ ̀ ̉ ́ ̀ ̀ ̀ ̣ ̀ quyên truy xuât. ́ ̣ 1. Đinh nghia goi ̃ ́ Tao môt goi băng cach đăt tư khoá package ngay phat biêu đâu tiên cua tâp tin nguôn ̣ ̣ ́ ̀ ́ ̣ ́ ̉ ̀ ̉ ̣ ̀ Java. Bât kỳ lơp nao khai bao trong tâp tin nay đêu thuôc goi nay. Nêu ban bỏ qua phat biêu ́ ̀ ́ ̣ ̀ ̀ ̣ ́ ̀ ́ ̣ ́ ̉ Package, cac lơp sẽ đăt vao package măc đinh ́ ̣ ̀ ̣ ̣ package PackageName; Java sư dung hệ thông thư muc để lưu trư cac goi. Cac lơp sẽ chưa trong thư muc trung ̣ ́ ̣ ́ ́ ́ ̣ ̀ tên PackageName Có thể tao cac package phân câp, dung dâu châm để phân biêt môt package vơi package ̣ ́ ́ ̀ ́ ́ ̣ ̣ cha cua no. Sư phân câp package phai đươc anh xạ vao hệ thông tâp tin. Java xem gôc cua cây ̉ ́ ́ ̉ ́ ̀ ́ ̣ ́ ̉ phân câp goi đươc đinh nghia bơi biên môi trương CLASSPATH. ́ ́ ̣ ̃ ́ package PackageName1[.PackageName2[.PackageName3]]; Ví dụ : package java.awt.image; đươc lưu trư trong Java\awt\image vơi hệ điêu hanh Windows. ̀ ̀ ̀ 2. Điêu khiên truy xuât̉ ́ Thông qua phep đong goi (lơp, goi), ta có thể điêu khiên phân nao cua chương trinh có ́ ́ ́ ́ ̀ ̉ ̀ ̀ ̉ ̀ thể truy xuât cac thanh phân cua lơp ́ ́ ̀ ̀ ̉ Cac điêu khiên truy xuât cua Java là public, private và protected. protected chỉ ap ́ ̀ ̉ ́ ̉ ́ dung khi có liên quan đên kế thưa ̣ ́  Khi bổ sung tiên tố cho môt thanh phân cua lơp (biên và ham) là : ̀ ̣ ̀ ̀ ̉ ́ ̀ - Tư khoá public : chỉ ra răng thanh phân nay có thể đươc truy xuât bơi bât kỳ dong lênh nao dù ̀ ̀ ̀ ̀ ́ ́ ̀ ̣ ̀ ơ trong hay ngoai lơp, goi (Package) mà nó khai bao ̀ ́ ́ - private : chỉ có thể đươc truy xuât trong lơp cua no, moi đoan mã năm ngoai lơp, kể cả nhưng ́ ̉ ́ ̣ ̣ ̀ ̀ lơp con đêu không có quyên truy xuât ̀ ̀ ́ - Khi không có điêu khiên truy xuât nao đươc dung, cac lơp con cung như cac lơp trong cung ̀ ̉ ́ ̀ ̀ ́ ̃ ́ ̀ goi đêu có thể truy xuât no, không thể truy xuât tư bên ngoai goi cua nó ́ ̀ ́ ́ ́ ̀ ́ ̉ - protected : liên quan đên sư kế thưa, nêu ban chỉ cho cac lơp con trưc tiêp mơi có quyên truy ́ ́ ̣ ́ ́ ̀ xuât cac thanh phân cua lơp, ban khai bao chung là protected ́ ́ ̀ ̀ ̉ ̣ ́ ́  Vơi lơp chỉ có hai mưc truy xuât : măc đinh và public. Khi môt lơp khai bao public, cac đoan ́ ̣ ̣ ̣ ́ ́ ̣ mã khac có thể truy xuât đươc no. Nêu lơp là truy xuât măc đinh, chỉ có cac đoan mã trong cung ́ ́ ́ ́ ́ ̣ ́ ̣ ̀ môt goi mơi có quyên truy xuât nó ̣ ́ ̀ ́ ̀ ̉ ́ Điêu khiên truy xuât Trong lơp Trong lơp Trong Package Toan bộ ̀ thanh phân cua lơp ̀ ̀ ̉ con ́ (Goi) private X protected X X* X 20
DMCA.com Protection Status Copyright by webtailieu.net