GP Coder

Trang chia sẻ kiến thức lập trình Java

  • Java Core
    • Basic Java
    • OOP
    • Exception Handling
    • Multi-Thread
    • Java I/O
    • Networking
    • Reflection
    • Collection
    • Java 8
  • Design pattern
    • Creational Pattern
    • Structuaral Pattern
    • Behavior Pattern
  • Web Service
    • SOAP
    • REST
  • JPA
  • Java library
    • Report
    • Json
    • Unit Test
  • Message Queue
    • ActiveMQ
    • RabbitMQ
  • All
Trang chủ Java Core OOP Tính kế thừa (Inheritance) trong java

Tính kế thừa (Inheritance) trong java

Đăng vào 05/11/2017 . Được đăng bởi GP Coder . 29619 Lượt xem . Toàn màn hình

Nội dung

  • 1 Tính kế thừa là gì?
  • 2 Các kiểu kế thừa trong java
  • 3 Một số câu hỏi liên quan đến tính thừa kế trong Java

Tính kế thừa là gì?

Tính kế thừa (Inheritance) là một trong bốn tính chất cơ bản của lập trình hướng đối tượng trong Java.

Kế thừa 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.

Từ khóa extends được sử dụng để thể hiện sự kế thừa của một lớp.

Cú pháp:


class Super {

}

class Sub extends Super {

}

Ví dụ:


public class Employee {

	protected float salary = 40000;

}

public class Programmer extends Employee {

	int bonus = 10000;

	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 field salary của class Programmer.

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

Có 3 kiểu kế thừa trong java: đơn kế thừa (single), kế thừa nhiều cấp (multilevel), kế thừa thứ bậc (hierarchical).

Khi một class được kế thừa từ nhiều class đươc gọi là đa kế thừa.

Trong java, một class không được phép thừa kế từ nhiều class, có thể cài đặt (implement) nhiều interface. Tuy nhiên, một interface có thể thừa kế nhiều interface.

Thừa kế đơn (Single Inheritance):


public class Animal {
	public void eat() {
		System.out.println("eating...");
	}
}

public class Dog extends Animal {
	public void bark() {
		System.out.println("barking...");
	}
}

public class TestInheritance {
	public static void main(String args[]) {
		Dog d = new Dog();
		d.bark();
		d.eat();
	}
}

Kết quả:

barking...
eating...

Thừa kế nhiều cấp (Multilevel Inheritance):

public class Animal {
	public void eat() {
		System.out.println("eating...");
	}
}

public class Dog extends Animal {
	public void bark() {
		System.out.println("barking...");
	}
}

public class BabyDog extends Dog {
	public 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();
	}
}

Kết quả:

weeping...
barking...
eating...

Thừa kế thứ bậc (Hierarchical Inheritance):

class Animal {
	public void eat() {
		System.out.println("eating...");
	}
}

class Dog extends Animal {
	public void bark() {
		System.out.println("barking...");
	}
}

public class Cat extends Animal {
	public void meow() {
		System.out.println("meowing...");
	}
}

public class TestInheritance3 {
	public static void main(String args[]) {
		Cat c = new Cat();
		c.meow();
		c.eat();
	}
}

Kết quả:

meowing...
eating...

Một số câu hỏi liên quan đến tính thừa kế trong Java

Tại sao sử dụng tính kế thừa trong Java?

  • Để ghi đè phương thức (Method Overriding), do đó có thể thu được tính đa hình tại runtime.
  • Để làm tăng tính tái sử dụng của code.

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 đ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.


public class Printable {
    void print() {
        System.out.println("Printable");
    }
}  
 
public class Showable {  
    void print() {
        System.out.println("Showable");
    }
}  
 
// Không thể thực hiện đa thừa kế với class
public class MultiHeritanceExample extends Printable, Showable {  
    public static void main(String args[]) {  
        MultiHeritanceExample obj = new MultiHeritanceExample();  
        obj.print();  // Không thể xác định được gọi phương thức print() của class nào
    }  
}  

