Quangkhoi1228 | Knowledge base
  • Về trang chủ
  • Lời nói đầu
  • Nhập môn lập trình web
    • Giáo trình
    • Class 01: Hello HTML!!!
    • Class 02: HTML: Comment, Text formatting, Attribute, Link
    • Class 03: HTML: Style, Inline/Block element, Image
    • Class 04: HTML: List, Table, Responsive
    • Class 05: Hello CSS!!!
    • Class 06: CSS: Flexbox, Layout
    • Class 07: Hello Javascript!!!
    • Class 08: JS: Operator, Expression, For/While Loop, Function
    • Class 09: JS: Search Function
    • Project 1: Layout Structure
    • Project 2: Search Function
    • Project 3: MVP
    • Review "Lập trình Frontend Website"
  • Lập trình Frontend Website
    • Class 01: Ôn tập HTML
    • Class 02: Thảo luận HTML
    • Class 03: Ôn tập CSS
    • Class 04: Chrome dev tools, CSS Box Model
    • Class 05: CSS: Position, Đơn vị đo
    • Class 06: CSS: hiệu ứng, responsive
    • Class 07: Thảo luận CSS
    • Class 08: Ôn tập JS
    • Class 09: JS: Mảng, Đối tượng, Biến tham chiếu và tham trị
    • Class 10: JS: Class, Pair programming
    • Class 11: JS: DOM, UI Rendering
  • Lập trình ReactJS
    • Class 01: Giới thiệu ReactJS
    • Class 01: Tạo dự án ReactJS mới
    • Class 02: ReactJS Component
    • Class 02: Import/Export component
    • Class 03: useState hook
    • Class 04: Project 1: UI cơ bản
    • Class 05: Render có điều kiện và danh sách
    • Class 06: useEffect hook
    • Class 07: Project 2: Xử lý user logic
    • Class 08: Project 3: Hoàn thiện dashboard
    • Class 09: Form và dữ liệu người dùng
    • Class 10: UseRef và thao tác với DOM
    • Class 11: Project 4: Xử lý form data
    • Class 12: Project 5: Hoàn thiện form data
    • Class 13: useMemo và useCallback
    • Class 14: Custom Hook
    • Class 15: Project 6: Hoàn thiện project
    • Class 16: Ôn tập
  • Lập trình NestJS
    • Class 01: Giới thiệu NestJS & Cài đặt dự án
    • Class 02: Routing, Controller và Dependency Injection
    • Class 03: Service và Data Validation
    • Class 04: Kết nối Database với TypeORM
    • Class 05: Quan hệ trong Database (OneToMany, ManyToOne) với TypeORM
    • Class 06: Middleware, Interceptor, Guard
    • Class 07: Authentication – JWT
    • Class 08: Authorization – Phân quyền
    • Class 09: File Upload & Configuration
    • Class 10: Giới thiệu WebSocket
    • Class 11: Project 1
    • Class 12: Project 2
    • Class 13: Project 3
    • Class 14: Project 4
    • Class 15: Project 5
    • Class 16: Project 6
  • Lập trình Java cơ bản
    • Class 01: Khai giảng
    • Class 02: Hello Java
    • Class 03: Biến và kiểu dữ liệu
    • Class 04: Toán tử và biểu thức
    • Class 05: Câu lệnh điều kiện
    • Class 06: Review 1
    • Class 07: Vòng lặp For
    • Class 08: Vòng lặp While / Do-while
    • Class 09: Java Method
    • Class 10: Review 2
    • Class 11: Java User Input
    • Class 12: Java File
    • Class 13: Final Exam 1
    • Class 14: Final Exam 2
    • Review "Lập trình OOP với Java"
  • Lập trình OOP với Java
    • Class 01: Hello OOP
    • Class 02: Class Attribute và Method
    • Class 03: Constructor, Modifier và Package
    • Class 04: Review 1
    • Class 05: Tính kế thừa và đa hình
    • Class 06: Tính trừu tượng và đóng gói
    • Class 07: Review 2
    • Class 08: Final Exam 1
    • Class 09: Final Exam 2
    • Review "CTDL và Giải thuật với Java"
  • CTDL và Giải thuật với Java
    • Class 01: Hello Data Structure
  • HTML
    • Cài đặt công cụ cơ bản
    • HTML là gì?
    • Phần tử HTML
    • Cấu trúc file HTML cơ bản
    • Comment trong HTML
    • Format văn bản trong HTML
    • Thuộc tính HTML
    • Liên kết(link) trong HTML
    • Project: Professional Email
    • HTML Style
    • Phần tử Inline và Block
    • HTML Image
    • HTML List
    • HTML Table
    • Head trong HTML
    • HTML Responsive
    • Project: Online Cover Letter
  • CSS
    • Giới thiệu CSS
    • CSS Selector
    • Thêm CSS vào trang
    • Comment trong CSS
    • Màu sắc trong CSS
    • CSS Background
    • CSS Border
    • CSS Spacing
    • CSS Flexbox
    • HTML Layout
    • Chrome dev tools
    • CSS Box Model
    • CSS Position
    • Đơn vị đo trong CSS
    • CSS Pseudo-classes
    • CSS Responsive
  • JavaScript
    • Giới thiệu Javascript
    • Thêm JS vào trang
    • Các hàm có sẵn
    • Biến và kiểu dữ liệu
    • JS Mảng
    • JS Đối tượng
    • JS Biến Tham Chiếu và Tham Trị
    • Toán tử và biểu thức
    • Câu lệnh điều kiện
    • Vòng lặp For / While
    • Hàm (Function)
    • Chức năng tìm kiếm với JS và DOM
    • JS Class
    • JS DOM
    • JS Dom Rendering
  • Java
    • Giới thiệu Java
    • Chương trình Hello world
    • Phân biệt JVM, JRE, JDK
    • Java Comment
    • Biến trong Java
    • Kiểu dữ liệu trong Java
    • Java Array
    • Toán tử trong Java
    • Biễu thức trong Java
    • Java If-else
    • Java Switch
    • Vòng lặp For trong Java
    • Vòng lặp While trong Java
    • Vòng lặp Do-while trong Java
    • Java Method
    • Java OOP
    • Java Class và Object
    • Java Class attribute
    • Java Class method
    • Java Constructor
    • Java Modifier
    • Java Package
    • Java Tính kế thừa
    • Java Tính đa hình
    • Java Tính trừu tượng
    • Java Tính đóng gói
    • Java User Input
    • Java File
  • Soft skills
    • Pair Programming
  • Web design and wireframe
  • NextJS
    • Tạo dự án NextJS mới
  • NestJS
    • Giới thiệu NestJS
    • NestJS controller
    • NestJS module
  • Git
    • Setup SSH key với GitHub
  • Bash
    • Giới thiệu Bash/Shell Script
  • Wordpress
    • Thêm custom routes
    • Deploy with ubuntu
  • Deployment
    • SSH server, đổi password và add SSH key
    • Tạo user mới và add SSH key
    • Page
  • GitBook
    • Custom domain with CloudFlare
  • Hướng dẫn khác
    • Gitbook custom domain with Cloudflare
    • Cấu hình OpenVPN
    • Cấu hình và lấy SSH key
    • Công cụ lập trình
      • Visual Studio Code
      • Cài đặt IntelliJ IDEA
    • Đường dẫn file trong HTML
    • CI/CD github action
  • Project: CV online
