Download - 06 Tính đa hình, đa thừa kế trong java
-
7/31/2019 06 Tnh a hnh, a tha k trong java
1/40
-
7/31/2019 06 Tnh a hnh, a tha k trong java
2/40
K tha v a hnh 2Nguyn Vit H
Ni dung
a hnhupcasting
lin kt ng
Lp v phng thc tru tng a k tha v giao din
Mt cch lp trnh tng qut
-
7/31/2019 06 Tnh a hnh, a tha k trong java
3/40
K tha v a hnh 3Nguyn Vit H
Ti liu tham kho
Thinking in Java, chapter 7, 8 Java how to program, chapter 9
-
7/31/2019 06 Tnh a hnh, a tha k trong java
4/40
K tha v a hnh 4Nguyn Vit H
Polymorphism (a hnh) l g
Polymorphism: nhiu hnh thc, nhiu kiutn ti
a hnh trong lp trnh
a hnh hm: hm trng tn, phn bit bidanh sch tham s
a hnh i tng nhn nhn i tng theo nhiu kiu khc nhau cc i tng khc nhau gii ngha thng ip
theo cch thc khc nhau
-
7/31/2019 06 Tnh a hnh, a tha k trong java
5/40
K tha v a hnh 5Nguyn Vit H
Up casting
Up casting l kh nng nhn nhn itng thuc lp dn xut nh l mt itng thuc lp c s
dng i tng ca lp dn xut truyntham s
dng i tng ca lp dn xut lm thuc
tnh
-
7/31/2019 06 Tnh a hnh, a tha k trong java
6/40
K tha v a hnh 6Nguyn Vit H
Person p;
Employee e = new Employee();
p = (Person) e;
p.setName(...);
p.setSalary(...); // compile error
Person
-name
-birthday
+setName()
+setBirthday()
Employee
-salary
+setSalary()
+getDetail()
-
7/31/2019 06 Tnh a hnh, a tha k trong java
7/40
K tha v a hnh 7Nguyn Vit H
String teamInfo(Person p1, Person p2) {
return "Leader: " + p1.getName() +
"; member: " + p2.getName();
}
...Employee e1, e2;
Manager m1, m2;
System.out.println(teamInfo(e1, e2));
teamInfo(m1, m2); teamInfo(m1,e2);
-
7/31/2019 06 Tnh a hnh, a tha k trong java
8/40
K tha v a hnh 8Nguyn Vit H
class Manager extends Employee {
Employee assistant;
...
public void setAssistant(Employee e) {
assistant = e;
}
...
}
...
Manager junior, senior;
...
senior.setAssistant(junior);
-
7/31/2019 06 Tnh a hnh, a tha k trong java
9/40
K tha v a hnh 9Nguyn Vit H
a hnh v lin kt ng
Kh nng gii ngha cc thng ip theo cc cch thc
khc nhau
Person p1 = new Person();
Person p2 = new Employee();Person p3 = new Manager();
...
System.out.println(p1.getDetail());System.out.println(p2.getDetail());
System.out.println(p3.getDetail());
-
7/31/2019 06 Tnh a hnh, a tha k trong java
10/40
K tha v a hnh 10Nguyn Vit H
class EmployeeList {
Employee list[];
...
public void add(Employee e) {...}
public void print() {for (int i=0; i
-
7/31/2019 06 Tnh a hnh, a tha k trong java
11/40
K tha v a hnh 11Nguyn Vit H
Lin kt tnh v lin kt ngStatic and dynamic binding
Lin kt tnh: li gi hm (phng thc) cquyt nh khi bin dch, do chc mt phinbn ca chng trnh con c thc hin u im v tc
Lin kt ng: li gi phng thc c quytnh khi thc hin, phin bn ca phng thcph hp vi i tng c gi Java mc nh s dng lin kt ng
-
7/31/2019 06 Tnh a hnh, a tha k trong java
12/40
K tha v a hnh 12Nguyn Vit H
Down casting
Employee e = new Employee();
Person p = e; // up casting
Employee ee = (Employee)p; // down casting
Manager m = (Manager)ee; // run-time error
Person p2 = new Manager();
Employee e2 = (Employee) p2;
-
7/31/2019 06 Tnh a hnh, a tha k trong java
13/40
K tha v a hnh 13Nguyn Vit H
Ton t instanceof
public class Employee extends Person {}
public class Student extends Person {}
---
public doSomthing(Person e) {
if (e instanceof Employee) {...
} else if (e instanceof Student) {...
} else {...}
}
-
7/31/2019 06 Tnh a hnh, a tha k trong java
14/40
K tha v a hnh 14Nguyn Vit H
Private method
class Base {
private void f() { System.out.println(base f()); }
public void show() { f() }
}
public class Derived extends Base {
private void f() {
System.out.println(derived f());
}
public static void main(String args[]) {
Derived d = new Derived();
Base b = d;
b.show();
}
}
-
7/31/2019 06 Tnh a hnh, a tha k trong java
15/40
K tha v a hnh 15Nguyn Vit H
Copy constructor(?)
class Employee extends Person {
double salary;
Employee(Employee e) {
super(e);salary = e.salary;
}
...
}
-
7/31/2019 06 Tnh a hnh, a tha k trong java
16/40
K tha v a hnh 16Nguyn Vit H
Gi phng thc trong constructorclass Shape {
public Shape() {
draw();
}public void draw() {}
}
class Point extends Shape {
protected int x, y;
public Point(int xx, int yy) {
x = xx; y = yy;
}
public void draw() {
System.out.println("(" + x + "," + y + ")");
}}
--
Point p = new Point(10, 10);
-
7/31/2019 06 Tnh a hnh, a tha k trong java
17/40
K tha v a hnh 17Nguyn Vit H
Lp tru tng
Chng ta c th to ra cc lp c sti s dng m khng mun to ra itng thc ca lp
cc lp Point, Circle, Rectangle chung nhaukhi nim cng l hnh v Shape
Gii php l khi bo lp tru tng
khng th to i tng
-
7/31/2019 06 Tnh a hnh, a tha k trong java
18/40
K tha v a hnh 18Nguyn Vit H
abstract class Shape {
protected int x, y;
Shape(int _x, int _y) {
x = _x;
y = _y;
}
}
...
Shape s1 = new Circle();
Shape s = new Shape(10, 10) // compile error
-
7/31/2019 06 Tnh a hnh, a tha k trong java
19/40
K tha v a hnh 19Nguyn Vit H
class Circle extends Shape {int r;
public Circle(int _x, int _y, int _r) {super(_x, _y);
r = _r;
}...
}
-
7/31/2019 06 Tnh a hnh, a tha k trong java
20/40
K tha v a hnh 20Nguyn Vit H
Phng thc tru tng
thng nht giao din, c th khai bocc phng thc ti lp c s nhngc ci t thc t ti lp dn xut
cc lp dn xut khc nhau c cch ci tkhc nhau
Phng thc tru tng
bt buc phi nh ngha li ti lp dn xut
-
7/31/2019 06 Tnh a hnh, a tha k trong java
21/40
K tha v a hnh 21Nguyn Vit H
abstract class Shape {protected int x, y;
public void moveTo(int x1, int y1) {
erase();x = x1;
y = y1;
draw();
}
abstract public void erase();
abstract public void draw();
}
-
7/31/2019 06 Tnh a hnh, a tha k trong java
22/40
K tha v a hnh 22Nguyn Vit H
class Circle extends Shape {int r;
public Circle(int _x, int _y, int _r) {
super(_x, _y);
r = _r;
draw();
}
public void erase() {
System.out.println("Erase at (" + x + "," + y + ")");
}
public void draw() {
System.out.println("Draw at (" + x + "," + y + ")");
}
}
-
7/31/2019 06 Tnh a hnh, a tha k trong java
23/40
K tha v a hnh 23Nguyn Vit H
Giao din (Interface)
Interface l mc tru tng cao hn lptru tng
Bao gm
phng thc tru tnghng s (static final)
mc nh l public
C php:
t kha interface v implements
-
7/31/2019 06 Tnh a hnh, a tha k trong java
24/40
K tha v a hnh 24Nguyn Vit H
interfaceAction {
void moveTo(int x, int y);
void erase();
void draw();
}
class Circle1 implements Action {
int x, y, r;
Circle1(int _x, int _y, int _r) { ... }
public void erase() {...}
public void draw() {...}
public void moveTo(int x1, int y1) {...}
}
-
7/31/2019 06 Tnh a hnh, a tha k trong java
25/40
K tha v a hnh 25Nguyn Vit H
Lp tru tng ci t giao dinabstract class Shape implements Action {
protected int x, y;
public Shape() {...}
public Shape(int _x, int _y) {...}
public void moveTo(int x1, int y1) {
erase();
x = x1;
y = y1;
draw();
}
}
-
7/31/2019 06 Tnh a hnh, a tha k trong java
26/40
K tha v a hnh 26Nguyn Vit H
a k tha Java khng cho php a k tha t nhiu lp c s
m bo tnh d hiu hn ch xung t
C th ci t ng thi nhiu giao din
-
7/31/2019 06 Tnh a hnh, a tha k trong java
27/40
K tha v a hnh 27Nguyn Vit H
class ImageBuffer {...
}
class Animation extends ImageBuffer
implementsAction {
...
public void erase() {...}
public void draw() {...}
public void moveTo() {...}
}
-
7/31/2019 06 Tnh a hnh, a tha k trong java
28/40
K tha v a hnh 28Nguyn Vit H
interface CanFight {voidfight();
}
interface CanSwim {voidswim();
}
interface CanFly {
voidfly();
}
classActionCharacter {
public voidfight() {}
}
-
7/31/2019 06 Tnh a hnh, a tha k trong java
29/40
K tha v a hnh 29Nguyn Vit H
class Hero extendsActionCharacter implements CanFight, CanSwim,
CanFly {
public voidswim() {}
public voidfly() {}
}
public classAdventure {
public static voidt(CanFight x) { x.fight(); }
public static voidu(CanSwim x) { x.swim(); }
public static voidv(CanFly x) { x.fly(); }
public static voidw(ActionCharacter x) { x.fight(); }public static voidmain(String[] args) {
Hero h = new Hero();
t(h); // Treat it as a CanFight
u(h); // Treat it as a CanSwim
v(h); // Treat it as a CanFly
w(h); // Treat it as an ActionCharacter
}
}
-
7/31/2019 06 Tnh a hnh, a tha k trong java
30/40
K tha v a hnh 30Nguyn Vit H
Xung t (1)interface I1 { voidf(); }
interface I2 { int f(int i); }
interface I3 { int f(); }
class C {
public int f() { return 1; }
}
class C2 implements I1, I2 {
public voidf() {}
public int f(int i) { return 1; } // overloaded
}class C3 extends C implements I2 {
public int f(int i) { return 1; } // overloaded
}
-
7/31/2019 06 Tnh a hnh, a tha k trong java
31/40
K tha v a hnh 31Nguyn Vit H
Xung t (2)class C4 extends C implements I3 {
// Identical, no problem:
public int f() { return 1; }
}
class C5 extends C implements I1 {}
interface I4 extends I1, I3 {}
-
7/31/2019 06 Tnh a hnh, a tha k trong java
32/40
K tha v a hnh 32Nguyn Vit H
M rng lp tru tng v giao din
interface I1 {}
interface I2 {}
interface I3 extends I1, I2 {}
abstract class A1 {}
abstract class A2 extendsA1 implements I1, I2 {}
-
7/31/2019 06 Tnh a hnh, a tha k trong java
33/40
K tha v a hnh 33Nguyn Vit H
Abstract class vs. Interface
Lp tru tng c th c phng thcthc v thuc tnh
Interface h tra k tha
Ci g l bt bin ?
-
7/31/2019 06 Tnh a hnh, a tha k trong java
34/40
K tha v a hnh 34Nguyn Vit H
Hng ti lp trnh tng qutGeneric programming
Tng qut ha chng trnh c th hot ng
vi cc kiu d liu khc nhau, k c cc kiud liu trong tng lai thut ton xc nh
V d, kiu ngn xp C: dng con tr void
C++: dng template
Java: li dng upcasting v lp gc Object Java 1.5: template
-
7/31/2019 06 Tnh a hnh, a tha k trong java
35/40
K tha v a hnh 35Nguyn Vit H
class MyStack {
...
public void push(Object obj) {...}
public Object pop() {...}
}
...
MyStack s = new MyStack();
Point p = new Point();Circle c = new Circle();
s.push(p);
s.push(c);
Circle c1 = (Circle) s.pop();Point p1 = (Point) s.pop();
-
7/31/2019 06 Tnh a hnh, a tha k trong java
36/40
K tha v a hnh 36Nguyn Vit H
Local copy
C nhu cu sao chp cc i tngSao chp khi chuyn tham s trnh sai i tng gc
Lm th no sao chp i tng mkhng bit r kiu (lp) thc s ca n?S dng copy constructor?
S dng phng thc copy? Interface Cloneable v phng thcclone()
-
7/31/2019 06 Tnh a hnh, a tha k trong java
37/40
K tha v a hnh 37Nguyn Vit H
Copy constructorclass Base {
public Base() {}
public Base(Base b) {...}public String print() { return "base class"; };
}
class Derived extends Base {
public Derived() {}public Derived(Derived d) {
super(d);
}
public String print() { return "derived class"; };}
-
7/31/2019 06 Tnh a hnh, a tha k trong java
38/40
K tha v a hnh 38Nguyn Vit H
Local copy s dng copy constructorpublic class TestCopy {
static void copy(Derived d) {
Derived d1 = new Derived(d);
System.out.println(d1.print());
}
static void copy2(Base b) {
Base b1 = new Base(b);
System.out.println(b1.print());
}
public static void main(String args[]) {
Derived d = new Derived();
copy(d);
copy2(d);
}
}
-
7/31/2019 06 Tnh a hnh, a tha k trong java
39/40
K tha v a hnh 39Nguyn Vit H
Bi tp S dng kin thc v k tha v a hnh thit k cc lp sauCc lp i tng hnh hc c s Point,
Circle, Rectange, ...
Lp Graphics l mt hnh phc hp do ngidng nh ngha (l mt tp cc hnh c shoc phc hp khc)
Yu cu: cc lp phi s dng giao dinnh nhau: move(), draw(),
-
7/31/2019 06 Tnh a hnh, a tha k trong java
40/40
K tha v a hnh 40Nguyn Vit H
Composite design pattern