Tài liệu tham khảo

  • https://www.javatpoint.com/inheritance-in-java
  • https://www.tutorialspoint.com/java/java_inheritance.htm
5.0
03
Nếu bạn thấy hay thì hãy chia sẻ bài viết cho mọi người nhé! Và Donate tác giả

Shares

Chuyên mục: OOP Được gắn thẻ: Basic Java, OOP

Tính đóng gói (Encapsulation) trong java
Tính đa hình (Polymorphism) trong Java

Có thể bạn muốn xem:

  • Một số nguyên tắc, định luật trong lập trình (22/08/2018)
  • Cơ chế Upcasting và Downcasting trong java (05/11/2017)
  • Từ khóa static và final trong java (02/11/2017)
  • Toán tử instanceof trong java (03/11/2017)
  • Tính đóng gói (Encapsulation) trong java (05/11/2017)

Bình luận

bình luận

Tìm kiếm

Bài viết mới

  • Clean code 13/01/2024
  • Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud 02/10/2020
  • Kết nối RabbitMQ sử dụng Web STOMP Plugin 19/06/2020
  • Sử dụng publisher confirm trong RabbitMQ 16/06/2020
  • Sử dụng Dead Letter Exchange trong RabbitMQ 13/06/2020

Xem nhiều

  • Hướng dẫn Java Design Pattern – Factory Method (97406 lượt xem)
  • Hướng dẫn Java Design Pattern – Singleton (97085 lượt xem)
  • Giới thiệu Design Patterns (86748 lượt xem)
  • Lập trình đa luồng trong Java (Java Multi-threading) (85561 lượt xem)
  • Giới thiệu về Stream API trong Java 8 (83111 lượt xem)

Nội dung bài viết

  • 1 Tính kế thừa là gì?
  • 2 Các kiểu kế thừa trong java
  • 3 Một số câu hỏi liên quan đến tính thừa kế trong Java

Lưu trữ

Thẻ đánh dấu

Annotation Authentication Basic Java Behavior Pattern Collection Creational Design Pattern Cấu trúc điều khiển Database Dependency Injection Design pattern Eclipse Exception Executor Service Google Guice Gson Hibernate How to Interceptor IO Jackson Java 8 Java Core JDBC JDK Jersey JMS JPA json JUnit JWT Message Queue Mockito Multithreading OOP PowerMockito RabbitMQ Reflection Report REST SOAP Structuaral Pattern Swagger Thread Pool Unit Test Webservice

Liên kết

  • Clean Code
  • JavaTpoint
  • Refactoring Guru
  • Source Making
  • TutorialsPoint
  • W3Schools Online Web Tutorials

Giới thiệu

GP Coder là trang web cá nhân, được thành lập với mục đích lưu trữ, chia sẽ kiến thức đã học và làm việc của tôi. Các bài viết trên trang này chủ yếu về ngôn ngữ Java và các công nghệ có liên quan đến Java như: Spring, JSF, Web Services, Unit Test, Hibernate, SQL, ...
Hi vọng góp được chút ít công sức cho sự phát triển cộng đồng Coder Việt.

Donate tác giả

Tìm kiếm các bài viết của GP Coder với Google Search

Liên hệ

Các bạn có thể liên hệ với tôi thông qua:
  • Trang liên hệ
  • Linkedin: gpcoder
  • Email: contact@gpcoder.com
  • Skype: ptgiang56it

Follow me

Copyright 2025 © GP Coder · All Rights Reserved · Giới thiệu · Chính sách · Điều khoản · Liên hệ ·

Share

Blogger
Delicious
Digg
Email
Facebook
Facebook messenger
Flipboard
Google
Hacker News
Line
LinkedIn
Mastodon
Mix
Odnoklassniki
PDF
Pinterest
Pocket
Print
Reddit
Renren
Short link
SMS
Skype
Telegram
Tumblr
Twitter
VKontakte
wechat
Weibo
WhatsApp
X
Xing
Yahoo! Mail

Copy short link

Copy link