Bai 07 Một số kĩ thuật trong kế thừa

17 11 0
Bai 07   Một số kĩ thuật trong kế thừa

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bai 07 Mot so ky thuat trong ke thua 1 Bài 7 Một số kỹ thuật trong kế thừa 1 1 Mục tiêu v Trình bày nguyên lý định nghĩa lại trong kế thừa v Phân biệt khái niệm đơn kế thừa và đa kế thừa v Giới thiệu.

Mục tiêu v Trình bày nguyên lý định nghĩa lại kế thừa v Phân biệt khái niệm đơn kế thừa đa kế thừa v Giới thiệu giao diện, lớp trừu tượng vai trò chúng v Ví dụ tập vấn đề với ngơn ngữ lập trình Java Bài 7: Một số kỹ thuật kế thừa 2 Nội dung Nội dung Định nghĩa lại/ghi đè (Overriding) Lớp trừu tượng Đơn kế thừa & Đa kế thừa Giao diện (Interface) Vai trò lớp trừu tượng giao diện Ví dụ tập 3 Định nghĩa lại/ghi đè (Overriding) Lớp trừu tượng Đơn kế thừa & Đa kế thừa Giao diện (Interface) Vai trò lớp trừu tượng giao diện Ví dụ tập 4 1 Định nghĩa lại/ghi đè (Overriding) Định nghĩa lại/ghi đè (Overriding) v Quan hệ kế thừa (inheritance) v Phương thức ghi đè thay làm rõ cho phương thức tên lớp cha v Đối tượng lớp hoạt động với phương thức phù hợp với § Lớp loại (is-a-kind-of) lớp cha § Kế thừa thành phần liệu hành vi lớp cha § Chi Cết hóa cho phù hợp với mục đích sử dụng mới: • Mở rộng lớp cha (Extension): Thêm thuộc Dnh/hành vi • Định nghĩa lại (RedefiniOon): Chỉnh sửa lại hành vi kế thừa từ lớp cha Ghi đè (Method Overriding) Shape # name: String + getName(): String + calculateArea(): double 3.14 * radius * radius side * side Square Circle - side: double - radius: double + calculateArea(): double + calculateArea(): double 5 6 Định nghĩa lại/ghi đè (Overriding) Ví dụ (1) v Cú pháp: Phương thức lớp hoàn toàn giống chữ ký với phương thức kế thừa lớp cha class Shape { protected String name; Shape(String n) { name = n; } public String getName() { return name; } public double calculateArea() { return 0.0; } } § Trùng tên & danh sách tham số § Mục đích: Để thể chất cơng việc v Lớp định nghĩa phương thức trùng tên với phương thức lớp cha: Nếu phương thức trùng tên khác chữ ký (số lượng hay kiểu liệu đối số) Chồng phương thức (Method Overloading) class Circle extends Shape { private double radius; Circle(String n, double r){ super(n); radius = r; } Nếu phương thức hoàn toàn giống giao diện (chữ ký) Định nghĩa lại ghi đè phương thức (Method Override) public double calculateArea() { double area = (double) (3.14 * radius * radius); return area; } 7 } 8 Ví dụ (2) Thêm lớp Triangle class Square extends Shape { class Triangle extends Shape { private double base, height; private double side; Triangle(String n, double b, double h) { super(n); base = b; Muốn gọi lại phương thức height = h; lớp cha bị ghi đè ? } Square(String n, double s) { super(n); side = s; } public double calculateArea() { public double calculateArea() { double area = 0.5f * base * height; return area; } double area = (double) side * side; return area; } } } 9 10 10 Ví dụ sử dụng từ khóa super Sử dụng từ khóa super v Từ khóa super: tái sử dụng đoạn mã lớp cha lớp v Gọi phương thức khởi tạo public class Person { protected String name; protected int age; public String getDetail() { String s = this.name + "," + this.age; return s; } § super(danh sách tham số); v Bắt buộc lớp cha khơng có phương thức khởi tạo mặc định v Gọi phương thức lớp cha } § super.tên_Phương_thức(danh sách tham số); public class Employee extends Person { double salary; public String getDetail() { String s = super.getDetail() + "," + this.salary; return s; } } 11 11 12 12 Quy định ghi đè Ví dụ class Parent { public void doSomething() {} protected int doSomething2() { return 0; cannot override: attempting to use } incompatible return type } class Child extends Parent { protected void doSomething() {} protected void doSomething2() {} } v Phương thức ghi đè lớp phải § Có danh sách tham số giống hệt phương thức kế thừa lớp cha § Có kiểu trả với phương thức kế thừa lớp cha § Có định truy cập khơng giới hạn chặt phương thức lớp cha Ví dụ, ghi đè phương thức protected, phương thức protected public, mà không private cannot override: attempting to assign weaker access privileges; was public 14 13 13 14 Quy định ghi đè Hạn chế ghi đè – Từ khố final v Khơng phép ghi đè: v Đôi lúc ta muốn hạn chế việc định nghĩa lại lý sau: § Các phương thức staCc lớp cha § Các phương thức private lớp cha § Các phương thức (final) lớp cha § Tính đắn: Định nghĩa lại phương thức lớp dẫn xuất làm sai lạc ý nghĩa § Tính hiệu quả: Cơ chế kết nối động không hiệu mặt thời gian kết nối wnh v Nếu biết trước không định nghĩa lại phương thức lớp sở nên dùng từ khóa final với phương thức Ví dụ: public final String baseName () { return “Person”; } 15 15 16 16 Hạn chế ghi đè – Từ khoá final Hạn chế ghi đè – Từ khoá final v Các phương thức khai báo final khơng thể ghi đè v Từ khóa final dùng khai báo lớp: § Lớp khai báo lớp (không thay đổi), lớp lớp thừa kế § Được sử dụng để hạn chế việc thừa kế ngăn chặn việc sửa đổi lớp class A { final void method(){ } } class B extends A{ void method(){ // Báo lỗi!!! } } public final class A { // } 17 17 18 18 this super Bài tập v this super sử dụng cho phương thức/thuộc tính non-static phương thức khởi tạo v Cho đoạn mã đây: § this: tìm kiếm phương thức/thuộc tính lớp § super: tìm kiếm phương thức/thuộc tính lớp cha trực tiếp v Từ khóa super cho phép tái sử dụng đoạn mã lớp cha lớp v Lựa chọn chèn dòng 7? 19 19 class BaseClass { private float x = 1.0f; float getVar() { return x; } } class SubClass extends BaseClass { private float x = 2.0f; // insert code here } public double getVar() { return x; } public float getVar(float f){ return f; } float getVar() { return x; } public float getVar() { return x; } private float getVar() { return x; } 20 20 Bài tập Nội dung v Cho đoạn mã đây: class Super { public String getName() { return “Super”; } } class Sub extends Super { } v Lựa chọn đặt vào dòng đoạn mã gây lỗi biên dịch? public public public public Định nghĩa lại/ghi đè (Overriding) Lớp trừu tượng Đơn kế thừa & Đa kế thừa Giao diện (Interface) Vai trò lớp trừu tượng giao diện Ví dụ tập String getTen () { } void getName(String str) { } String getName() {return “Sub”; } void getName() {} 22 21 21 22 Lớp trừu tượng Lớp trừu tượng v Các ngôn ngữ lập trình hướng đối tượng cung cấp chế kiểu trừu tượng (abstract type) v Đặc điểm lớp trừu tượng § Khơng thể tạo đối tượng trực Cếp từ lớp trừu tượng § Thường lớp trừu tượng dùng để định nghĩa "khái niệm chung", đóng vai trò làm lớp sở (base class) cho lớp "cụ thể" khác (concrete class) § Chưa đầy đủ, thường sử dụng làm lớp cha Lớp kế thừa hồn thiện nốt § Các kiểu trừu tượng có cài đặt khơng đầy đủ khơng có cài đặt § Nhiệm vụ chúng giữ vai trò kiểu tổng quát số kiểu khác v Xét ví dụ: lớp Shape § Là lớp "khơng rõ ràng", khó hình dung đối tượng cụ thể • Lớp trừu tượng thường chứa phương thức trừu tượng (phương thức không cài đặt) • Khơng thể thể hóa (instanOate – tạo đối tượng lớp) trực tiếp 23 23 24 24 Lớp trừu tượng Từ khoá abstract v Phương thức trừu tượng v Lớp trừu tượng § Là phương thức “khơng rõ ràng” / chưa hồn thiện, khó đưa cách cài đặt cụ thể § Chỉ có chữ ký mà khơng có cài đặt cụ thể § Các lớp dẫn xuất làm rõ - định nghĩa lại (overriding) phương thức trừu tượng § Khai báo với từ khóa abstract public abstract class Shape { // Nội dung lớp } v Phương thức trừu tượng § Khai báo với từ khóa abstract public abstract float calculateArea(); Shape = new Shape(); //Compile error 25 25 26 26 Ví dụ Lớp trừu tượng Lớp trừu tượng abstract class Shape { protected String name; Shape(String n) { name = n; } public String getName() { return name; } public abstract double calculateArea(); } class Circle extends Shape { private double radius; Circle(String n, double r){ super(n); radius = r; } v Nếu lớp có hay nhiều phương thức trừu tượng phải lớp trừu tượng v Lớp kế thừa phải cài đặt cụ thể cho phương thức trừu tượng lớp cha } § Nếu khơng ghi đè phương thức lớp trở thành lớp trừu tượng Phương thức trừu tượng khai báo final staCc public double calculateArea() { double area = (double) (3.14 * radius * radius); return area; } Lớp bắt buộc phải override tất phương thức abstract lớp cha Kết hợp cho phép abstract public abstract protected 27 27 Kết hợp KHÔNG cho phép abstract private abstract static abstract final 28 28 Ví dụ lớp trừu tượng Ví dụ Lớp trừu tượng abstract class ColoredPoint extends Point { int color; public ColoredPoint(int x, int y, int color) { super(x, y); this.color = color; } } abstract class Point { private int x, y; public Point(int x, int y) { this.x = x; this.y = y; } public void move(int dx, int dy) { x += dx; y += dy; plot(); } public abstract void plot(); // phương thức trừu tượng // phần code thực } class SimpleColoredPoint extends ColoredPoint { public SimpleColoredPoint(int x, int y, int color) { super(x, y, color); } @Override public void plot() { } // code to plot a SimplePoint } 29 29 30 30 Lớp trừu tượng Bài tập v Biểu diễn UML v Đoạn mã có lỗi khơng? abstract class ABC { void firstMethod() { System.out.println("First Method"); } void secondMethod() { System.out.println("Second Method"); } } § Lớp trừu tượng (khơng thể tạo đối tượng cụ thể) • Chứa phương thức trừu tượng • Tên lớp / tên phương thức: Chữ nghiêng Lớp trừu tượng Animal Phương thức trừu tượng + communicate () v Lớp lớp trừu tượng, lớp tạo đối tượng? Lion + communicate () abstract class A { Tiger } class B extends A { + communicate () Tất đối tượng sư tử hổ 31 31 32 32 Nội dung Đơn kế thừa & Đa kế thừa Định nghĩa lại/ghi đè (Overriding) Lớp trừu tượng Đơn kế thừa & Đa kế thừa Giao diện (Interface) Vai trị lớp trừu tượng giao diện Ví dụ tập v Giả sử toán lớp đối tượng Hình học, lớp Square cần thiết kế bổ sung thêm hành vi Fill (tô màu), Move (di chuyển) mà có đối tượng sử dụng § Giải pháp 1: thêm hành vi vào lớp cha Shape ảnh hướng đến đối tượng lớp Circle Triangle (các đối tượng không sử dụng đến hành vi trên) § Giải pháp 2: đặt hành vi trực tiếp lớp Square tương lai có thêm lớp Hình thang sử dụng hành vi cần phải cài đặt lại, không tái sử dụng Action Tách hành vi thành lớp cha riêng, cho lớp Square kế thừa HAI lớp cha thừa kế? + fill() Shape + move() Square Circle Triangle 34 33 33 34 Đơn kế thừa & Đa kế thừa Đơn kế thừa & Đa kế thừa v Đa kế thừa (Mul€ple Inheritance) v Vấn đề gặp phải đa kế thừa § Một lớp kế thừa nhiều lớp cha trực Cếp § C++ hỗ trợ đa kế thừa A B C ■ D v Đơn kế thừa (Single Inheritance) § Một lớp kế thừa từ lớp cha trực Cếp § Java hỗ trợ đơn kế thừa § Đưa thêm khái niệm Giao diện (Interface) A Name collision Animal FlyingThing + color + getColor () + color + getColor () Bird E F ■ "Diamond shape" problem SomeClass Animal FlyingThing + color + getColor () + color + getColor () Bird D 35 35 36 36 Nội dung Giao diện Định nghĩa lại/ghi đè (Overriding) Lớp trừu tượng Đơn kế thừa & Đa kế thừa Giao diện (Interface) Vai trò lớp trừu tượng giao diện Ví dụ tập v Giao diện (interface) § Là kiểu liệu trừu tượng, dùng để đặc tả hành vi mà lớp phải thực thi § Tương tự giao thức (protocols) § Chứa chữ ký phương thức (Mọi phương thức phương thức trừu tượng) § Giải toán đa thừa kế, tránh rắc rối nhập nhằng ngữ nghĩa v Giao diện Java § Một cấu trúc lập trình Java định nghĩa với từ khóa interface § Từ Java 8: có thêm phương thức default, staCc Từ Java 9, có thêm phương thức private private staCc 37 37 38 38 Giao diện Giao diện v Sử dụng từ khóa interface để định nghĩa v Lớp thực thi giao diện § Một giao diện bao gồm: § Hoặc lớp trừu tượng (abstract class) § Hoặc bắt buộc phải cài đặt chi Cết toàn phương thức giao diện lớp cụ thể • Chữ ký phương thức (method signature) • Các thuộc Dnh khai báo (staOc & final) § Khơng § Chỉ thực thi mở rộng v Một lớp thực thi nhiều giao diện [extends ] implements v Cú pháp khai báo giao diện Java v Ví dụ: interface { } extends { } public class HinhVuong extends TuGiac implements DoiXung, DiChuyen { } v Ví dụ public interface DoiXung {…} public interface Can extends DoiXung {…} public interface DiChuyen {…} 39 39 40 40 10 Action Shape Ví dụ giao diện #x: int #y: int #name: String +getName():String +calculateArea():float +moveTo(Graphics,int, int):void +fill(Graphics): void extends import java.awt.Graphics; abstract class Shape { protected String name; protected int x, y; Shape(String n, int x, int y) { name = n; this.x = x; this.y = y; } public String getName() { return name; } public abstract float calculateArea(); } extends Circle -radius: float +calculateArea():float +moveTo(Graphics,int, int):void +fill(Graphics):void Shape Actable #name: String #x:int #y:int interface Actable { public void moveTo(Graphics g, int x1, int y1); public void fill(Graphics g); } +moveTo(Graphics,int, int):void +fill(Graphics):void +getName():String +calculateArea():float implements extends Circle -radius:float +calculateArea():float +moveTo(Graphics,int,int):void +fill(Graphics):void 41 41 42 42 class Circle extends Shape implements Actable { private int radius; public Circle(String n, int x, int y, int r) { super(n, x, y); radius = r; } public float calculateArea() { float area = (float) (3.14 * radius * radius); return area; } public void draw(Graphics g) { System.out.println("Draw circle at (" + x + “," + y + ")"); g.drawOval(x-radius,y-radius,2*radius,2*radius); } public void moveTo(Graphics g, int x1, int y1) { x = x1; y = y1; draw(g); } public void fill(Graphics g) { System.out.println(“Fill circle at (" + x + “," + y + ")"); // paint the region with color } } Giao diện v Giao diện sử dụng kiểu liệu v Các đối tượng gán cho biến tham chiếu giao diện phải thuộc lớp thực thi giao diện v Ví dụ: public interface I {} public class A implements I {} public class B {} A a = new A(); B b = new B(); I i1 = new A(); // ok I i2 = new B(); // lỗi 43 43 44 44 11 Giao diện Giao diện v Một interface coi dạng “class” mà: v Góc nhìn quan niệm § Interface khơng cài đặt phương thức để lại cấu trúc thiết kế lớp sử dụng § Một interface: contract – nhóm phát triển phần mềm thống sản phẩm họ tương tác với nào, mà khơng địi hỏi tri thức cách thức cài đặt chi Cết § Interface: đặc tả cho cài đặt (implementaCon) khác § Phân chia ranh giới: § Phương thức thuộc ‘nh public khơng tường minh § Các thuộc ‘nh staCc final § Các phương thức abstract v Khơng thể thể hóa (instan€ate) trực €ếp • Cái (What) (How) • Đặc tả Cài đặt cụ thể 45 45 46 46 Giao diện Giao diện Lớp trừu trượng v Cần có phương thức abstract, chứa phương thức instance v Có thể chứa phương thức protected và sta?c v Có thể chứa thuộc Anh final và non-final v Một lớp kế thừa lớp trừu tượng v Nhược điểm Giao diện § Không cung cấp cách tự nhiên cho —nh khơng có đụng độ kế thừa xảy § Kế thừa nhằm tăng tái sử dụng mã nguồn giao diện không làm điều v Chỉ chứa chữ ký phương thức (danh sách phương thức) v Chỉ chứa phương thức public mà khơng có mã nguồn v Chỉ chứa thuộc Anh v Một lớp thực thi (kế thừa) nhiều giao diện 47 47 48 48 12 Bài tập Nội dung v Khai báo hợp lệ interface? a.public static int answer = 42; b.int answer; c.final static int answer = 42; d.public int answer = 42; e.private final static int answer = 42; v Một lớp kế thừa thân khơng? v Chuyện xảy lớp cha lớp có thuộc ‘nh trùng tên? v Phát biểu “Các phương thức khởi tạo thừa kế xuống lớp con” hay sai? v Có thể xây dựng phương thức khởi tạo cho lớp trừu tượng không? v Có thể khai báo phương thức protected giao diện không? Định nghĩa lại/ghi đè (Overriding) Lớp trừu tượng Đơn kế thừa & Đa kế thừa Giao diện (Interface) Vai trò lớp trừu tượng giao diện Ví dụ tập 50 49 49 50 Lớp trừu tượng & Giao diện Lớp trừu tượng & Giao diện v Khi nên cho lớp lớp độc lập, lớp con, lớp trừu tượng, hay nên biến thành interface? v Khi nên cho lớp lớp độc lập, lớp con, lớp trừu tượng, hay nên biến thành interface? § Một lớp nên lớp độc lập, nghĩa khơng thừa kế lớp (ngoại trừ Object) khơng thỏa mãn quan hệ IS-A loại khác § Một lớp nên lớp cần cho làm phiên chuyên biệt lớp khác cần ghi đè hành vi có sẵn bổ sung hành vi § Một lớp nên lớp cha muốn định nghĩa khn mẫu cho nhóm lớp con, có mã cài đặt mà tất lớp sử dụng • Cho lớp làm lớp trừu tượng muốn đảm bảo không tạo đối tượng thuộc lớp § Dùng interface muốn định nghĩa vai trò mà lớp khác nhận, lớp thuộc thừa kế 51 51 52 52 13 Mở rộng Ví dụ Java Interface – default methods v Khái niệm giao diện phiên Java h†ps://gpcoder.com/3854-interface-trong-java-8default-method-va-sta€c-method/ JAVA • • Chữ ký phương thức (method signature) Các thuộc tính khai báo (static & final) JAVA • • • • Chữ ký phương thức (method signature) Các thuộc tính khai báo (static & final) Phương thức mặc định (default method) Phương thức tĩnh (Static method) JAVA • • • • • Chữ ký phương thức (method signature) Các thuộc tính khai báo (static & final) Phương thức mặc định (default method) Phương thức tĩnh (Static method) Private methods public interface Shape { void draw(); default void setColor(String color) { System.out.println("Draw shape with color " + color); } } 54 53 53 54 Đa thừa kế Đa thừa kế interface Interface1 { default void doSomething() { System.out.println("doSomething1"); } } interface Interface3 { default void doSomething() { System.out.println("Execute in Interface3"); } } interface Interface2 { default void doSomething() { System.out.println("doSomething2"); } } class Parent { public void doSomething() { System.out.println("Execute in Parent"); } } public class MultiInheritance implements Interface1, Interface2 { @Override public void doSomething() { Interface1.super.doSomething(); } } public class MultiInheritance2 extends Parent implements Interface3 { public static void main(String[] args) { MultiInheritance2 m = new MultiInheritance2(); m.doSomething(); // Execute in Parent } } 55 55 56 56 14 Ví dụ Java interface – Static methods Ví dụ với static method interface Vehicle { default void print() { if (isValid()) System.out.println("Vehicle printed"); } static boolean isValid() { System.out.println("Vehicle is valid"); return true; } void showLog(); } interface Interface3 { default void doSomething() { System.out.println("Execute in Interface3"); } } abstract class Parent { public void doSomething() { System.out.println("Execute in Parent"); } public static void test() { System.out.println("test"); } } public class Car implements Vehicle { @Override public void showLog() { print(); Vehicle.isValid(); } } public class MultiInheritance2 extends Parent implements Interface3 { public static void main(String[] args) { MultiInheritance2 m = new MultiInheritance2(); m.doSomething(); // Execute in Parent } } m.test(); // OK 58 57 57 58 Ví dụ với static method Ví dụ với static method interface Interface3 { default void doSomething() { System.out.println("Execute in Interface3"); } interface Interface3 { default void doSomething() { System.out.println("Execute in Interface3"); } } } abstract class Parent { public void doSomething() { System.out.println("Execute in Parent"); } public static void test() { System.out.println("test"); } } abstract class Parent { public void doSomething() { System.out.println("Execute in Parent"); } public static void test() { System.out.println("test"); } } public class MultiInheritance2 extends Parent implements Interface3 { public static void main(String[] args) { MultiInheritance2 m = new MultiInheritance2(); public class MultiInheritance2 extends Parent implements Interface3 { public static void main(String[] args) { MultiInheritance2 m = new MultiInheritance2(); } } m.test(); // OK } 59 59 } MultiInheritance2.test(); // OK 60 60 15 Ví dụ với static method Ví dụ với static method interface Interface3 { default void doSomething() { System.out.println("Execute in Interface3"); } public static void test() { System.out.println("test"); } } interface Interface3 { default void doSomething() { System.out.println("Execute in Interface3"); } public static void test() { System.out.println("test"); } } abstract class Parent { public void doSomething() { System.out.println("Execute in Parent"); } } abstract class Parent { public void doSomething() { System.out.println("Execute in Parent"); } } public class MultiInheritance2 extends Parent implements Interface3 { public static void main(String[] args) { MultiInheritance2 m = new MultiInheritance2(); public class MultiInheritance2 extends Parent implements Interface3 { public static void main(String[] args) { MultiInheritance2 m = new MultiInheritance2(); } } m.test(); // ERROR!!! } } MultiInheritance2.test(); // ERROR!!! 61 62 61 62 Tổng kết Nội dung v Ghi đè § Các phương thức lớp có chữ ký danh sách tham số với phương thức lớp cha, tạo để định nghĩa lại hành vi lớp v Lớp trừu tượng § Các lớp khơng khởi tạo đối tượng, tạo làm lớp sở cho lớp định nghĩa rõ § Có phương thức trừu tượng Định nghĩa lại/ghi đè (Overriding) Lớp trừu tượng Đơn kế thừa & Đa kế thừa Giao diện (Interface) Vai trò lớp trừu tượng giao diện Ví dụ tập v Giao diện § Định nghĩa phương thức mà lớp thực thi phải cài đặt § Giải vấn đề đa kế thừa 64 63 63 64 16 Bài tập v Sửa lại lớp NhanVien: § thuộc ‘nh khơng NhanVien kế thừa lại cho lớp TruongPhong v Viết mã nguồn lớp TruongPhong hình vẽ § Viết phương thức khởi tạo cần thiết để khởi tạo thuộc ‘nh lớp TruongPhong § Lương trưởng phòng = Lương Cơ * hệ số lương + phụ cấp Bài tập NhanVien #tenNhanVien:String #heSoLuong:double +LUONG_CO_BAN:double=750.000 +LUONG_MAX:double=20.000.000 +tangLuong(double):boolean +tinhLuong():double +inTTin() TruongPhong -phuCap:double -soNamDuongChuc:double +tinhLuong():double +inTTin() NhanVien v Viết lớp GiamDoc cài đặt giao diện QuanLy - tenNhanVien: String § Hoa hồng giám đốc tính 5% lợi nhuận cơng ty § Lương giám đốc = lương * hệ số lương + phụ cấp + hoa hồng § Tương tự, xây dựng lớp CanBo QuanLy kế thừa lớp NhanVien thực thi giao diện QuanLy § Hoa hồng tính 0.2% lợi nhuận cơng ty § CanBoQuanLy khơng có phụ cấp + LUONG_MAX: double - luongCoBan: double - heSoLuong: double QuanLy + tangHeSoLuong(double): boolean + tinhLuong(): double + tinhHoaHong(): double + inTTin() GiamDoc - phuCap: double + loiNhuanCongTy: double + tinhLuong(): double + inTTin() 65 65 66 Bài tập v Xây dựng lớp theo sơ đồ lớp 67 67 68 68 17 ... riêng, cho lớp Square kế thừa HAI lớp cha thừa kế? + fill() Shape + move() Square Circle Triangle 34 33 33 34 Đơn kế thừa & Đa kế thừa Đơn kế thừa & Đa kế thừa v Đa kế thừa (Mul€ple Inheritance)... phải đa kế thừa § Một lớp kế thừa nhiều lớp cha trực Cếp § C++ hỗ trợ đa kế thừa A B C ■ D v Đơn kế thừa (Single Inheritance) § Một lớp kế thừa từ lớp cha trực Cếp § Java hỗ trợ đơn kế thừa §... () Tất đối tượng sư tử hổ 31 31 32 32 Nội dung Đơn kế thừa & Đa kế thừa Định nghĩa lại/ghi đè (Overriding) Lớp trừu tượng Đơn kế thừa & Đa kế thừa Giao diện (Interface) Vai trò lớp trừu tượng

Ngày đăng: 17/11/2022, 09:01

Tài liệu cùng người dùng

Tài liệu liên quan