面向對象繼承

第1章 面向對象java

1.1 知識回顧編程

1.Java中的數據類型
2.引用數據類型String中的方法
3.IO流_讀寫文件數組

1.2 面向對象概念回顧學習

什麼叫面向對象編程?有人是這麼理解的測試

也有人說不對,面向對象編程是你要編程你對象也要編程.this

面向對象簡稱:「OOP」 面向對象編程spa

使用類映射現實生活中的事物,其功能封裝爲方法,屬性封裝爲成員變量。
一個類擁有的成員包括:
成員變量
構造方法
普通方法
getters/setters設計

如一個Person類的定義:
class Person{
private String name;
private int age;code

public Person(){}
public Person(String name,int age) {
    this.name = name;
    this.age = age;

}對象

public void showName() {
    System.out.println(this.name);
}
set/get方法

}

1.3 對象的內存解釋

對象在內存中的位置:
對象由new關鍵字建立,如同數組,實體存在於堆內存中
任何事物都可以定義成類,建立對象,屬於引用類型
而對象的引用變量是一個普通變量。存儲的值是該對象堆內存中的地址。

基本類型賦值代碼解釋

基本類型賦值對應內存圖

引用類型賦值代碼解釋

引用類型賦值對應內存圖

1.4 this關鍵字概念

this通常出如今類的一個方法當中,表明當前對象的引用。咱們一般用其將本對象中的成員與其餘做用域區分開來。
咱們用代碼回顧一下 this關鍵字的做用,用來區分紅員變量和局部變量同名狀況
當一個類定義好以後,若是不建立對象this是沒有意義的。
一個類能夠有多個對象。每一個對象都有各自的屬性值,各個對象的方法均是類中定義的那個方法邏輯。定義中的this就表明調用方法的這個對象。

1.5 匿名對象

1.5.1 匿名對象的概念
匿名: 不露身分、我的特徵或不說明是什麼人物
生活中有哪些匿名案例?
匿名帳號

匿名舉報

匿名對象

匿名對象是指建立對象時,只有建立對象的語句,卻沒有把對象地址值賦值給某個變量。
如:已經存在的類:
public class Person{
public void eat(){
System.out.println();
}
}

建立一個普通對象
Person p = new Person();
建立一個匿名對象
new Person();

1.5.2 匿名對象的特色

 建立匿名對象直接使用,沒有變量名。
new Person().eat() //eat方法被一個沒有名字的Person對象調用了。

 匿名對象在沒有指定其引用變量時,只能使用一次。
new Person().eat(); 建立一個匿名對象,調用eat方法
new Person().eat(); 想再次調用eat方法,從新建立了一個匿名對象

 匿名對象能夠做爲方法接收的參數、方法返回值使用

class Demo {
    publicstatic Person getPerson(){
        //普通方式
        //Person p = new Person();  
        //return p;

        //匿名對象做爲方法返回值
        returnnew Person(); 
    }

    publicstaticvoid method(Person p){}
}

class Test {
    publicstaticvoid main(String[] args) {
        //調用getPerson方法,獲得一個Person對象
        Person person = Demo.getPerson();

        //調用method方法
        Demo.method(person);
        //匿名對象做爲方法接收的參數
        Demo.method(new Person());
    }
}

第2章 繼承

2.1 繼承

2.1.1 繼承的概念

什麼叫繼承? 他是面向對象的三大特徵之一
現實生活中的繼承 QQ:5位 12345

在現實生活中,繼承通常指的是子女繼承父輩的財產。

在程序中,繼承描述的是類與類之間的關係,經過繼承能夠多個類之間造成一種關係體系。例如學校中的講師、助教、班主任都屬於員工。這些員工之間會造成一個繼承體系,具體以下圖所示。

圖1-1 員工繼承關係圖
在Java中,類的繼承是指在一個現有類的基礎上去構建一個新的類,構建出來的新類被稱做子類,現有類被稱做父類,
繼承後子類的特色:
子類會自動擁有父類全部可繼承的屬性和方法。

思考:
現實生活中還有哪些繼承的例子?

