日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

面向对象1(super、this)

發布時間:2024/10/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面向对象1(super、this) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

1.局部變量和成員變量

2.參數傳遞

2.1基本數據類型作為參數傳遞

2.2 引用類型作為參數傳遞

3.面向對象的三個特征

3.1 封裝

3.2 繼承

成員變量

成員方法

3.3 多態

前提:

定義格式:

缺點

優點

4.this關鍵字

通過this實現構造方法的相互引用

5.super關鍵字


1. 局部變量和成員變量

?局部變量成員變量
位置方法中或者{ }中類中
內存中的位置棧內存的方法中堆內存的對象中
生命周期隨著方法的運行而出現在棧中;隨著方法的彈棧而消失隨著對象的出現而出現在堆中;隨著對象的消失而從堆中消失
初始化

無默認初始值;

需手動賦值才可用

可不用初始化

所有默認的初始化

2. 參數傳遞

2.1 基本數據類型作為參數傳遞

class Demo{public static void main(String[] args){int x=4;show(x);System.out.println("x="+x); }public static void show(int x){x=5;} }

運行結果:

分析:

將基本類型變量來那個x空間中的值復制了一份傳遞給調用的方法show();

在show()方法中的x接收到了復制的值,再對x進行操作,只會影響到show中的x;

當show()執行完彈棧后,程序又回到main()執行;

main()中的x還是原來的值。

2.2 引用類型作為參數傳遞

public class DemoTest {int x;public static void main(String[] args){DemoTest d=new DemoTest();d.x=5;show(d);System.out.println("x="+d.x); }public static void show(DemoTest d){d.x=5;} }

運行結果:

分析:

將引用變量空間中的內存地址(引用)復制了一份傳遞給了show()的d引用變量;

這時兩個引用同時指向堆中的同一個對象

當執行了shou()中的d.x=6時,會根據d所持有的引用找到堆中的對象,并將其x屬性的值改為6,show()彈棧。

由于兩個引用指向同一個對象,不管那個引用改變了引用所指向的對象中的值,其他引用再次使用都是改變后的值。

3. 面向對象的三個特征

3.1 封裝

  • 表現:方法就是一個最基本的封裝體,類也是一個封裝體,用private修飾的變量也是封裝體;
  • 好處:提高了代碼的復用性;隱藏了具體實現細節,需對外提供可訪問的方式(setter()/getter());提高了安全性

3.2 繼承

通過繼承可以是多種事物之間形成一種關系體系。

關鍵字:extends

子類在繼承父類后,會自動擁有的父類的成員

  • 好處:提高了代碼的復用率,提高軟件開發率;讓類與類之間出現了關系提供了多態的前提

注意:

  • Java中只支持單繼承;
  • 多個類可以繼承一個類;
  • Java中可多層繼承;
  • Java中,子類和父類是一種相對的概念。

成員變量

當子父類出現同名成員變量時,若子類要訪問父類中的成員變量,需使用關鍵字super;

  • super表示當前對象中包含的父類對象空間的引用。

當在程序中通過對象調用方法時:

  • 會先在子類中查找有沒有對應的方法;
  • 若子類中存在,則執行子類中的方法;
  • 若子類中沒有,則執行父類中響應的方法。

成員方法

override:重寫、覆蓋

  • 子類中出現與父類一模一樣的方法
  • 用@Override標注
  • 子類覆蓋父類的方法必須保證權限大于等于父類權限
  • 必須一模一樣:方法名、參數列表
  • 弊端:類和類之間耦合度過高
  • 優點:提高改嗎重用性,可維護性,是多態前提之一

所有的類都直接或間接繼承了Object

overload:重載

  • 在同一個類中,多個方法名稱相同,參數列表(個數、數據類型)不同。

3.3 多態

表示當同一個操作作用在不同對象上時,會有不同的語義,從而會產生不同的結果。

最終多態體現為:父類引用可指向子類對象

前提

  • 必須有子父類關系或者類實現接口的關系
  • 方法的重寫
  • 父類引用指向子類對象

在使用多態后的父類引用變量調用方法時,會調用子類重寫后的方法。(若多個子類重寫,則調用的是各個子類自己重寫的方法(動態綁定))