Powered by GitBook
On this page
  • Java Inheritance
  • Khái niệm kế thừa trong Java
  • Từ khóa super
  • Kế thừa nhiều cấp (Multilevel Inheritance)
  • Ghi đè phương thức (Method Overriding)
  • Từ khóa final
  • Bài tập thực hành
  1. Java

Java Tính kế thừa

Java Inheritance

Java Inheritance (Kế thừa trong Java) là một khái niệm quan trọng trong lập trình hướng đối tượng (OOP), cho phép một lớp (class) thừa hưởng các thuộc tính và phương thức của một lớp khác. Điều này giúp tái sử dụng mã nguồn, tăng tính linh hoạt và mở rộng của ứng dụng.

Khái niệm kế thừa trong Java

Kế thừa là quá trình mà một lớp (được gọi là lớp con hoặc lớp dẫn xuất) kế thừa các thuộc tính và phương thức từ một lớp khác (được gọi là lớp cha hoặc lớp cơ sở). Lớp con có thể sử dụng và mở rộng các thành phần của lớp cha mà không cần phải viết lại mã nguồn.

Cú pháp cơ bản

class ParentClass {
    // Các thuộc tính và phương thức của lớp cha
}

class ChildClass extends ParentClass {
    // Các thuộc tính và phương thức của lớp con
}