2.1.2 繼承的定義及使用格式
在程序中,若是想聲明一個類繼承另外一個類,須要使用extends關鍵字。
格式:
class 子類 extends 父類 {}
接下來經過一個案例來學習子類是如何繼承父類的,以下所示。Example01.java

/*  * 定義員工類Employee  */
class Employee {
    String name; // 定義name屬性
    // 定義員工的工做方法
    publicvoid work() {
        System.out.println("全力以赴地工做");
    }
}

/*  * 定義講師類Teacher 繼承 員工類Employee  */
classTeacherextends Employee {
    // 定義一個打印name的方法
    publicvoid printName() {
        System.out.println("name=" + name);
    }
}

/*  * 定義測試類  */
publicclass Example01 {
    publicstaticvoid main(String[] args{
        Teachert = newTeacher (); // 建立一個講師類對象
        t.name = "小明"// 爲該員工類的name屬性進行賦值
        t.printName(); // 調用該員工的printName()方法
        t.work(); // 調用Developer類繼承來的work()方法
    }
}

運行結果以下圖所示。


圖1-2 運行結果
在上述代碼中,Teacher類經過extends關鍵字繼承了Employee類,這樣Teacher類即是Employee類的子類。從運行結果不難看出,子類雖然沒有定義name屬性和work()方法,可是卻能訪問這兩個成員。這就說明,子類在繼承父類的時候,會自動擁有父類的成員。
小結:
繼承是面向對象的核心特性,是面向對象的學習重點。
繼承是代碼複用的重要方式,是類與類之間的一種關係。

 

繼承的注意事項:
1.繼承必須合理性:(人是人他媽生的 妖是妖他媽生的)
從類與類之間的設計關係來看,子類必須屬於父類的一種時 is a,纔會繼承。
2.父類中成員是共性的內容
父類抽取出了共性的內容,子類能夠在父類基礎上擴展新的屬性與行爲。
3.子類自動擁有父類的成員而且能夠直接使用非私有的父類成員。

2.2 繼承-子類中訪問父類成員變量特色

瞭解了繼承給咱們帶來的好處,提升了代碼的複用性。繼承讓類與類或者說對象與對象之間產生了關係。那麼,當繼承出現後,類的成員之間產生了那些變化呢?
類的成員重點學習成員變量、成員方法的變化。
成員變量:若是子類父類中出現不一樣名的成員變量,這時的訪問是沒有任何問題。
看以下代碼:

class Fu
{
    //Fu中的成員變量。
    int num = 5;
}
class Zi extends Fu
{
    //Zi中的成員變量
    int num2 = 6;
    //Zi中的成員方法
    public void show()     {
        //訪問父類中的num
        System.out.println("Fu num="+num);
        //訪問子類中的num2
        System.out.println("Zi num2="+num2);
    }
}
class Demo 
{
    public static void main(String[] args)      {
        Zi z = new Zi(); //建立子類對象
//System.out.println(z.num1);
        //z.show(); //調用子類中的show方法
    }
}

代碼說明:Fu類中的成員變量是非私有的,子類中能夠直接訪問,若Fu類中的成員變量私有了,子類是不能直接訪問的。

2.3 繼承-子類中訪問父類成員方法特色

 子父類中成員方法的特色
當在程序中經過對象調用方法時,會先在子類中查找有沒有對應的方法,若子類中存在就會執行子類中的方法,若子類中不存在就會執行父類中相應的方法。
看以下代碼:

class Fu{
    public void show(){
        System.out.println("Fu類中的show方法執行");
    }
}
class Zi extends Fu{
    public void show2(){
        System.out.println("Zi類中的show2方法執行");
    }
}
public  class Test{
    public static void main(String[] args{
        Zi z = new Zi();
        z.show(); //子類中沒有show方法,可是能夠找到父類方法去執行
        z.show2();
    }
}

2.3.1 繼承特色
1.Java只支持單繼承:就一個子類 只能最多直接繼承一個父類

2.Java支持多層繼承:

3.父類定義了繼承樹中共性內容,子類定義了該類個性內容。 說明:在之後的開發過程當中 咱們學習了多態後,要結合多態,能使用父類時儘可能使用父類,提升程序擴展性。

相關文章
相關標籤/搜索