Object, Class, Abstract Class Và Interface Trong Java

--- Bài mới hơn ---

  • Class Trừu Tượng(Abstract) Và Phương Thức Trừu Tượng Trong Java ” Cafedev.vn
  • Tính Trừu Tượng (Abstraction) Trong Java
  • Bài 15: Abstract Class Và Interface Trong Java
  • Sự Khác Nhau Giữa Abstract Class Và Interface Trong Java?
  • Sự Khác Nhau Giữa Abstract Class Và Interface Trong Java
  • 1. Object trong Java

    Object (đối tượng) là một thực thể vật lý, có thể là một con vật, một đồ vật… Ví dụ như ngôi nhà, máy bay, xe máy, con người…

    Mỗi đối tượng sẽ có đặc trưng riêng của nó:

    • Trạng thái của đối tượng: thể hiện ở giá trị của các biến trong class (các field của đối tượng), ví dụ cái xe màu gì, bao nhiêu phân khối, giá tiền…
    • Hành vi: các method (phương thức) của Class, hay được hiểu là các hành động của đối tượng. Ví dụ cái xe có thể chạy, phát tiếng còi, phát ánh đèn…
    • Định danh: việc nhận diện đối tượng được triển khai thông qua một ID duy nhất. Giá trị của ID là không thể nhìn thấy với người dùng bên ngoài. Nhưng nó được sử dụng nội tại bởi JVM để nhận diện mỗi đối tượng một cách duy nhất.

    Ví dụ: Có một đối tượng bút tên là Thiên Long, có màu đen, … được xem như là trạng thái của nó. Nó được sử dụng để viết, do đó viết là hành vi của nó.

    2. Class trong Java

    Trong Java nói riêng và trong lập trình hướng đối tượng nói chung thì Class (lớp) được hiểu là một nhóm các đối tượng có các đặc điểm chung.

      Ví dụ class xe là một nhóm các đối tượng có bánh xe và dùng làm phương tiện duy chuyển trên đường bộ.

    Class là một mô hình chi tiết để bạn sử dụng tạo ra các Object. Class định nghĩa tất cả các thuộc tính và các phương thức cần thiết của một Object.

      Ví dụ class XeOto gồm các thuộc tính (màu sắc, phân khối, tốc độ…) thì ta có thể hiểu đây là thiết kế của một chiếc XeOto, và khi tạo một chiếc xe ô tô (object) từ bản thiết kế đó ta sẽ có nhiều lựa chọn khác nhau: màu sắc (màu trắng, màu vàng, màu xanh, màu đen), phân khối (phân khối 5.2L, 6.3L), tốc độ (300km/h, 400km/h)…

    Việc tạo ra các đối tượng phải tuân theo bản thiết kế (class) đã định nghĩa trước đó:

      Ví dụ Class XeOto được thiết kế không có cánh quạt thì thì đối tượng (ví dụ: xe ô tô màu đen, phân khối 5.2L và tốc độ 300km/h) được tạo sẽ không thể nào có cánh quạt.

    3. Abstract class trong Java

    Abstract class hay còn gọi là lớp trừu tượng đơn giản được xem như một Class cha cho tất cả các Class có cùng bản chất. Do đó mỗi lớp dẫn xuất (lớp con) chỉ có thể kế thừa từ một lớp trừu tượng. Bên cạnh đó nó không cho phép tạo instance, nghĩa là sẽ không thể tạo được các đối tượng thuộc lớp đó.

    Một lớp được khai báo với từ khóa abstract là lớp trừu tượng (abstract class).

    Lớp trừu tượng có thể có các phương thức: Abstract method hoặc Non-abtract method.

    Abstract method là method trống không có thực thi.

    Non-abtract method là method có thực thi.

    Lớp trừu tượng có thể khai báo 0, 1 hoặc nhiều method trừu tượng bên trong.

    Không thể khởi tạo 1 đối tượng trực tiếp từ một class trừu tượng.

    4. Interface trong Java

    Interface được xem như một mặt nạ cho tất cả các Class cùng cách thức hoạt động nhưng có thể khác nhau về bản chất. Từ đó lớp dẫn xuấtcó thể kế thừa từ nhiều lớp Interface để bổ sung đầy đủ cách thức hoạt động của mình (đa kế thừa – Multiple inheritance).

    Interface không phải là class.

    Interface chỉ chứa những method/properties trống không có thực thi.

    Interface giống như một khuôn mẫu, một khung để để các lớp implement và follow.

    Các Class có thể kế thừa nhiều interface.

    Interface là một contract, các class implement phải triển khai các method theo như interface đã định nghĩa.

    5. Tổng kết

    Class là một mô hình chi tiết để bạn sử dụng tạo ra các Object. Class định nghĩa tất cả các thuộc tính và các phương thức cần thiết của một Object.

    Mỗi Object phải thuộc một Class nào đó. Và một Object là một thể hiện của Class. Tất cả các Object thuộc về cùng một Class có cùng các thuộc tính và các phương thức.

    Bạn không nên nhầm lẫn khi nói về việc một class được implement hay extend.

    Bạn chỉ có thể thừa kế (extend) từ một class và chỉ có thể hiện thực (implement) các chức năng (interface) cho class của mình. Theo cách ngắn gọn, quan hệ giữa một class khi thừa kế một abstract class được gọi là is-a, và một class khi hiện thực một interface được gọi là can-do (hoặc -able).

    All Rights Reserved

    --- Bài cũ hơn ---

  • Interface Trong Java Với Ví Dụ Cụ Thể
  • Khai Báo Interface Trong Java, Hằng Số Với Interface
  • Marker Interface Trong Java Và Một Số Trường Hợp Sử Dụng
  • Interface Trong Lập Trình Hướng Đối Tượng Java
  • Khác Biệt Giữa Abstract Class Và Interface Trong Java
  • Abstract Class Và Interface Trong Java

    --- Bài mới hơn ---

  • Functional Interface Là Gì? Functional Interface Api Trong Java 8
  • Java Bài 32: Tính Trừu Tượng (Abstraction)
  • 600 Câu Thành Ngữ Việt Trung
  • Công Cụ Tính Lương Gross Sang Net / Net Sang Gross Chuẩn 2022
  • Lương Net, Lương Gross Là Gì? Chuyển Lương Net Sang Gross
  • Trong tài liệu hướng dẫn này tôi sẽ hướng dẫn về Interface và class trừu tượng (Abstract Class). Đồng thời phân tích sự giống và khác nhau giữa chúng.

    2- Class trừu tượng (Abstract Class)

    Abstract class (Class trừu tượng). Hãy xem ví dụ về một class như thế:

    // Đây là một lớp trừu tượng. // Nó bắt buộc phải khai báo là abstract // vì trong nó có một phương thức trừu tượng public abstract class ClassA { // Đây là một phương thức trừu tượng. // Nó không có thân (body). // Access modifier của phương thức này là public. public abstract void doSomething(); // Access modifier của phương thức này là protected. protected abstract String doNothing(); // Phương thức này không khai báo access modifier. // Access modifier của nó là mặc định. abstract void todo() ; } // Đây là một lớp trừu tượng. // Nó được khai báo là abstract, // mặc dù nó không có phương thức trừu tượng nào. public abstract class ClassB { }

    Đặc điểm của một class trừu tượng là:

    1. Nó được khai báo abstract.
    2. Nó có thể khai báo 0, 1 hoặc nhiều method trừu tượng bên trong.
    3. Không thể khởi tạo 1 đối tượng trực tiếp từ một class trừu tượng.

    package org.o7planning.tutorial.abs; // Một lớp trừu tượng (Mô phỏng một công việc) // Nó khai báo 2 phương thức trừu tượng. public abstract class AbstractJob { public AbstractJob() { } // Đây là một phương thức trừu tượng. // Method này trả về tên của công việc. public abstract String getJobName(); // Đây là một phương thức trừu tượng. public abstract void doJob(); }

    package org.o7planning.tutorial.abs; // Lớp này thực hiện hết các phương thức trừu tượng của lớp cha. public class JavaCoding extends AbstractJob { public JavaCoding() { } // Thực hiện phương thức trừu tượng khai báo tại lớp cha. @Override public void doJob() { System.out.println("Coding Java..."); } // Thực hiện phương thức trừu tượng khai báo tại lớp cha. // Phương thức này sẽ có thân (body). // Và trả về tên của công việc. @Override public String getJobName() { return "Coding Java"; } }

    package org.o7planning.tutorial.abs; // ManualJob - (Mô phỏng một công việc phổ thông) // Lớp cha (AbstractJob) có 2 phương thức trừu tượng. // Lớp này mới chỉ thực hiện 1 phương thức trừu tượng của lớp cha. // Vì vậy nó bắt buộc phải khai báo là abstract. public abstract class ManualJob extends AbstractJob { public ManualJob() { } // Thực hiện phương thức trừu tượng của lớp cha. @Override public String getJobName() { return "Manual Job"; } }

    package org.o7planning.tutorial.abs; // Class này thừa kế từ class trìu tượng ManualJob // BuildHouse không được khai báo là trừu tượng. // Vì vậy nó cần thực hiện tất cả các phương thức trừu tượng còn lại. public class BuildHouse extends ManualJob { public BuildHouse() { } // Thực hiện phương thức trừu tượng của lớp cha. @Override public void doJob() { System.out.println("Build a House"); } }

    package org.o7planning.tutorial.abs; public class JobDemo { public static void main(String args) { // Thừa kế trường tĩnh từ interface CanDrink. System.out.println("Drink " + Cat.SEVENUP); // Khởi tạo một đối tượng CanEat. // Một đối tượng khai báo là CanEat. // Nhưng thực tế là Cat. CanEat canEat1 = new Cat("Tom"); // Một đối tượng khai báo là CanEat. // Nhưng thực tế là Mouse. CanEat canEat2 = new Mouse(); // Java luôn biết một đối tượng là kiểu gì canEat1.eat(); canEat2.eat(); boolean isCat = canEat1 instanceof Cat; System.out.println("catEat1 is Cat? " + isCat); // Ép kiểu (Cast). if (canEat2 instanceof Mouse) { Mouse mouse = (Mouse) canEat2; // Gọi phương thức drink (Thừa kế từ CanDrink). mouse.drink(); } } }

    --- Bài cũ hơn ---

  • Hướng Dẫn Lập Trình Spring Cho Người Mới Bắt Đầu
  • Từ Khóa Static Và Final Trong Java
  • Sử Dụng Static Và Final Trong Java
  • Java Bài 16: Đối Tượng (Object) & Lớp (Class)
  • Java Xử Lý Việc Khởi Tạo, Lưu Trữ Và Thay Đổi Dữ Liệu Của Object Như Thế Nào
  • Bài 15: Abstract Class Và Interface Trong Java

    --- Bài mới hơn ---

  • Sự Khác Nhau Giữa Abstract Class Và Interface Trong Java?
  • Sự Khác Nhau Giữa Abstract Class Và Interface Trong Java
  • Abstract Class Trong Java Với Ví Dụ Cụ Thể
  • Hiệu Ứng Abstract Là Gì? Định Nghĩa, Đặc Trưng, Quá Trình Phát Triển, Các Loại Abstract
  • Abstract Class Và Interface, Bạn Có Thực Sự Hiểu Chúng ?
  • Một lớp được khai báo với từ khóa abstract là lớp abstract trong Java. Lớp abstract có nghĩa là lớp trừu tượng, nó có thể có các phương thức abstract hoặc non-abtract.

    Lớp trừu tượng có thể không khai báo hoặc khai báo nhiều method trừu tượng bên trong.

    Một lớp kế thừa từ lớp trừu tượng (subclass – lớp con) không cần phải implement non-abstract methods, nhưng những method nào có abstract thì bắt buộc phải override. Trừ khi subclass cũng là abstract.

    &ltaccess modifier&gt abstract class &ltclass name&gt { }

    1. Một phương thức được khai báo là abstract và không có trình triển khai thì đó là phương thức trừu tượng (abstract method).
    2. Nếu bạn muốn một lớp chứa một phương thức cụ thể nhưng bạn muốn triển khai thực sự phương thức đó để được quyết định bởi các lớp con, thì bạn có thể khai báo phương thức đó trong lớp cha ở dạng abstract.
    3. Từ khóa abstract được sử dụng để khai báo một phương thức dạng abstract. Phương thức abstract sẽ không có định nghĩa, được theo sau bởi dấu chấm phẩy, không có dấu ngoặc nhọn theo sau.

    &ltaccess modifier&gt abstract void &ltmethod name&gt();

    Ví dụ: Viết chương trình tạo ra các phương tiện giao thông sao cho cách tạo ra là giống nhau. Phương tiện đó có thể là ô tô, xe máy, xe đạp,…

    package com.company; public abstract class Vehicle { public Vehicle() { } public abstract void create(); }

    package com.company; public class Bike extends Vehicle { @Override public void create() { System.out.println("Create Bike..."); } }

    package com.company; public class Moto extends Vehicle { @Override public void create() { System.out.println("Create Moto..."); } }

    package com.company; public class Main { public static void main(String args) { Vehicle moto = new Moto(); moto.create(); Vehicle bike = new Bike(); bike.create(); } }

    Kết quả thu được như phần Abstract class.

    Trong Java, một lớp chỉ được thừa kế (extends) từ một lớp, có thể cài đặt (implements) nhiều interface. Tuy nhiên, một interface có thể thừa kế (extends) nhiều interface.

    Một interface không thể cài đặt (implements) interface khác, do interface không phần cài đặt, chỉ chứa các khai báo.

    Ví dụ: 1 người vừa làm giáo viên, vừa làm bác sĩ. Ta xây dựng các lớp như sau

    package com.company; public interface Teacher { public void teaching(); }

    package com.company; public interface Doctor { public void injecting(); }

    package com.company; public class People implements Doctor,Teacher { @Override public void injecting() { System.out.println("Injecting..."); } @Override public void teaching() { System.out.println("Teaching..."); } }

    package com.company; public class Main { public static void main(String args[]) { People people = new People(); people.teaching(); people.injecting(); } }

    Abstract class Interface

    Multiple inheritance

    Không hỗ trợ đa thừa kế

    Một class có thể hiện thực nhiều interface.(tạm coi là thừa kế)

    Default implementation

    Có thể định nghĩa thân phương thức, property

    Không thể định nghĩa code xử lý, chỉ có thể khai báo.

    Access Modifiers

    Có thể xác định modifier

    Mọi phương thức, property đều mặc định là public.

    Adding functionality

    Không cần thiết

    Mọi phương thức, property của interface cần được hiện thực trong class.

    Nói về Abtract class và Interface, đôi khi bạn sẽ gặp một số cách gọi: Khi một lớp kế thừa một class/ abtract class thì có nghĩa là ta đang thể hiện mối quan hệ is-a (là), còn khi implement một interface, thì ta đang thể hiện mối quan hệ has-a (có, hay thực hiện).

    --- Bài cũ hơn ---

  • Tính Trừu Tượng (Abstraction) Trong Java
  • Class Trừu Tượng(Abstract) Và Phương Thức Trừu Tượng Trong Java ” Cafedev.vn
  • Object, Class, Abstract Class Và Interface Trong Java
  • Interface Trong Java Với Ví Dụ Cụ Thể
  • Khai Báo Interface Trong Java, Hằng Số Với Interface
  • Abstract Class Trong Java Với Ví Dụ Cụ Thể

    --- Bài mới hơn ---

  • Hiệu Ứng Abstract Là Gì? Định Nghĩa, Đặc Trưng, Quá Trình Phát Triển, Các Loại Abstract
  • Abstract Class Và Interface, Bạn Có Thực Sự Hiểu Chúng ?
  • Abstract Là Gì? Ý Nghĩa Từ Abstract? Phân Biệt Abstract Và Introduction
  • Nhân Viên Văn Phòng Tiếng Anh Là Gì ? Tìm Hiểu Ngay Nghĩa
  • Cố Nhân Là Gì? Xin Gọi Nhau Bằng Hai Tiếng Thân Thương
  • Một class được khai báo với từ khóa abstract được gọi là abstract class. Abstract class có thể chứa các abstract method và các method thông thường. Ngược lại đối với các class thông thường sẽ không thể có abstract method.

    Một abstract class được khai báo bằng từ khoá abstract.

    Một abstract method là một method được khai báo không có thân hàm.

    Các class con thừa kế abstract class phải implement abstract method.

    Abstract class không thể khởi tạo .

    Đơn giản hoá đối tượng bằng cách đưa ra các thuộc tính và phương thức mà nó có và thực hiện.

    Tập trung vào tính cốt lỗi của đối tượng. Ví dụ khi bạn xem method của class bất kỳ trong java chúng đều có mô tả rõ ràng về cách sử dụng, giá trị trả về, tham số truyền vào etc là bạn có thể sử dụng được.

    Khai báo class Abstract

    Khai báo abstract class abstract class A{ // Khai báo biến int n; // Khai báo abstract method abstract void myMethod(); // Khai báo method thông thường void anotherMethod(){ //Does something } }

    Tại sao cần abstract class?

    Ở bài trước trong lập trình hướng đối tượng, chúng ta có ví dụ về Person là class cha, Boy, Girl thừa kế từ Person .

    Vậy việc triển khai method eat() ở class Person là hoàn toàn dư thừa, và method eat() nên là một khuôn mẫu để các class khác thừa kế và tự triển khai lấy. Vì vậy java cung cấp cho chúng ta abstract class.

    Các abstract method trong abstract class sẽ không có thân hàm và các class extends từ nó sẽ bắt buộc phải implement các method abstract.

    Vậy chúng ta sẽ cùng implement lại ví dụ trước, mà Person sẽ trở thành abstract class với eat() là abstract method, vì nó ko cần định nghĩa ở class Person. Chúng ra sẽ thêm thuộc tính agegetAge() là method thông thường và được sử dụng ở các class con.

    // File Person.java public abstract class Person { int age; abstract void eat(); void getAge() { System.out.println(this.age); } }

    // File Boy.java public class Boy extends Person { Boy(int age) { // Khởi tạo age cho boy // chúng tôi vẫn hợp lệ, vì Boy thừa kế từ Person nên nó cũng có thuộc tính age. chúng tôi = age; } @Override void eat() { System.out.println("Boy is eating"); } }

    // File Girl.java public class Girl extends Person{ Girl(int age) { // Ở đây mình dùng this cho các bạn thấy rõ. việc dùng super hoặc this trong trường hợp này là như nhau. chúng tôi = age; } @Override void eat() { System.out.println("Girl is eating"); } }

    // File Main.java public class Main { public static void main(String[] args) { Person boy = new Boy(18); Person girl = new Girl(19); girl.eat(); girl.getAge(); boy.eat(); boy.getAge(); } }

    Việc dùng abstract class sẽ giúp cho chúng ta dễ dàng control được ý muốn của mình. Nếu bạn muốn các thằng con của abstract class phải làm đều gì đó thì bạn khai báo abstract method, còn nếu như muốn cho các thằng con dùng chung thì bạn để method thông thường.

    Abstract class và Concrete class trong java

    Một class được khai báo với từ khoá abstract được gọi là abstract class, ngược lại được gọi là Concrete class. Như ví dụ trên thì Person là một abstract class và Boy, Girl là Concrete class.

    Note:

    • Abstract class không thể khởi tạo, nó chỉ được sử dụng với mục đích cho các class khác thừa kế và mở rộng.
    • Abstract method nhất định phải chứa trong abstract class. Đồng nghĩa với việc Concrete class không thể chứa abstract method.
    • Abstract class có thể chứa abstract method hoặc method thông thường.
    • Abstract có thể trừu tượng hoá 100% bằng cách cung cấp tất cả các method đều là abstract method.
    • Abstract class có chứa cả method thông thường và abstract method là class có độ trừu tượng 0 – 100%.

    Ở bài sau chúng ta sẽ tìm hiểu về interface, interface được dùng như để xác định 100% trừu tượng về các method trong interface mặc định là abstract method. Các bạn sẽ không thể triển khai bất cứ hàm nào trong interface.

    --- Bài cũ hơn ---

  • Sự Khác Nhau Giữa Abstract Class Và Interface Trong Java
  • Sự Khác Nhau Giữa Abstract Class Và Interface Trong Java?
  • Bài 15: Abstract Class Và Interface Trong Java
  • Tính Trừu Tượng (Abstraction) Trong Java
  • Class Trừu Tượng(Abstract) Và Phương Thức Trừu Tượng Trong Java ” Cafedev.vn
  • Khác Biệt Giữa Abstract Class Và Interface Trong Java

    --- Bài mới hơn ---

  • Interface Trong Lập Trình Hướng Đối Tượng Java
  • Marker Interface Trong Java Và Một Số Trường Hợp Sử Dụng
  • Khai Báo Interface Trong Java, Hằng Số Với Interface
  • Interface Trong Java Với Ví Dụ Cụ Thể
  • Object, Class, Abstract Class Và Interface Trong Java
  • 1. Nguồn

    What’s the difference between an interface and an abstract class in Java?

    2. Động cơ

    Các câu hỏi về điểm khác biệt giữa abstract classinterface luôn rất hot trong các cuộc phỏng vấn Java cũng như Android developer, hy vọng qua bài viết này sẽ tóm tắt được những điểm khác biệt lớn và rõ ràng nhất của chúng, từ đó giúp các bạn developer có lựa chọn đúng đắn trong khi code.

    3. Bài viết

    Cách tốt nhất để bắt đầu phân biệt điểm khác giữa abstract class và interface chính là từ định nghĩa đơn giản về chúng.

    Một class nhất định phải được biểu thị bằng abstract nếu nó có nhiều hơn một abstract method. Một method được biểu thị là abstract nếu nó có method heading tuy nhiên phần thân là rỗng – có nghĩa là một abstract method sẽ không có implementation code bên trong dấu ngoặc như những method thường khác.

    3.1 Khi nào thì sử dụng abstract method trong Java?

    Trong Figure class ở phía trên, ta có một abstract method với tên getArea().

    Chính vì class này chứa một abstract method cho nên bản thân Figure class phải được biểu thị bằng abstract. Figure base class có 2 class bắt nguồn từ nó là Circle và Rectangle. Cả 2 class này đều có định nghĩa là getArea method như bạn có thể nhìn trong ví dụ.

    Tuy nhiên vấn đề chính đó là tại sao chúng ta phải biểu thị method getArea là abstract trong Figure class?

    Xem nào, nhiệm vụ của getArea method là gì? Nhiệm vụ của nó là trả về area của một dạng (shape) nhất định.

    Bản thân của Figure class không phải là một dạng nhất định giống như Circle hay Rectangle, chính vì vậy chúng ta không thể có một định nghĩa cụ thể nào cho getArea method trong Figure class. Điều đó đã lý giải tại sao chúng ta biểu thị getArea method là abstract trong Figure class.

    Bất cứ một class nào bắt nguồn từ Figure class về cơ bản sẽ có 2 lựa chọn

    1. cần đưa ra định nghĩa cụ thể cho getArea method
    2. biểu thị bản thân là abstract

    Class không phải là abstract được gọi là concrete class. Các bạn cũng nên biết rằng class không phải là abstract được gọi là concrete class, những thuật ngữ này sẽ giúp ích trong các cuộc phỏng vấn.

    Sau khi chúng ta đã khám phá khái niệm về abstract method cũng như class, hãy đi vào khái niệm về interface và xem chúng khác gì với abstract class.

    Một inteface khác với abstract class vì nó không phải là class. Nó đơn giản chỉ là một dạng thiết yếu có thể được thoả mãn bởi bất cứ class nào implement interface đó.

    Bất cứ class nào implement một interface phải thoả mãn 2 điều kiện:

    • nó phải có cụm “implements Interface_Name” tại phần đầu khi định nghĩa class
    • nó phải implement toàn bộ method được liệt ra trong định nghĩa của interface.

    Bây giờ nếu một class implement interface này thì nó sẽ giống như sau:

    Sau khi đã hiểu được những điều cơ bản nhất của interface và abstract class, chúng ta bắt đầu đi vào vấn đề chính của câu hỏi và khám phá điểm khác biệt của nó. Có 3 điểm khác biệt chính:

    Abstract class và inheritance

    Abstract class sinh ra là để được inherit (kế thừa), và chính vì thế khi có một class inherit một class khác điều đó chứng tỏ có một mối quan hệ mật thiết giữa 2 class đó. Ví dụ, nếu chúng ta có một abstract base class tên là Canine thì bất cứ class muốn kế thừa nào cũng nên thuộc dòng Canine (như Dog hay Wolf). Lý do chúng ta sử dụng từ “nên” đó là vì điều đó phụ thuộc vào Java developer – người nên đảm bảo mối quan hệ được khăng khít.

    Với interface, mối quan hệ giữa interface và class implement nó không cần quá mật thiết. Ví dụ, nếu chúng ta có một class tên là House, class này có thể implement một interface khác tên là AirConditioning. Việc có hay không có air conditioning cũng không phải là điều thiết yếu của một ngôi nhà, mối quan hệ đó không thể mật thiết như TownHouse class và House class được, hay như mối quan hệ của Apartment class bắt nguồn từ class House.

    Bởi vì TownHouse là một dạng của House, chính vì thế mối quan hệ sẽ rất khăng khít, điều đó sẽ khiến thay vì interface, sử dụng kế thừa sẽ là hợp lý hơn nhiều.

    Chúng ta có thể tổng hợp lại ý đầu tiên chính là “sẽ hợp lý hơn nếu sử dụng abstract class trong trường hợp có một mối quan hệ mật thiết giữa abstract class và class bắt nguồn từ nó”. Điều đó chính là vì abstract class có liên kết chặt chẽ với việc kế thừa, điều bao hàm một mối quan hệ khăng khít. Tuy nhiên với interface thì bạn không cần một mối quan hệ quá mật thiết giữa interface và class implement interface đó.

    Interface là sự thay thế tốt cho việc đa kế thừa

    Java không cho phép việc đa kế thừa – hãy tìm hiểu về các cuộc bàn thảo về Java Multiple Inheritance nếu bạn muốn tìm hiểu thêm. Trong Java, một class chỉ có thể bắt nguồn từ một class khác, kể cả nó có abstract hay không. Tuy nhiên, một class có thể implement nhiều interface – điều này có thể coi là sự thay thế cho đa kế thừa. Chính vì thế, điều khác biệt chính đó là một Java class chỉ có thể kế thừa một abstract class, tuy nhiên có thể implement nhiều interface.

    Abstract class có thể có implementation code

    Một abstract class có thể cung cấp nhiều method đi kèm định nghĩa – chính vì thế một abstract class có thể có method không abstract với những chi tiết implementation thực tế. Một abstract class cũng có thể có constructor và instance variable. Tuy nhiên, một interface không thể cung cấp bất cứ định nghĩa method nào – nó chỉ có thể cung cấp method rỗng mà thôi (điều này sẽ được thay đổi trong java 8). Bất cứ class nào implement interface phải chịu trách nhiệm cung cấp định nghĩa/implementation cho method.

    3.3 Khi nào thì sử dụng abstract class và interface trong Java

    1. Hãy sử dụng abstract class nếu bạn dự định sử dụng kế thừa và cung cấp base class phổ thông cho những class bắt nguồn từ nó.
    2. Abstract class cũng rất hữu dụng nếu bạn muốn có thể biểu thị những phần tử không public. Trong một interface, tất cả các method phải là public.
    3. Nếu bạn nghĩ rằng mình cần phải thêm method trong tương lai thì abstract class sẽ là phương án tốt hơn cho bạn. Điều này là vì nếu bạn thêm những method rỗng vào trong interface thì tất cả các class vốn dĩ đã implement interface này phải thay đổi hết sang implement những method mới đó nữa. (điều này được khác phục trong java 8).
    4. Interface sẽ là lựa chọn tốt nếu bạn nghĩ rằng API sẽ không thay đổi trong tương lai gần.
    5. Interface cũng rất tốt nếu bạn muốn có kiểu đa kế thừa trong hệ thống khi bạn có thể tạo nhiều interface và bắt class implement chúng.

    All Rights Reserved

    --- Bài cũ hơn ---

  • Java: Bài Tập Phần Abstract Class & Interface
  • Interface Trong Java ” Cafedev.vn
  • Spring Dependency Injection, Di Trong Spring, So Sánh Ci
  • Câu Hỏi Phỏng Vấn Java Spring: Spring Framework, Boot & Mvc
  • Code Ví Dụ Spring Mvc + Spring Jdbc + Maven + Mysql
  • Sự Khác Nhau Giữa Abstract Class Và Interface Trong Java?

    --- Bài mới hơn ---

  • Sự Khác Nhau Giữa Abstract Class Và Interface Trong Java
  • Abstract Class Trong Java Với Ví Dụ Cụ Thể
  • Hiệu Ứng Abstract Là Gì? Định Nghĩa, Đặc Trưng, Quá Trình Phát Triển, Các Loại Abstract
  • Abstract Class Và Interface, Bạn Có Thực Sự Hiểu Chúng ?
  • Abstract Là Gì? Ý Nghĩa Từ Abstract? Phân Biệt Abstract Và Introduction
  • Sự khác nhau giữa Abstract Class và Interface trong Java?

    Đây là một câu hỏi khá thú vị với vị trí junior java developer mà bất kì nhà tuyển dụng- NTD nào cũng đưa ra trong buổi phỏng vấn. Bài viết này, tôi sẽ giải thích chi tiết về sự khác nhau giữa hai khái niệm này.

    Abstract classinterface là một trong những phần core của ngôn ngữ lập trình Java và việc lựa chọn giữa asbtract class và interface trong thiết kế hệ thống là quyết đinh của một người – một team thiết kế hệ thống.

    Và sự khác biệt giữa abstract classinterface được liệt kê như sau:

    1. Abstract class có thể có nhiều method đã được implementation, trong khi interface chỉ define ra những abstract method (không thực hiện implementation).
    2. Abstract class có thể có những contractor, trong khi interface không có bất kỳ một contractor nào.
    3. Abstract class có tất cả tính năng của một java class bình thường, ngoại trừ việc instantiate nó. Interface chỉ được phép khai báo method và public static final constants.
    4. Method của abstract class có thể sử dụng những access modifiers như private, protected, default, public, static nhưng method của interface chỉ sử dụng public và asbtract.
    5. Một subclass chỉ có thể extend duy nhất một abstract class nhưng một class có thể implement nhiều interface.
    6. Những abstract class có thể extend abstract class khác và implement nhiều interface, nhưng một interface chỉ có thể extend nhiều interface.
    7. Có thể thực hiện run một abstract class nếu nó có một main() method, ngược với interface thì không.
    8. Interfaces được sử dụng để define contract cho những class implement, abstract class cũng thực hiện define contract nhưng nó cung cấp một cách thức implementations có săn để subclass sử dụng.
      1. Java không hỗ trợ “multiple class level inheritance”, do đó, mọi class chỉ có thể có một super class. Nhưng một class lại có thể implement nhiều interface. Do vậy, trong hầu hết các trường hợp, interface là một sự lựa chọn đúng đắn cho việc cung cấp base contract cho class hierarchy.
      2. Nếu có nhiều method trong contract, thì bạn nên sử dụng abstract class vì nó cung cấp sẵn implementation cho một vài common method được áp dụng cho tất cả các subclasses.
      3. Nếu contract của bạn thay đổi liên tục thì sử dụng interface có thể gặp những vấn đề bởi vì nó không thể thêm những method trong interface mà không thay đổi ở phía class thực hiện implement nó. Với abstract thì bạn không cần lo lắng điều này, do đó trong tình huống này thì sử dụng abstract là một giải pháp hiệu quả.

      Cách sử dụng hiệu quả nhất?

      Trong thực tế, việc sử dụng cả abstract class và interface là một phương pháp tiếp cận hiệu quả cho việc thiết kế hệ thống. Ví dụ như trong JDK, List là một interface có rất nhiều method, nhưng vẫn có song song một abstract class đó là AbstractList, nó cung cấp những skeletal implementation cho tất cả method của List interface, do đó, mọi subclass có thể extend class này và chỉ implement những method cần thiết.

      Chúng ta nên luôn luôn bắt đầu bằng một interface như một base và define những method mà mọi subclasses nên thực hiện và sau đó nếu có một số method mà chỉ subclass nhất định phải implement, chúng ta có thể extend base interfacec này với các method mới đó. Các subclasses sẽ có tùy chọn để lựa chọn giữa base interface hoặc child interface để thực hiện những yêu cầu của nó. Nếu số lượng method phát triển nên nhiều, ý tưởng mới là sử dụng một abstract class để cung cấp ra bộ skeletal để imlement các child interface và cung cấp sự linh hoạt cho các subclass lựa chọn giữa abstract class hoặc interface.

      Từ JDK 8 trở đi, bạn có thể có nhiều implement method trong nhiều interface. Tức là bạn có thể tạo ra mặc định như những static method trong những interface và cung cấp implementation cho chúng. Điều này sẽ thu hẹp khoảng cách giữa interface và abstract class, và bây giờ, interface là các thực hiện tốt nhất. Để biết thêm chi tiết về điểm thay đổi này trên JDK 8, bạn vui lòng đọc tài liệu JDK 8

      --- Bài cũ hơn ---

    9. Bài 15: Abstract Class Và Interface Trong Java
    10. Tính Trừu Tượng (Abstraction) Trong Java
    11. Class Trừu Tượng(Abstract) Và Phương Thức Trừu Tượng Trong Java ” Cafedev.vn
    12. Object, Class, Abstract Class Và Interface Trong Java
    13. Interface Trong Java Với Ví Dụ Cụ Thể

    Java: Bài Tập Phần Abstract Class & Interface

    --- Bài mới hơn ---

  • Khác Biệt Giữa Abstract Class Và Interface Trong Java
  • Interface Trong Lập Trình Hướng Đối Tượng Java
  • Marker Interface Trong Java Và Một Số Trường Hợp Sử Dụng
  • Khai Báo Interface Trong Java, Hằng Số Với Interface
  • Interface Trong Java Với Ví Dụ Cụ Thể
  • Bài tập 1: HỆ THỐNG QUẢN LÝ SỐ ĐIỆN THOẠI

    1. Tạo một lớp có tên Phone chứa những phương thức trừu tượng sau đây:

    – abstract void insertPhone(String name, String phone)

    – abstract void removePhone(String name)

    – abstract void updatePhone(String name, String newphone)

    – abstract void searchPhone(String name)

    – abstract void sort()

    2. Tạo lớp có tên PhoneBook thừa kế lớp Phone:

    – Tạo một ArrayList tên PhoneList để lưu dữ liệu.

    – Phương thức insertPhone(String name, String phone):

    Nếu tên người dùng (name) chưa có sẵn trong PhoneList thì thêm người dùng cùng số điện thoại (phone) tương ứng vào

    Nếu tên người dùng đã có sẵn thì kiểm tra xem số điện thoại (phone) có khác so với số đã có không, nếu khác thì thêm vào sau số đã có theo dạng như ví dụ sau:

    “0912333333 : 0902345671”

    – Phương thức removePhone(String name):

    Xóa người dùng cùng các số điện thoại của chủ sở hữu có tên (name) tương ứng khỏi PhoneList.

    – Phương thức updatePhone(String name, String newphone):

    Thay số điện thoại cũ bằng số điện thoại (newphone) mới.

    – Phương thức searchPhone(String name):

    Tìm kiếm số điện thoại theo tên người dùng.

    – Phương thức sort():

    Sắp xếp các phần tử trong PhoneList theo tên người dùng.

    3. Tạo lớp ManagePhoneBook chứa phương thức main() để quản lý chương trình theo dạng Menu như sau:

    PHONEBOOK MANAGEMENT SYSTEM 1. Insert Phone 2. Remove Phone 3. Update Phone 4. Search Phone 5. Sort 6. Exit

    Bài tập 2:

    1. Tạo một giao diện (interface) có tên INews bao gồm phương thức void Display().

    2. Tạo một lớp có tên News:

    a. Khai báo các thuộc tính bao gồm: ID (int), Title (String), PublishDate (String), Author (String), Content (String) và AverageRate (float). Tạo các phương thức setter và getter cho từng thuộc tính, riêng AverageRate thì chỉ có getter.

    b. Thực thi giao diện INews.

    c. Phương thức Display() sẽ in ra Title, PublishDate, Author, Content và AverageRate của tin tức ra console.

    d. Khai báo một mảng có tên RateList kiểu int gồm 3 phần tử.

    e. Tạo một phương thức có tên Calculate() để thiết đặt thuộc tính AverageRate ở ý a là trung bình cộng của 3 phần tử của mảng RateList ở ý d.

    3. Tạo một menu lựa chọn gồm các mục sau:

    1. Insert news

    2. View list news

    3. Average rate

    4. Exit

    4. Nếu người dùng chọn 1 từ bàn phím thì:

    a. Tạo một thể hiện của lớp News và nhập giá trị cho các thuộc tính Title, PublishDate, Author, Content sau đó yêu cầu người dùng nhập vào 3 đánh giá để lưu vào RateList.

    b. Tạo một ArrayList (chỉ tạo duy nhất một ArrayList) để lưu thể hiện của lớp News.

    5. Nếu người dùng chọn 2 từ bàn phím thì lấy từng thể hiện trong ArrayList ra và thực thi phương thức Display() tương ứng của từng thể hiện.

    6. Nếu người dùng chọn 3 từ bàn phím thì thực hiện tương tự như mục 5 ở trên nhưng trước khi thực thi phương thức Display() thì cần thực thi phương thức Calculate() để tính đánh giá trung bình.

    7. Trường hợp người dùng chọn 4 thì sẽ thoát khỏi chương trình.

    BÀI TẬP 3: BOOKS MANAGEMENT SYSTEM

    In this exam, you’ll have to create a Books Management system. The system allows input, list, search … books.

    1. Create an interface name IBook contains this method:

    · void Display()

    2. Create a class name Book:

    a. Properties

    · ID (int)

    · Name (String)

    · PublishDate (String)

    · Author (String)

    · Language (String)

    · AveragePrice (float) – Read only property

    b. Implements the IBook interface in step 1

    c. The method Display will print all Name, PublishDate, Author, Language and AveragePrice of the book to the console

    d. Declare an array name PriceList type int has size of 5 elements

    f. Create a method named Calculate to set AveragePrice = average of 5 int elements in PriceList array.

    3. Display a tasks menu to choose:

    1. Insert new book

    2. View list of books

    3. Average Price

    4. Exit

    4. If user type 1 from keyboard then:

    a. Create a new Book instance and input Name, PublishDate, Author, Language and then ask user to enter 5 prices and set to the instance indexer

    – The ID is auto increament ( ID++ )

    5. If user type 2 from keyboard then:

    6. If user type 3 from keyboard then:

    7. While user not chooses Exit (type 4 from keyboard) then go back to the menu step 3 to ask user chooses an option.

    BÀI TẬP 4: MARKS MANAGEMENT SYSTEM

    1. Create an interface name IStudentMark contains these properties and methods:

    Methods:

    void Display()

    2. Create a class name StudentMark:

    a. Properties:

    – FullName (String)

    – ID (int)

    – Class (String)

    – Semester (int)

    – AverageMark (float) – Read only property

    b. Implements the IStudentMark interface in step 1.

    c. The method Display() will print all FullName, ID, Class, Semester, AverageMark.

    d. Declare an array name SubjectMarkList type int has size of 5 elements.

    e. Create a method named AveCal to set AverageMark = average of 5 int elements in SubjectMarkList array.

    3. Display a tasks menu to choose:

    4. If user type 1 from the keyboard then:

    a. Create a new StudentMark instance and input FullName, Class, Semester and then ask users to enter 5 subjectmarks. The ID is auto increament. Note: Use try-catch-finally to ensure data is correct.

    b. Create a ArrayList (create only one ArrayList) to keep the StudentMark instance in step 4a.

    5. If user type 2 from the keyboard then:

    Loop from all studentmark instances in the ArrayList then executes the Display() method from IStudentMark interface.

    6. If user type 3 from the keyboard then:

    Loop from all studentmark instances in the ArrayList then executes the AveCal() method and then executes the Display() method.

    7. While user not chooses Exit (type 4 from the keyboard) then go back to the menu step 3 to ask user chooses an option.

    BÀI TẬP 5: STUDENTS MANAGEMENT SYSTEM

    In this exam, you’ll have to create a Students Management system. The system allows input, list, search students.

    1. Create an interface name IStudent contains these properties and methods:

    Methods:

    void Display()

    2. Create a class name Student:

    a. Properties:

    – FullName (String)

    – ID (int)

    – DateofBirth (String)

    – Native (String)

    – Class (String)

    – PhoneNo (String)

    – Mobile (int)

    b. Implements the IStudent interface in step 1.

    c. The method Display() will print all FullName, ID, DateofBirth, Native, Class, PhoneNo and Mobile of the student to the console.

    3. Display a tasks menu to choose:

    1. Insert new Student 2. View list of Students 3. Search Students 4. Exit

    4. If users type 1 from the keyboard then:

    a. Create a new Student instance and inputs FullName, DateofBirth, Native, Class, PhoneNo, and Mobile. The ID is auto increament (++ID ).

    b. Create a ArrayList (create only one ArrayList only) to keep the Student instance in step 4a.

    5. If users type 2 from the keyboard then:

    Loop from all Student instances in the ArrayList then executes the Display() method from IStudent interface.

    6. If users type 3 from the keyboard then:

    Loop from all instances of Student class in the ArrayList then search students of class that is inputed from the keyboard and then executes the Display() method.

    7. While user does not choose Exit (type 4 from the keyboard) then go back to the menu step 3 to ask user chooses an option.

    LongDT

    --- Bài cũ hơn ---

  • Interface Trong Java ” Cafedev.vn
  • Spring Dependency Injection, Di Trong Spring, So Sánh Ci
  • Câu Hỏi Phỏng Vấn Java Spring: Spring Framework, Boot & Mvc
  • Code Ví Dụ Spring Mvc + Spring Jdbc + Maven + Mysql
  • Hướng Dẫn Upload File Trong Java Spring Mvc
  • Sự Khác Nhau Giữa Abstract Class Và Interface Trong Java

    --- Bài mới hơn ---

  • Abstract Class Trong Java Với Ví Dụ Cụ Thể
  • Hiệu Ứng Abstract Là Gì? Định Nghĩa, Đặc Trưng, Quá Trình Phát Triển, Các Loại Abstract
  • Abstract Class Và Interface, Bạn Có Thực Sự Hiểu Chúng ?
  • Abstract Là Gì? Ý Nghĩa Từ Abstract? Phân Biệt Abstract Và Introduction
  • Nhân Viên Văn Phòng Tiếng Anh Là Gì ? Tìm Hiểu Ngay Nghĩa
  • Ở những bài trước, chúng ta đã biết đến tính trừu tượng, và đi song song đó là abstract class và interface để triển khai tính trừu tượng trong java.

    Chúng ta cùng xem thử nó sẽ khác nhau ở điểm nào qua bảng liệt kê sau

    1

    Abstract class chỉ có thể thừa kế một class hoặc một abstract class khác.

    Interface có thể thừa kế một hoặc nhiều interface khác.

    2

    Abstract class có thể chứa abstract method và method thông thường(method có thân hàm).

    Interface chỉ có abstract method.

    3

    Abstract class có thể chứa protected hoặc public abstract method.

    Interface chỉ có public abstract method.

    4

    Abstract class có thể chứa static, final hoặc static final biến.

    Interface chỉ có public static final biến.

    Abstract class chỉ có thể thừa kế một class hoặc một abstract class khác

    // File Example1.java public class Example1{ public void display1(){ System.out.println("method ex1"); } } // File Example2.java // Abstract class thừa kế concrete class public abstract class Example2 extends Example1{ abstract void display2(); } // File Example3.java // Abstract class thừa kế abstract class public class Example3 extends Example2{ public void display3(){ System.out.println("method ex3"); } } // File Main.java public class Main{ public static void main(String args){ Example4 obj=new Example4(); obj.display1(); obj.display2(); } }

    Output:

    method ex1

    method ex2

    Abstract class có thể chứa abstract method và method thông thường(method có thân hàm)

    // File Example1.java public abstract class Example1 { abstract void display1(); public void display2(){ System.out.println("method" ex2); } } // File Example2.java public class Example2 extends Example1{ public void display1(){ System.out.println("method ex1"); } } // File Main.java public class Main { public static void main(String args){ Example2 obj=new Example2(); obj.display(); } }

    Output: display

    Abstract class có thể chứa protected hoặc public abstract method

    // File Example1.java public abstract class Example1{ protected abstract void display1(); public abstract void display2(); public abstract void display3(); } // File Example2.java class Example2 extends Example1{ public void display1(){ System.out.println("method ex1"); } public void display2(){ System.out.println("method ex2"); } public void display3(){ System.out.println("method ex3"); } } // File Main.java public class Main{ public static void main(String args){ Example2 obj=new Example2(); obj.display1(); obj.display2(); } }

    Output:

    method ex1

    method ex2

    Abstract class có thể chứa static, final hoặc static final biến

    // File Example1.java public abstract class Example1{ private int num_1 = 1; protected final int num_2 = 2; public static final int num_ 3 = 3; public void display1(){ System.out.println("Num1="+num_1); } } // File Example2.java public Example2 extends Example1{ public void display2(){ System.out.println("Num2="+num_2); System.out.println("Num3="+num_3); } } // File Main.java public class Main{ public static void main(String args){ Example2 obj=new Example2(); obj.display1(); } }

    Output: 10

    Note:

    Interface thường được dùng để mô tả một tập các chức năng. Một class thừa kế một interface A, ta nói rằng class đó có thể thực hiện các năng của interface A khai báo, mà chưa cần xem code.

    Ví dụ: Chúng ta có Mail là một interface và MailImpl implements Mail

    public class MailImpl implements Mail

    Chúng ta sẽ hiểu rằng class MailImpl sẽ có thể thực hiện được các chứng năng mà Mail khai báo.

    Abstract class thường được dùng trong mối quan hệ thừa kế, vì tính linh hoạt của nó có thể chứa abstract method và method thông thường. Dựa vào đó mà chúng ta có thể định nghĩa các khuôn mẫu hay triển khai những thuộc tính, method mà các class con có thể dùng chung.

    --- Bài cũ hơn ---

  • Sự Khác Nhau Giữa Abstract Class Và Interface Trong Java?
  • Bài 15: Abstract Class Và Interface Trong Java
  • Tính Trừu Tượng (Abstraction) Trong Java
  • Class Trừu Tượng(Abstract) Và Phương Thức Trừu Tượng Trong Java ” Cafedev.vn
  • Object, Class, Abstract Class Và Interface Trong Java
  • Abstract Class (Lớp Trừu Tượng) Là Gì? Abstract Method (Phương Thức Trừu Tượng) Trong Là Gì? Các Ví Dụ Minh Họa Trong Java.

    --- Bài mới hơn ---

  • Phân Biệt Lương Gross Và Net Để Hr Không “Qua Mặt”
  • Lotion Là Gì? Công Dụng Và Cách Sử Dụng Hiệu Quả
  • Lotion Là Gì? Công Dụng Và Cách Sử Dụng Lotion Như Thế Nào?
  • Logistics Là Gì? Các Vị Trí Công Việc Trong Ngành Logistics
  • Môi Trường Là Gì? Những Biện Pháp Nào Giúp Bảo Vệ Môi Trường Hiệu Quả
  • Trong bài viết này chúng ta sẽ đi tìm hiểu về Abstract Class và Abstract Method trong Java, cách sử dụng và các ví dụ minh họa.

    1. Lớp trừu tượng (Abstract Class) trong Java

    – Một lớp được khai báo với từ khóa abstract là lớp trừu tượng (abstract class).

    – Lớp trừu tượng có thể có các phương thức abstract hoặc non-abstract.

    – Lớp trừu tượng có thể khai báo 0, 1 hoặc nhiều method trừu tượng bên trong.

    – Không thể khởi tạo 1 đối tượng trực tiếp từ một lớp trừu tượng.

    Một lớp kế thừa từ lớp trừu tượng (subclass – lớp con) không cần phải implement non-abstract methods, nhưng những phương thức abstract trong lớp cha thì lớp con bắt buộc phải override. Trừ khi subclass cũng là abstract.

    Cú pháp:

    }

    2. Phương thức trừu tượng trong Java

    • Một phương thức được khai báo là abstract và không có trình triển khai thì đó là phương thức trừu tượng (abstract method).

    • Nếu bạn muốn một lớp chứa một phương thức cụ thể nhưng bạn muốn triển khai thực sự phương thức đó để được quyết định bởi các lớp con, thì bạn có thể khai báo phương thức đó trong lớp cha ở dạng abstract.

    • Từ khóa abstract được sử dụng để khai báo một phương thức dạng abstract. Phương thức abstract sẽ không có định nghĩa, được theo sau bởi dấu chấm phẩy, không có dấu ngoặc nhọn theo sau.

    Cú pháp:

    3. Ví dụ về lớp trừu tượng và phương thức trừu tượng

    Ví dụ: Viết chương trình vẽ một hình bất kỳ với màu đỏ, sao cho cách sử dụng là giống nhau, bất kể đó là hình gì. Hình đó có thể là hình chữ nhật (rectangle), hình tròn (circle), tam giác (triangle), đường (line), …

    Với yêu cầu trên, ta tạo một lớp trừu tượng Shape. Lớp này cung cấp một phương thức trừu tượng draw, phương thức này để đảm bảo rằng tất cả các hình đều có cùng cách sử dụng (draw). Ngoài ra, có phương thức không trừu tượng getColor để cung cấp màu sử dụng chung cho tất cả các hình. Tiếp theo, ta tạo 2 lớp Rectangle và Circle kế thừa từ lớp Shape, 2 lớp này có những cách xử lý draw khác nhau. Cuối cùng, ta tạo class ShapeApp, gọi phương thức draw để vẽ hình theo yêu cầu.

    Shape.java

    public abstract class Shape { private String color = "red"; public Shape() { } public abstract void draw(); public String getColor() { return color; } }

    Rectangle.java

    public class Rectangle extends Shape { @Override public void draw() { System.out.println("Draw " + super.getColor() + " rectangle"); } }

    Circle.java

    public class Circle extends Shape { @Override public void draw() { System.out.println("Draw " + super.getColor() + " circle"); } }

    ShapeApp.java

    public class ShapeApp { public static void main(String[] args) { Shape rect = new Rectangle(); rect.draw(); Shape circle = new Circle(); circle.draw(); } }

    Kết quả:

    Draw red rectangle --- Draw red circle

    4. Một vài lưu ý

    Lớp con bắt buộc phải cài đặt (implement) tất cả các phương thức trừu tượng của lớp cha

    Bạn nhận được thông báo lỗi nếu lớp con không cài đặt (implement) tất cả các phương thức trừu tượng của lớp cha: The type Triangle must implement the inherited abstract method Shape.draw().

    Không thể khởi tạo trực tiếp một lớp trừu tượng

    Bạn nhận được thông báo lỗi khi cố tình khởi tạo một lớp trừu tượng: Cannot instantiate the type Shape.

    --- Bài cũ hơn ---

  • Interface Là Gì? Interface Khác Gì Class? Đa Kế Thừa Trong Java Sử Dụng Interface Như Thế Nào? Ví Dụ Minh Họa
  • Bạn Đã Hiểu Đúng? Nếu Chưa, Mời Đọc Ngay
  • Spring Là Gì ? Ưu Điểm Của Spring Framework ?
  • What Is Hamon (Jojo’s Bizarre Adventure)
  • Từ Khoá Static(Tĩnh) Trong Java
  • So Sánh Abstract Class Và Interface Trong Java. Ví Dụ Minh Họa.

    --- Bài mới hơn ---

  • Công Thụ Là Gì? Những Điều Thú Vị Về Danh Xưng Đến Từ Truyện Đam Mỹ
  • Nhân Nghĩa Lễ Trí Tín
  • Văn Hóa Là Gì ? Khái Niệm Và Ý Nghĩa Về Văn Hóa
  • Sân Si Là Gì? Những Ý Nghĩa Của Sân Si
  • Tham Sân Si Là Gì? Làm Gì Khi Tham Sân Si Dấy Lên?
  • Trong bài viết này, chúng ta sẽ so sánh Abstract Class với Interface trong Java và các ví dụ minh họa

    1. Tìm hiểu về Abstract Class:

    Bấm vào đây để tìm hiểu về Abstract Class

    2. Tìm hiểu Interface

    Bấm vào đây để tìm hiểu Interface

    3. So sánh Abstract Class vs Interface

    Lớp trừu tượng (abstract class)

    Interface

    Thể hiện tính trừu tượng < 100%

    Thể hiện tính trừu tượng 100% (Java < 8).

    Lớp trừu tượng có thể có các phương thức abstract và non-abstract

    Phiên bản Java < 8, Interface chỉ có thể có phương thức abstract.

    Phiên bản Java 8, có thể thêm default  static methods.

    Phiên bản Java 9, có thể thêm private methods.

    Lớp trừu tượng không hỗ trợ đa kế thừa

    Interface hỗ trợ đa kế thừa

    Lớp trừu tượng có thể có các biến final, non-final, static và non-static

    Interface chỉ có các biến static final

    Lớp trừu tượng có thể có phương thức static, phương thức main và constructor

    Interface không thể có phương thức static, main hoặc constructor

    Từ khóa abstract được sử dụng để khai báo lớp trừu tượng

    Từ khóa interface được sử dụng để khai báo Interface

    Lớp trừu tượng có thể cung cấp trình triển khai của Interface

    Interface không cung cấp trình triển khai cụ thể của lớp abstract

    Sử dụng Abstract class khi chúng ta chỉ có thể hoàn thành một vài chức năng (method/ function) chuẩn của hệ thống, một vài chức năng còn lại các lớp extends phải hoàn thành. Những tính năng đã hoàn thành này vẫn sử dụng như bình thường, đây là những tính năng chung.

    Sử dụng Interface khi bạn muốn tạo dựng một bộ khung chuẩn gồm các chức năng (method/ function) mà tất cả module/ project cần phải có. Các module phải implements tất cả chức năng đã được định nghĩa.

    Ví dụ:

    public abstract class Shape {

    public abstract void draw();

    }

    Ví dụ:

    public interface Drawable {

    void draw();

    }

    Nói về Abtract Class và Interface, đôi khi bạn sẽ gặp một số cách gọi: Khi một class extend một class/ abtract class thì có nghĩa là ta đang thể hiện mối quan hệ is-a (là), còn khi implement một interface, thì ta đang thể hiện mối quan hệ has-a (có, hay thực hiện).

    Ví dụ:

    // Programmer là Person, thực hiện việc Programming, Debugging class Programmer extends Person implements Programming, Debugging {} // Rectangle là Shape, có Width, Height class Rectangle extends Shape implements Width, Height {}

    --- Bài cũ hơn ---

  • Class Trừu Tượng(Abstract) Và Phương Thức Trừu Tượng Trong Java
  • 「Spring」Hướng Dẫn Lập Trình Spring Căn Bản Cho Người Mới
  • Spring Core – Phần 1: Spring Ioc , Inversion Of Control Trong Spring
  • Spring Mvc – Phần 1: Kiến Trúc Của Spring Mvc, Flow Trong Spring Mvc
  • Mengenal Konsep Hamon Pada Jojo’s Bizarre Adventure
  • Web hay
  • Links hay
  • Guest-posts
  • Push
  • Chủ đề top 10
  • Chủ đề top 20
  • Chủ đề top 30
  • Chủ đề top 40
  • Chủ đề top 50
  • Chủ đề top 60
  • Chủ đề top 70
  • Chủ đề top 80
  • Chủ đề top 90
  • Chủ đề top 100
  • Bài viết top 10
  • Bài viết top 20
  • Bài viết top 30
  • Bài viết top 40
  • Bài viết top 50
  • Bài viết top 60
  • Bài viết top 70
  • Bài viết top 80
  • Bài viết top 90
  • Bài viết top 100
  • Chủ đề top 10
  • Chủ đề top 20
  • Chủ đề top 30
  • Chủ đề top 40
  • Chủ đề top 50
  • Chủ đề top 60
  • Chủ đề top 70
  • Chủ đề top 80
  • Chủ đề top 90
  • Chủ đề top 100
  • Bài viết top 10
  • Bài viết top 20
  • Bài viết top 30
  • Bài viết top 40
  • Bài viết top 50
  • Bài viết top 60
  • Bài viết top 70
  • Bài viết top 80
  • Bài viết top 90
  • Bài viết top 100