Ví dụ minh họa

// Lớp cha
class Animal {
    void eat() {
        System.out.println("Animal is eating");
    }
}

// Lớp con
class Dog extends Animal {
    void bark() {
        System.out.println("Dog is barking");
    }
}

public class InheritanceExample {
    public static void main(String[] args) {
        Dog d = new Dog();
        d.eat(); // Gọi phương thức của lớp cha
        d.bark(); // Gọi phương thức của lớp con
    }
}

Trong ví dụ trên, lớp Dog kế thừa từ lớp Animal, vì vậy nó có thể sử dụng phương thức eat() của lớp cha.

Từ khóa super

Từ khóa super được sử dụng để gọi trực tiếp các phương thức và thuộc tính của lớp cha từ lớp con.

Cú pháp super

class ParentClass {
    void parentMethod() {
        System.out.println("This is a parent method");
    }
}

class ChildClass extends ParentClass {
    void childMethod() {
        super.parentMethod(); // Gọi phương thức của lớp cha
        System.out.println("This is a child method");
    }
}

Ví dụ minh họa

class Animal {
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

class Cat extends Animal {
    void sound() {
        super.sound(); // Gọi phương thức của lớp cha
        System.out.println("Cat meows");
    }
}

public class SuperExample {
    public static void main(String[] args) {
        Cat c = new Cat();
        c.sound(); // Gọi phương thức của lớp con
    }
}

Kế thừa nhiều cấp (Multilevel Inheritance)

Kế thừa nhiều cấp xảy ra khi một lớp con kế thừa từ một lớp con khác, tức là có nhiều cấp kế thừa.

Ví dụ minh họa

class Animal {
    void move() {
        System.out.println("Animal is moving");
    }
}

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

class Puppy extends Dog {
    void play() {
        System.out.println("Puppy is playing");
    }
}

public class MultilevelInheritanceExample {
    public static void main(String[] args) {
        Puppy p = new Puppy();
        p.move(); // Phương thức của lớp cha
        p.bark(); // Phương thức của lớp con
        p.play(); // Phương thức của lớp cháu
    }
}

Ghi đè phương thức (Method Overriding)

Ghi đè phương thức cho phép một lớp con cung cấp cách triển khai cụ thể cho một phương thức đã được định nghĩa trong lớp cha.

Cú pháp ghi đè phương thức

class ParentClass {
    void display() {
        System.out.println("Parent class method");
    }
}

class ChildClass extends ParentClass {
    @Override
    void display() {
        System.out.println("Child class method");
    }
}

Ví dụ minh họa

class Animal {
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

class Cat extends Animal {
    @Override
    void sound() {
        System.out.println("Cat meows");
    }
}

public class OverridingExample {
    public static void main(String[] args) {
        Animal a = new Cat();
        a.sound(); // Gọi phương thức ghi đè
    }
}

Từ khóa final

Từ khóa final trong Java có thể được sử dụng để khai báo biến, phương thức và lớp với các ý nghĩa khác nhau:

final với biến

Một biến được khai báo là final không thể thay đổi giá trị sau khi đã được gán.

final int MAX_VALUE = 100;

public class FinalVariableExample {
    public static void main(String[] args) {
        final int x = 10;
        // x = 20; // Lỗi: Không thể gán lại giá trị cho biến final
        System.out.println("x = " + x);
    }
}

final với phương thức

Một phương thức được khai báo là final không thể bị ghi đè bởi các lớp con.

class ParentClass {
    final void finalMethod() {
        System.out.println("This is a final method");
    }
}

class ChildClass extends ParentClass {
    // void finalMethod() {
    //     // Lỗi: Không thể ghi đè phương thức final
    // }
}

final với lớp

Một lớp được khai báo là final không thể được kế thừa.

final class FinalClass {
    // Nội dung của lớp final
}

// class SubClass extends FinalClass {
//     // Lỗi: Không thể kế thừa lớp final
// }

Ví dụ minh họa

final class Constants {
    static final double PI = 3.14159;
}

class Circle {
    double radius;

