05 Kế thừa trong java

Embed Size (px)

Citation preview

  • 7/31/2019 05 K tha trong java

    1/30

  • 7/31/2019 05 K tha trong java

    2/30

    K tha 2Nguy n Vit H

    Ni dung

    V

    n

    s

    d

    ng l

    iS dng li bng k thaK tha trong Java

    nh ngh a lp k thathm ph ng th c, thu c tnhkim sot truy c pconstructor

    Lp Object

  • 7/31/2019 05 K tha trong java

    3/30

    K tha 3Nguy n Vit H

    Ti liu tham kh o

    Thinking in Java , chapter 6Java how to program , chapter 9

  • 7/31/2019 05 K tha trong java

    4/30

    K tha 4Nguy n Vit H

    S dng li

    Tn ti nhiu loi i tng c cc thu ctnh v hnh vi t ng t hoc lin quann nhau

    Person, Student, Manager,Xut hin nhu c u s dng li cc mngu n vit

    S

    d

    ng l

    i thng qua copyS dng li thng qua quan h has_aS dng li thng qua c ch k tha

  • 7/31/2019 05 K tha trong java

    5/30

    K tha 5Nguy n Vit H

    S dng liCopy m ngu n

    Tn cng, d nhmKh s a li do t n ti nhiu phin b n

    Quan h has_aS dng lp c nh l thnh ph n ca lpmi

    S dng li ci t vi giao di n miPh i vit li giao di nCha mm d o

  • 7/31/2019 05 K tha trong java

    6/30

    K tha 6Nguy n Vit H

    V d: has_aclass Person {

    private String name; private Date bithday; public String getName() { return name; }

    ...}class Employee {

    private Person me; private double salary; public String getName() { return me.getName(); }

    ...}

  • 7/31/2019 05 K tha trong java

    7/30

    K tha 7Nguy n Vit H

    class Manager {

    private Employee me; private Employee assistant; public setAssistant(Employee e) {...}

    ...}...

    Manager junior = new Manager(); Manager senior = new Manager();

    senior.setAssistant(junior); // error

  • 7/31/2019 05 K tha trong java

    8/30

    K tha 8Nguy n Vit H

    K tha

    Da trn quan h is_aTha h ng li cc thu c tnh v ph ngthc c

    Chi tit ha cho ph h p vi mc ch s dng m i

    Thm cc thu c tnh m iThm ho c hiu ch nh cc ph ng th c

  • 7/31/2019 05 K tha trong java

    9/30

    K tha 9Nguy n Vit H

    Thu t ng

    K thaLp c s, lp chaLp dn xu t, lp con

  • 7/31/2019 05 K tha trong java

    10/30

    K tha 10Nguy n Vit H

    K tha trong Java[public] class DerivedClass extends BaseClass {

    /* new features goes here */}

    V d :

    class Employee extends Person { private double salary; public boolean setSalary(double sal) {

    ...salary = sal;

    return true;}}

  • 7/31/2019 05 K tha trong java

    11/30

    K tha 11Nguy n Vit H

    Employee e = new Employee();

    e.setName("John");e.setSalary(3.0);

    Person-name

    -birthday

    +setName()

    +setBirthday()

    Employee

    -salary

    +setSalary()+getDetail()

  • 7/31/2019 05 K tha trong java

    12/30

    K tha 12Nguy n Vit H

    private membersclass Employee extends Person {

    ... public String getDetail() {

    String s;// s = name + "," + birthday;s = getName() + "," + getBirthday();s += "," + salary;return s;

    }}

  • 7/31/2019 05 K tha trong java

    13/30

    K tha 13Nguy n Vit H

    Mc truy c p protected

    m bo che d u thng tin, thngthng cc thu c tnh c khai bo lprivate

    i tng thu c lp dn xu t phi truy c p tichng thng qua cc ph ng th c get v set.

    Mc truy c p protected gi i quyt vn ny

    i tng c a lp dn xu t truy c p ccc protected members ca lp c sCc i tng khc khng truy c p c

  • 7/31/2019 05 K tha trong java

    14/30

    K tha 14Nguy n Vit H

    public class Person { protected Date birthday; protected String name;

    ...}

    public class Employee extends Person {...

    public String getDetail() {String s;s = name + "," + birthday;s += "," + salary;return s;

    }}

  • 7/31/2019 05 K tha trong java

    15/30

    K tha 15Nguy n Vit H

    Cc m c kim sot truy c p

    YesYesYesYespublic

    YesYesYesprotected

    YesYespackage( default )

    Yesprivate

    UniverseSubclassSame packageSameclass Modifier

  • 7/31/2019 05 K tha trong java

    16/30

    K tha 16Nguy n Vit H

    Trong cng gi public class Person {Date birthday;String name;

    ...}

    public class Employee extends Person {...

    public String getDetail() {String s;s = name + "," + birthday;s += "," + salary;return s;

    }}

  • 7/31/2019 05 K tha trong java

    17/30

    K tha 17Nguy n Vit H

    Khc gi package abc;

    public class Person { protected Date birthday; protected String name;

    ...

    }

    import abc.Person; public class Employee extends Person {

    ... public String getDetail() {

    String s;s = name + "," + birthday;s += "," + salary;return s;

    }}

  • 7/31/2019 05 K tha trong java

    18/30

    K tha 18Nguy n Vit H

    nh ngh a li cc ph ng th cChng ta c th nh ngh a li cc ph ngthc ca lp c si tng c a lp dn xu t s hot ng

    vi phng th c mi ph h p vi nC th ti s dng ph ng th c cng tnca lp c s bng t kha super

  • 7/31/2019 05 K tha trong java

    19/30

    K tha 19Nguy n Vit H

    V d package abc;

    public class Person { protected Date birthday; protected String name; public String getDetail() {...}

    ...}

    import abc; public class Employee extends Person {

    ... public String getDetail() {

    String s;s = super.getDetail() + "," + salary;

    return s;}

    }

  • 7/31/2019 05 K tha trong java

    20/30

    K tha 20Nguy n Vit H

    nh ngh a li phng th cPh i c quy n truy c p khng cht hnphng th c c nh ngh a liPh i c kiu gi tr tr li nh nhau

  • 7/31/2019 05 K tha trong java

    21/30

    K tha 21Nguy n Vit H

    class Parent { public void doSomething() {} public int doSomething2() {

    return 0;}

    }

    class Child extends Parent { protected void doSomething() {} public void doSomething2() {}

    }

  • 7/31/2019 05 K tha trong java

    22/30

    K tha 22Nguy n Vit H

    Tha k nhiu tngPerson

    -name

    -birthday

    +setName

    +setBirthday

    Employee

    -salary

    +setSalary

    +getDetail

    Manager

    -rank...

    Programmer

    -project

    ...

    Student

    -id

    ...

    Mi i tng utha k t lp g c Object

  • 7/31/2019 05 K tha trong java

    23/30

    K tha 23Nguy n Vit H

    Constructor

    Lp d n xu t k tha m i thuc tnh vphng th c c a lp c sKhng k th a ph ng th c kh i t o

    C hai gi i php g i constructor c a lpc s

    s dng constructor m c nhgi constructor c a lp c s mt cch t ngminh

  • 7/31/2019 05 K tha trong java

    24/30

    K tha 24Nguy n Vit H

    class Point {

    protected int x, y; public Point() {} public Point(int xx, int yy) {

    x = xx;

    y = yy;}

    }

    class Circle extends Point { protected int radius;

    public Circle() {}}

    Point p = new Point(10, 10);Circle c1 = new Circle();Circle c2 = new Circle(10, 10); // erorr

  • 7/31/2019 05 K tha trong java

    25/30

    K tha 25Nguy n Vit H

    Gi constructor c a lp c s

    Vic khi to thu c tnh c a lp c s nngiao ph cho constructor c a lp c sS dng t kha super gi

    constructor c a lp c sConstructor c a lp c s bt buc ph ic thc hin u tin

    Nu lp c s khng c constructor m c nhth b t bu c ph i gi constructor t ng minh

  • 7/31/2019 05 K tha trong java

    26/30

    K tha 26Nguy n Vit H

    class Point {

    protected int x, y; public Point() {} public Point(int xx, int yy) {

    x = xx;

    y = yy;}

    }

    class Circle extends Point { protected int radius; public Circle() {} public Circle(int xx, int yy, int r) {

    super(xx, yy);radius = r;

    }}

  • 7/31/2019 05 K tha trong java

    27/30

    K tha 27Nguy n Vit H

    class Point {

    protected int x, y; public Point(int xx, int yy) {

    x = xx;y = yy;

    }}

    class Circle extends Point {

    protected int radius; public Circle() { super(0, 0); } public Circle(int xx, int yy, int r) {

    super(xx, yy);

    radius = r;}

    }

  • 7/31/2019 05 K tha trong java

    28/30

    K tha 28Nguy n Vit H

    class Point {

    protected int x, y; public Point() {} public Point(int xx, int yy) {

    x = xx;

    y = yy;}

    }

    class Circle extends Point { protected int radius; public Circle() { } public Circle(int xx, int yy, int r) {

    // super(xx, yy);radius = r;

    }}

  • 7/31/2019 05 K tha trong java

    29/30

    K tha 29Nguy n Vit H

    Th t khi toclass Point { protected int x, y; public Point() {

    System.out.println("Point constructor");}

    }class Circle extends Point {

    protected int radius; public Circle() {

    System.out.println("Circle constructor");}

    }...Circle c = new Circle();

  • 7/31/2019 05 K tha trong java

    30/30

    K tha 30Nguy n Vit H

    T kha finalThu c tnh final

    hng s , ch c gn gi tr khi to m t ln, khngthay i c gi tr

    Ph ng th c final

    khng cho php nh ngh a li lp d n xu tTham s final

    khng thay i c gi tr ca tham chi u

    Lp finalkhng nh ngh a c lp d n xu t