FaCode Ngôn ngữ Java Tính kế thừa trong Java

FaCode Ngôn ngữ Java

FaCode Ngôn ngữ Java 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.

Tư tưởng của kế thừa trong java là có thể tạo ra một class mới được xây dựng trên các lớp đang tồn tại. 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 của kế thừa trong java

Sử dụng từ khóa extends để kế thừa.

FaCode Ngôn ngữ Java

Ví dụ về kế thừa trong java

FaCode Ngôn ngữ Java

Kết quả:

Code:

class Employee {

    float salary = 1000;

}

class Programmer extends Employee {

    int bonus = 150;

}

public class InheritanceSample1 {

    public static void main(String args[])

    {

        Programmer p = new Programmer();

        System.out.println("Programmer salary is: " + p.salary);

        System.out.println("Bonus of Programmer is: " + p.bonus);

    }

}

Trong ví dụ trên class Programmer là con của class Employee, nên nó được phép truy cập đến trường salary của class cha.


Các kiểu kế thừa trong java

Có 3 kiểu kế thừa trong java đó là đơn kế thừa, kế thừa nhiều cấp, kế thừa thứ bậc.

Khi một class được kế thừa từ nhiều class được gọi là đa kế thừa. Trong java, đa kế thừa chỉ được support thông qua interface. 

FaCode Ngôn ngữ Java

Chú ý: Đa kế thừa trong java không được support thông qua class.


Ví dụ về đơn kế thừa

FaCode Ngôn ngữ Java

Output:

Code:

class Animal {

    void eat() {

        System.out.println("eating...");

    }

}

class Dog extends Animal {

    void bark() {

        System.out.println("barking...");

    }

}

public class TestInheritance1 {

    public static void main(String args[])

    {

        Dog d = new Dog();

        d.bark();

        d.eat();

    }

}

Ví dụ về kế thừa nhiều cấp

FaCode Ngôn ngữ Java

Kết quả:

Code:

class Animal {

    void eat() {

        System.out.println("eating...");

    }

}

class Dog extends Animal {

    void bark() {

        System.out.println("barking...");

    }

}

class BabyDog extends Dog {

    void weep() {

        System.out.println("weeping...");

    }

}

public class TestInheritance2 {

    public static void main(String args[])

    {

        BabyDog d = new BabyDog();

        d.weep();

        d.bark();

        d.eat();

    }

}

Ví dụ về kế thừa thứ bậc

Kết quả:

Code:

class Animal {

    void eat() {

        System.out.println("eating...");

    }

}

class Dog extends Animal {

    void bark() {

        System.out.println("barking...");

    }

}

class Cat extends Animal {

    void meow() {

        System.out.println("meowing...");

    }

}

public class TestInheritance3 {

    public static void main(String args[])

    {

        Cat c = new Cat();

        c.meow();

        c.eat();

        // c.bark(); // compile error

    }

}

Câu hỏi: Tại sao đa kế thừa không được support trong 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 định đượ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.

Kết quả: 

Code:

class A {

    void msg() {

        System.out.println("Hello");

    }

}

class B {

    void msg() {

        System.out.println("FaCode ");

    }

}

public class C extends A,B {

 public static void main(String args[])

    {

        C obj = new C();

        obj.msg();

    }

}
FaCode Ngôn ngữ Java

_____________

Khóa học lập trình

7 Java frameworks phổ biến nhất hiện nay

xem thêm

________

FaCode là một seri học tập lập trình, lần này là FaCode ngôn ngữ Java, bằng mọi nỗ lực FaCode sẽ hoàn thành các mục tiêu đề ra trong FaCode Ngôn ngữ Java. Hãy đồng hành cùng FaCode Ngôn ngữ Java và theo dõi chúng tôi nhé. FaCode Ngôn ngữ Java rất mong nhận được lời góp ý từ phía cộng đồng. Share4Happy với phương châm chia sẻ để hạnh phúc.

Related posts

FaCode Ngôn ngữ Java những câu hỏi phỏng vấn về Hibernate trong Java

FaCode Ngôn ngữ Java những câu hỏi phỏng vấn về JSP trong Java

FaCode Ngôn ngữ Java những câu hỏi phỏng vấn servlet.