    Circle(double radius) {
        this.radius = radius;
    }

    void displayArea() {
        double area = Constants.PI * radius * radius;
        System.out.println("Area of the circle: " + area);
    }
}

public class FinalExample {
    public static void main(String[] args) {
        Circle c = new Circle(5);
        c.displayArea();
    }
}

Trong ví dụ này, lớp Constants và biến PI được khai báo là final, nghĩa là giá trị của PI không thể thay đổi và lớp Constants không thể được kế thừa.

Bài tập thực hành

Bài tập 1: Kế thừa cơ bản

Tạo hai lớp Vehicle và Car. Lớp Vehicle có thuộc tính color và phương thức move(). Lớp Car kế thừa từ lớp Vehicle và thêm phương thức turnOnLights().

Bài giải
class Vehicle {
    String color;

    void move() {
        System.out.println("Vehicle is moving");
    }
}

class Car extends Vehicle {
    void turnOnLights() {
        System.out.println("Car is turning on lights");
    }
}

public class Exercise1 {
    public static void main(String[] args) {
        Car car = new Car();
        car.color = "Red";
        car.move();
        car.turnOnLights();
    }
}

Bài tập 2: Ghi đè phương thức

Tạo hai lớp Shape và Circle. Lớp Shape có phương thức calculateArea(). Lớp Circle kế thừa từ lớp Shape và ghi đè phương thức calculateArea() để tính diện tích hình tròn.

Bài giải
class Shape {
    double radius;

    void calculateArea() {
        System.out.println("Area of shape is not defined");
    }
}

class Circle extends Shape {
    Circle(double radius) {
        this.radius = radius;
    }

    @Override
    void calculateArea() {
        double area = Math.PI * radius * radius;
        System.out.println("Area of circle: " + area);
    }
}

public class Exercise2 {
    public static void main(String[] args) {
        Circle c = new Circle(5);
        c.calculateArea();
    }
}

Bài tập 3: Kế thừa nhiều cấp

Tạo ba lớp Employee, AdministrativeEmployee, và TechnicalEmployee. Lớp Employee có phương thức work(). Lớp AdministrativeEmployee kế thừa từ Employee và thêm phương thức attendMeeting(). Lớp TechnicalEmployee kế thừa từ AdministrativeEmployee và thêm phương thức repairMachine().

Bài giải
class Employee {
    void work() {
        System.out.println("Employee is working");
    }
}

class AdministrativeEmployee extends Employee {
    void attendMeeting() {
        System.out.println("Administrative employee is attending a meeting");
    }
}

class TechnicalEmployee extends AdministrativeEmployee {
    void repairMachine() {
        System.out.println("Technical employee is repairing a machine");
    }
}

public class Exercise3 {
    public static void main(String[] args) {
        TechnicalEmployee te = new TechnicalEmployee();
        te.work();
        te.attendMeeting();
        te.repairMachine();
    }
}

Qua các bài tập trên, hy vọng các bạn đã hiểu rõ hơn về khái niệm kế thừa trong Java, cách sử dụng các từ khóa và các phương thức liên quan. Hãy tiếp tục thực hành

để nâng cao kỹ năng lập trình của mình.

PreviousJava PackageNextJava Tính đa hình

Last updated 1 year ago