Bài viết này mình sẽ giới thiệu cho các bạn hiểu về tính kế thừa trong java. Qua đó hi vọng các bạn có thể tự viết được một class kế thừa từ class khác để giải quyết một bài toán.
Tính kế thừa trong java
- Kế thừa trong java là sự liên quan giữa hai class với nhau, trong đó có class cha (superclass) và class con (subclass). Khi kế thừa class con được hưởng tất cả các phương thức và thuộc tính của class cha. Tuy nhiên, nó chỉ được truy cập các thành viên public và protected của class cha. Nó không được phép truy cập đến thành viên private của class cha.
- Khi kế thừa từ một lớp đang tồn tại bạn có sử dụng lại các phương thức và thuộc tính của lớp cha, đồng thời có thể khai báo thêm các phương thức và thuộc tính khác.
Cú pháp kế thừa
class Subclass-name extends Superclass-name { //methods and fields }
Ví dụ về kế thừa trong java
class Point{ private int x; private int y; } class Circle extends Point{ private int r; }
Trong java có support các kiểu kế thừa sau
Ví dụ về đơn thừa kế
class A{ public void hello(){ System.out.println("Hello!"); } } class C extends A{ public void helloJava(){ System.out.println("Hello Java!"); } } class Test{ public static void main(String[] args){ C obj = new C(); obj.hello(); obj.helloJava(); } }
Hello! Hello Java!
Ví dụ về thừa kế nhiều tầng
class A{ public void hello(){ System.out.println("Hello!"); } } class B extends A{ public void hellWorld(){ System.out.println("Hello World!"); } } class C extends B{ public void helloJava(){ System.out.println("Hello Java!"); } } class Test{ public static void main(String[] args){ C obj = new C(); obj.hello(); obj.hellWorld(); obj.helloJava(); } }
Hello! Hello World! Hello Java!
Ví dụ về thừa kế thứ bậc
class A{ public void hello(){ System.out.println("Hello!"); } } class B extends A{ public void hellWorld(){ System.out.println("Hello World!"); } } class C extends A{ public void helloJava(){ System.out.println("Hello Java!"); } } class Test{ public static void main(String[] args){ C obj = new C(); obj.hello(); obj.helloJava(); //obj.helloWorld(); } }
Hello! Hello Java!
Để giảm thiểu sự phức tạp và đơn giản hóa ngôn ngữ, đa kế thừa không được support trong java.
Hãy suy xét kịch bản sau: Có 3 lớp A, B, C. Trong đó lớp C kế thừa từ các lớp A và B. Nếu các lớp A và B có phương thức giống nhau và bạn gọi nó từ đối tượng của lớp con, như vậy khó có thể xác đinh được việc gọi phương thức của lớp A hay B.
Vì vậy lỗi khi biên dịch sẽ tốt hơn lỗi khi runtime, java sẽ print ra lỗi “compile time error” nếu bạn cố tình kế thừa 2 class.
class A{ public void eat(){ System.out.println("Eating"); } } class B{ public void eat(){ System.out.println("Not eat"); } } class C extends A,B{ public static void main(String[] args){ C obj = new C(); obj.eat(); } }
Compilation failed;
Bài tập:
- Viết một class point có các thuộc tính vị trí (x,y) và các phương thức set,get để làm việc với hai thuộc tính đó.
- Viết một class circle kế thừa từ class point. Có thêm thuộc tính r (bán kính) và các phương thức tính chu vi, diện tích của hình tròn đó.
Bài viết của mình đến đây là kết thúc. Cám ơn các bạn đã theo dõi !
Để lại một bình luận