Java學習筆記9(物件導向二),java學習筆記

來源:互聯網
上載者:User

Java學習筆記9(物件導向二),java學習筆記

就近原則:

類中的方法中的變數和成員變數重名時,調用類的方法時候,生效的是方法中的變數,如果方法中沒有定義變數,才會去成員變數中尋找

於是,提出了this關鍵字,為了區分重名問題

public class Person {    // 人的姓名年齡,成員變數    private String name;    private int age;    public void setAge(int a) {        if (a < 0 || a > 100) {            age = 20;        } else {            age = a;        }    }    public void setName(String n){        name = n;    }        //定義方法,擷取age    public int getAge(){        return age;    }    public String getName(){        return name;    }        // 說話功能    public void speak() {        String name = "李四";        int age = 16;        System.out.println(this.age + "歲的" + this.name + "在說話");    }}

 

public class PersonTest {    public static void main(String[] args) {        Person p = new Person();        p.setName("張三");        p.setAge(80);        System.out.println(p.getAge());        System.out.println(p.getName());        p.speak();    }}

 

這裡如果不寫this,輸出的就是李四,如果寫了則輸入張三

 注意this是調用者本身的對象

 

this記憶體分析:

 1.main進棧運行,堆中開空間存入Person對象,成員變數跟隨並賦預設值

2.p調用speak方法時,speak進棧執行,調用者是p對象,this就是p對象本身,因此p將對象地址傳遞給this,於是this也指向這一片記憶體空間

 

於是我們發現,剛才的Person類這樣寫會更規範:

public class Person {    private String name;    private int age;    public void setAge(int a) {        if (a < 0 || a > 100) {            this.age = 20;        } else {            this.age = a;        }    }    public void setName(String n) {        this.name = n;    }    public int getAge() {        return age;    }    public String getName() {        return name;    }    public void speak() {        String name = "李四";        int age = 16;        System.out.println(this.age + "歲的" + this.name + "在說話");    }}

 

繼承:

類的繼承是指在一個現有類的基礎上去構建一個新的類,構建出來的新類被稱作子類,現有類被稱作父類

子類會自動擁有父類所有可繼承的屬性和方法

 舉例:

public class Employee {    String name;    public void work(){        System.out.println("員工"+name+"在工作");    }}
public class Develop extends Employee{    public void print(){        System.out.println(name);    }}
public class Test {    public static void main(String[] args) {        Develop d = new Develop();        d.name = "張三";        d.print();        d.work();    }}

 繼承的特點和優點在這個例子中都體現出了

1.提高代碼的複用性,提升開發效率

2.繼承的出現讓類與類之間產生了關係,提供了多態的前提

 

注意事項:

java只支援單繼承,不支援多繼承,因為有安全隱患,例如兩個父類有重名方法時

可以使用連續繼承(多重繼承)實現多繼承,這種方式合法

 

成員變數的變化:

子類定義的變數如果和父類重名,調用子類的時候,以子類的變數為準,如果子類不存在這個變數,則去父類中尋找,但是有一個super關鍵詞可以指定在父類中尋找

public class Fu {    int i = 1;}
public class Zi extends Fu {    int i = 2;    public void show(){        System.out.println(super.i);    }}
public class Test {    public static void main(String[] args) {        Zi z = new Zi();        z.show();    }}

這時候的輸出結果為1,關於super的知識在後面詳寫

 

子類重寫父類方法:

子類中,出現了和父類一樣的方法的時候,稱為子類重寫父類的方法

用super.調用父類的功能,再寫入新的功能

注意:子類如果要覆蓋父類方法,必須要保證許可權大於或等於父類許可權(public>protected>default>private)

 

抽象類別:

只有聲明,沒有定義

抽象方法必須存在於抽象類別中

抽象類別,不能執行個體化對象(不能使用new)因為抽象類別沒有主體,無法運行

抽象類別的使用:必須定義類繼承它,將抽象方法重寫,建立它的子類的對象,並且強制讓子類重寫方法

public abstract class Person {    public abstract void work();}
public class Teacher extends Person {    public void work() {        System.out.println("老師在工作");    }}
public class Engineer extends Person {    public void work() {        System.out.println("工程師在工作");    }}
public class Test {    public static void main(String[] args) {        Teacher t = new Teacher();        Engineer e = new Engineer();        t.work();        e.work();    }}

 

 輸出:

老師在工作
工程師在工作

 

抽象類別主要是為了學習它的設計思想:

抽象類別的作用:繼承的體系

抽象類別強制子類重寫抽象方法,保證體系功能的完整性

 

抽象類別的一些注意事項:

1.有抽象方法的一定是抽象類別,抽象類別不止有抽象方法

2.抽象關鍵字abstract不可以共存的:private,final,static

3.抽象類別必須是父類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.