表現方式

  • 方法的重載(overload):同一個類中有多個同名的方法,但這些方法有著不同的參數(個數、類型、順序),在編譯時可以確定到底調用哪一個方法——編譯時多態。重載可看做是一個類中的方法多態性。
  • 方法的覆蓋(override):子類可以覆蓋父類的方法,因此同樣的方法在子類和父類中會有著不同的表現形式。
  • 基類的引用變量不止可以指向基類的實例對象,還可以指向子類的實例對象。
  • 接口的引用變量也可以指向其實現類的實例對象。
  • 程序運行的方法在運行期才動態綁定(綁定:將一個方法調用和一個方法主體連接到一起 )。
  • 引用變量所指向的具體實例對象(內存里正在運行的那個對象)的方法,而不是引用變量的類型中定義的方法。
  • 通過這種動態綁定的方法實現了多態。
  • 只有在運行時再能確定調用那個方法,所以這個多態叫做——運行時多態
  • class Base{public Base() {g();}public void f() {System.out.println("Base f()");}public void g() {System.out.println("Base g()");} }class Derived extends Base{public void f() {System.out.println("Derived f()");}public void g() {System.out.println("Derived g()");} }public class DBTest{public static void main(String[] args) {Base b=new Derived();b.f();b.g(); } }

    運行結果

    Base b=new Derived();會調用Base類的構造方法。而在Base類的構造方法中執行了g()。由于多態,此時會調用子類Deriverd的g(),而非Base類的g(),因此會輸出第一個Derived g()。

    定義格式

    父類 ?? 變量名 = new ? ? 子類();

    抽象類 ?? 變量名 = new ?? 抽象類子類();

    接口 ?? 變量名 = new ?? 接口實現類();

    當子父類出現同名的成員變量時,多態調用該變量時,編譯運行看左邊(父類);

    • Dad d=new Son();
    • d.num; ?? 調用的是父類的成員變量
    • 因為Java中成員變量沒有重寫的概念
    class Base{public int i=1; }class Derived extends Base{public int i=2; }public class DBTest{public static void main(String[] args) {Base b=new Derived();System.out.println(b.i);} }

    運行結果

    1

    當子父類出現同名的成員方法時,多態調用該方法時,編譯看左邊,運行看右邊(子類);

    • 編譯時會檢查左邊父類中有無對應的成員

    當子父類出現同名的靜態方法時,多態調用該方法,編譯運行看左邊(父類)(相當于類名調用,所以也是看父類);

    • 都看左邊

    缺點

    無法直接訪問子類的特有成員,需向下轉型。

    優點

    繼承的優點(可維護性);

    可擴展性。

    4. this關鍵字

    可在成員變量上加上this,來區別成員變量和局部變量

    class Person{private int age;public int getAge() {return this.age;}public void setAge(int age) {this.age=age;} }public class DemoTest{public static void main(String[] args) {Person p=new Person();p.setAge(30);System.out.println(p.getAge());} }

    運行結果:

    分析:

  • 先執行main(),壓棧,執行其中的Person p=new Person();
  • 在堆內存中開辟空間,并為其分配內存地址0x1234,成員變量默認初始化(age=0);
  • 執行p.setAge(30);
  • 調用setAge(int age),將30賦值給setAge()中的age變量
  • 執行this.age=age,將age變量的值30賦值給成員變量this.age;
  • setAge()執行完,彈棧,回到main()執行輸出語句System.out.println(),輸出p對象中的age值。
  • 若局部變量名和成員變量名相同,在使用時采用的是就近原則

    通過this實現構造方法的相互引用

    this(參數列表)

    package ObjectOriented;class Person{private int age;private String name;Person(){}Person(String nm){name=nm;}Person(int a,String nm){this(nm);age=a;} }public class DemoTest{public static void main(String[] args) {Person p=new Person(30,"張三");} }

    分析:

  • 先執行main(),壓棧,執行其中的new Person(30,"張三");
  • 堆內存中開辟空間,并未其分類內存地址0x33,成員變量默認初始化(name=null,age=0);
  • 擁有兩個參數的構造方法(Person(int,String))壓棧,在這個構造方法中有一個隱式的this,指向堆中的那個對象
  • 因為構造方法是給對象初始化的,那個對象調用這個構造方法
  • 由于Person(int,String)中使用了this(nm),構造方法Person(String)壓棧,并將“張三”傳給nm。
  • 在Person(String)同樣也有this執行0x33.執行name=nm,將“張三”賦值給成員name。
  • Person(String)彈棧
  • Person(int,String)將30賦值給成員age,彈棧;
  • Person對象在內存中構建完成,并將0x33賦值給main()中的p引用變量。
  • 5. super關鍵字

    子類中的所有構造方法的第一行由默認的隱式的super();語句;

    • 原因:因為子類繼承了父類的內容,所以創建對象時,必須先要看父類是如何對其內容進行初始化的

    當父類中沒有空參構造方法時,子類的構造方法必須有顯示的super語句,指定要訪問的父類有參的構造方法;

    若第一行用this調用了本類的其他構造方法,則此時無super();

    • 因為它們都在第一行,初始化動作要先執行
    • super,this不共存

    父類構造方法中也有隱式的super

    • 只要是構造方法,第一行默認都是super();

    父類的父類是Object,它是所有對象的父類。

    由于有super()調用父類無參構造方法,所以父類的構造方法既可以給自己的對象初始化,也可以給子類的對象初始化化

    super(arg);——也可以有參數。

    如果子類構造方法的第一行沒有調用父類的構造方法,則會默認調用副類的無參構造(有的話),也可用super(arg)在子類構造方法中的第一行顯式調用父類的有參構造。

    父類的構造方法會先執行,因為先初始化父類中的成員變量,自誒后面可能要用到。

    • 訪問父類的構造函數:可以使用 super() 函數訪問父類的構造函數,從而委托父類完成一些初始化的工作。
    • 訪問父類的成員:如果子類重寫了父類的中某個方法的實現,可以通過使用super 關鍵字來引用父類的方法實現。
      ?

    ?

    總結

    以上是生活随笔為你收集整理的面向对象1(super、this)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 黄色三级视频 | 91九色在线视频 | 国产国语老龄妇女a片 | 日韩不卡一区二区三区 | 久久六六 | 涩涩涩涩涩涩涩涩涩 | av免费在线观看不卡 | 成人理论影院 | 国产视频一区二区在线播放 | 丰满人妻av一区二区三区 | 久久国内精品 | 亚洲夜夜爽 | 少妇激情一区二区三区视频 | 毛片高清免费 | 天天爱夜夜操 | 国产女人18毛片18精品 | 免费成人结看片 | 美女扒开屁股让男人捅 | 在线观看麻豆视频 | 精品一区二区三区精华液 | 婷婷俺来也 | 少妇在线观看 | 人人草人人澡 | 全黄毛片 | 欧美视频a | 骑骑上司妻电影 | 91欧美成人 | 日本高清免费视频 | 欧美日韩国产黄色 | 波多野吉衣av无码 | 中文字幕无线码一区 | 国产在线精品一区二区三区 | 伊人久久大香线蕉综合75 | 黄色仓库av| 永久免费黄色片 | 国产成人在线观看免费 | 中国毛片网 | 国产精彩视频 | 国产97视频 | 深夜在线网站 | 久久久亚洲精品视频 | 99热99这里只有精品 | 一区二区三区视频播放 | 高h全肉污文play带道具 | 日韩精品你懂的 | 亚洲免费av在线 | 亚洲成人免费网站 | 国产美女被遭强高潮免费网站 | 另类激情综合 | 国产在线播放一区二区三区 | 人妻熟女一区二区aⅴ水 | 18深夜在线观看免费视频 | 国产高潮久久 | 人人做人人爽人人爱 | 人人干干 | 四虎永久网址 | 男女日批视频 | 午夜国产小视频 | 麻豆三级在线观看 | 国产一级淫 | 免费成人美女女 | 色亚洲欧美 | 亚洲专区欧美专区 | 青青草毛片 | 亚洲妇女无套内射精 | 精品国产视频一区二区三区 | 久久一区 | 青青草99| 一区精品在线观看 | 日韩av在线导航 | 在线成人免费观看 | 啪啪av导航| 大号bbwassbigav女 | 一二三区av | 亚洲激情区 | 麻豆久久久9性大片 | 蜜桃视频在线播放 | 欧美伦理片 | 伊人丁香| 日本中文字幕不卡 | 亚洲中文字幕无码av | 亚洲阿v天堂 | 日本亚洲一区 | 欧美视频在线观看一区 | 亚洲精品久久久久久一区二区 | 神马午夜av | 亚洲好看站 | 久草视频免费在线观看 | 国产高清视频 | 日本手机看片 | 欧美乱码精品一区二区 | 亚洲色图欧洲色图 | 国模人体私拍xvideos | 国产三区精品 | 亚洲国产精品一区二区久久hs | 久久发布国产伦子伦精品 | 欧美天天性影院 | 自拍视频在线 | 香港三级在线视频 |