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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java学习笔记_多态/内部类

發布時間:2023/12/15 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java学习笔记_多态/内部类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多態的格式與使用
代碼當中體現多態性,其實就是一句話,父類引用指向子類對象

格式:
父類名稱 對象名 = new 子類名稱();
或者
接口名稱 對象名 = new 實現類名稱();

public class Demo{public static void main(String[] args){//使用多態寫法//左側父類的引用,指向了右側子類對象Fu obj = new Zi();obj.method();obj.methodFu();} }

多態中成員變量的使用特點
訪問成員變量的兩種方式:

  • 直接通過對象名稱訪問成員變量:看等號左邊是誰,優先用誰,沒有則向上找
  • 間接通過成員方法訪問成員變量:看該方法屬于誰,優先用誰,沒有則向上找
  • public class Demo{public static void main(String[] args){//使用多態寫法//左側父類的引用,指向了右側子類對象Fu obj = new Zi();System.out.println(obj.num);//父:10System.out.println(obj.age);//錯誤寫法//子類沒有覆蓋重寫,就是父//子類如果覆蓋重寫,就是子obj.showNum();} }

    多態中成員方法的使用特點
    在多態的代碼當中,成員方法的訪問規則是:
    看new的是誰,就優先用誰,沒有則向上找
    口訣:編譯看左邊,運行看右邊

    成員變量:編譯看左邊,運行還看左邊
    成員方法:編譯看左邊,運行看右邊

    public class Demo{public static void main(String[] args){//使用多態寫法//左側父類的引用,指向了右側子類對象Fu obj = new Zi();//多態obj.method();//父子都有,優先用子obj.methodFu();//子類沒有,父類有,向上找到父類//編譯看左邊,左邊是Fu,Fu當中沒有methodZi方法,編譯報錯//obj.methodZi(); //錯誤寫法

    instantceof關鍵字
    對象一旦向上轉型為父類,那么就無法調用子類原本特有的內容

    解決方案:用對象的向下轉型還原

    public class Demo{public static void main(String[] args){//對象的向上轉型,就是父類引用指向子類對象Animal animal = new Cat();//本來創建的時候是一只貓animal.eat();//貓吃魚// animal.catchMouse();//錯誤寫法//向下轉型,進行“還原”動作Cat cat = (Cat) animal;cat.catchMouse();//貓抓老鼠 }

    如何才能知道一個父類引用的對象,本來是什么子類?
    格式:
    對象 instanceof 類名稱
    這將會得到有個boolean值結果,也就是判斷前面的對象能不能當作后面類型的實例

    public class Demo{public static void main(String[] args){Animal animal = new Cat();//本來是一只貓animal.eat();//貓吃魚//如果希望調用子類特有的方法,需要向下轉型//判斷一下父類引用animal本來是不是Dogif(animal instanceof Dog){Dog dog = (Dog) animal;dog.watchHouse();}//判斷一下animal本來是不是catif(animal instanceof Cat){Cat cat = (Cat) animal;cat.catchMouse();}} }

    final關鍵字用于修飾類
    當final關鍵字用來修飾一個類的時候,格式:
    public final class 類名稱{
    //…
    }

    含義:當前這個類不能有任何子類
    注意:一個類如果是final的,那么其中所有的成員方法都無法進行覆蓋重寫

    public final class MyClass{public void method(){System.out.println(“方法執行”)} }

    final關鍵字修飾成員方法
    當final關鍵字用來修飾一個方法的時候,這個方法就是最終方法,也就是不能被覆蓋重寫
    格式:
    修飾符 final 返回值類型 方法名稱(參數列表){
    //方法體
    }

    注意事項:
    對于類、方法來說,abstract關鍵字和final關鍵字不能同時使用,因為矛盾

    public abstract /*final*/ void methodAbs();

    final關鍵字修飾局部變量
    final關鍵字代表最終的、不可改變的

    常見的四種用法:

  • 可以用來修飾一個類
  • 可以用來修飾一個方法
  • 可以用來修飾一個局部變量
  • 可以用來修飾一個成員變量
  • public class Demo{public static void main(String[] args){int num1 = 10;System.out.println(num1);num1 = 20;System.out.println(num1);//一旦使用final修飾局部變量,那么這個變量就不能更改final int num2 = 200;System.out.println(num2);//num2 = 250; //錯誤寫法,不可修改final int num3;num3 = 300;//對于基本類型來說,不可改變的是變量當中的數據不可改變//對于引用類型來說,不可變說的是變量當中的地址值不可改變Student stu1 = new Student(name:”zhangsan”);System.out.println(stu1);System.out.println(stu1.getName());final Student stu2 = new Student(name:”lisi”);System.out.println(stu.getName());stu2.setName(“wangwu”);System.out.println(stu2.getName());}}

    final關鍵字用于修飾成員
    對于成員變量來說,如果使用final關鍵字修飾,那么這個變量照樣是不可變的

  • 由于成員變量具有默認值,所以使用了final之后必須手動賦值,不會再給默認值
  • 對于final的成員變量,要么使用直接賦值,要么通過構造方法賦值
  • 必須保證類當中所有重載的構造方法,都最終會對final的成員變量進行賦值
  • public class Person{private final String name;public Person(){name = “zhangsan”;} }

    成員內部類

    成員內部類的定義格式

    修飾符 class 外部類名稱{
    修飾符 class 內部類名稱{
    // …
    }
    // …
    }

    注意:內用外,隨意訪問;外用內,需要內部類對象

    使用成員內部類的方式:

  • 間接訪問:在外部類當中訪問,使用內部類;然后main只是調用外部類的方法
  • 直接方式:公式類名稱 對象名 = new 類名稱();
    外部類名稱.內部類名稱 對象名 = new 外部類名稱().new 內部類名稱();
  • public class Demo{public static void main(String[] args){Body body = new Body();//通過外部類的對象,調用外部類的方法,里面間接在使用內部類Heartbody.methodBody();Body.Heart heart = new Body().new Heart();heart.beat();} }

    內部類的同名變量訪問
    如果出現了重名現象,那么格式是:外部類.this.外部類成員變量名

    public class Outer{int num = 10;public class Inner{int num = 20;public void methodInner(){int num = 30;System.out.println(num);//局部變量,就近原則System.out.println(this.num);//內部類的成員變量System.out.println(Outer.this.num);//外部類的成員變量}} }

    局部內部類的定義
    定義格式:
    修飾符 class 外部類名稱 {
    修飾符 返回值類型 外部類方法名稱(參數列表{
    class 局部內部類名稱{
    // …
    }
    }
    }

    局部內部類的final問題

    局部內部類,如果希望訪問所在方法的局部變量,那么這個局部變量必須是有效final的
    備注:從Java8開始,只要局部變量事實不變,那么final關鍵字可以省略

    匿名內部類
    如果接口的實現類(或者是父類的子類)只需要使用唯一的一次
    那么這種情況下就可以省略掉該類的定義,而改為使用匿名內部類

    匿名內部類的定義:
    接口名稱 對象名 = new 接口名稱(){
    //覆蓋重寫所有抽象方法
    }

    public class Demo{public static void main(String[] args){//MyInterface obj = new MyInterfaceImpl();//obj.method();//MyInterface some = new MyInterface();//使用匿名內部類MyInterface obj = new MyInterface(){public void method(){System.out.println(“匿名內部類實現了方法”)}};obj.method;} }
  • 匿名內部類,在創建對象時,只能使用唯一一次
    如果希望多次創建對象,而且類的內容一樣的話,那么就必須使用單獨定義的實現類
  • 匿名對象,在調用方法的時候,只能調用唯一一次
    如果希望同一個對象,調用多次方法,那么必須給對象起個名字
  • 匿名內部類是省略實現類/子類名稱,但是匿名對象是省略了對象名稱
  • 總結

    以上是生活随笔為你收集整理的Java学习笔记_多态/内部类的全部內容,希望文章能夠幫你解決所遇到的問題。

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