<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 大數據學習筆記第8天 - 面向對象2 # ## 大綱 - 接口 - 多態 - 抽象類 - 內部類 - 匿名類 ## 代碼實例 E:\01\Java\day08\day08\day08\Demo2.java /* 抽象類多態 */ abstract class A{ //成員變量沒有多態性 int num = 10; public abstract void show(); //靜態方法 public static void method(){ System.out.println("A.method()..."); } } class B extends A{ int num = 20; public void show(){ System.out.println("B.show()..."); } //子類特有的方法 public void test(){ System.out.println("B.test()..."); } //靜態方法 public static void method(){ System.out.println("B.method()..."); } } // class Animal{ } class Dog extends Animal{ public void eat(){ System.out.println("dog.eat()..."); } } public class Demo2{ public static void main(String[] args){ Animal an = new Dog(); // an.eat(); Dog d = (Dog)an;//向下類型轉換 d.eat(); //抽象類多態(向上類型轉換) // A a = new B(); // a.method();//靜態方法沒有多態性 // System.out.println(a.num);//成員變量沒有多態性 // a.show(); // a.test();//站在抽象類角度,沒有test方法,不能調用 } } E:\01\Java\day08\day08\day08\HomeWork.java /* 定義一個抽象的運動員類,包含一個抽象方法:practice. 定義兩個實現子類:籃球運動員,足球運動員繼承自運動員抽象類. 定義接口:SpeakEnglish,包含抽象方法:speakEnglish.籃球運動員需要實現接口. 用代碼實現以上邏輯并做測試. */ // abstract class Sporter{ // public abstract void practice(); } interface SpeakEnglish{ public abstract void speakEnglish(); } class BasketballSporter extends Sporter implements SpeakEnglish{ public void practice(){ System.out.println("籃球運動員訓練"); } public void speakEnglish(){ System.out.println("籃球運動員可以說英語"); } } class FootballSporter extends Sporter{ public void practice(){ System.out.println("足球運動員訓練"); } } //測試類 public class HomeWork{ public static void main(String[] args){ BasketballSporter bs = new BasketballSporter(); bs.practice(); bs.speakEnglish(); FootballSporter fs = new FootballSporter(); fs.practice(); } } E:\01\Java\day08\day08\day08\InnerClassDemo.java /* 定義在類中的類稱為內部類,外邊的類稱為外部類. 內部類: 成員內部類: 局部內部類: */ class Outer{ private int a = 10; public int b = 20; static int c = 30; //非靜態的成員內部類,可以使用外部類的靜態和非靜態成員 class Inner{ //非靜態內部類不能定義靜態成員(變量,方法) // static int num1 = 10; int num2 = 20; public void show(){ System.out.println(a +","+ b +"," + c); } } //靜態內部類:可以定義靜態成員 static class Inner2{ static int num3 = 30; int num4 = 40; //只能訪問外部類的靜態成員 public void show(){ System.out.println(c); } } public void test(){ //局部內部類 class A{ public void show(){ System.out.println(a +","+ b +"," + c); } } } } // public class InnerClassDemo{ public static void main(String[] args){ //Inner Outer.Inner in1 = new Outer().new Inner(); in1.show(); //Inner2 Outer.Inner2 in2 = new Outer.Inner2(); in2.show(); } } E:\01\Java\day08\day08\day08\InnerClassDemo2.java /* 內部類的主要應用: 實現接口或者繼承父類 */ abstract class Animal{ public abstract void eat(); } interface A{ public abstract void method(); } class Test{ public void test(Animal an){//an = ... //抽象類多態 an.eat(); } public void test2(A a){ a.method(); } } //第一版代碼:寫一個真正的實現類 /* class Dog extends Animal{ public void eat(){ System.out.println("Dog.eat()..."); } } */ //測試類 public class InnerClassDemo2{ /* 第二版代碼: 用內部類的形式實現繼承抽象類 */ /* static class Dog extends Animal{ public void eat(){ System.out.println("Dog.eat()..."); } } */ public static void main(String[] args){ Test t = new Test(); // Dog d = new Dog(); //實現抽象類中的抽象方法,和創建對象一次完成:匿名內部類 t.test(new Animal(){ public void eat(){ System.out.println("Dog.eat()..."); } }); //匿名內部類對象,實現接口 t.test2(new A(){ public void method(){ System.out.println("A.method()..."); } }); } } E:\01\Java\day08\day08\day08\InterfaceDemo1.java /* 接口和接口之間是繼承關系: 多個接口中的共同部分可以抽取出來到一個單獨的接口中 實現類和接口間的關系:implements 實現類和抽象類之間的關系:extends 抽象類和接口之間的關系:extends 接口和接口之間的關系:extends */ interface A{ public static final int a = 10; public abstract void m1(); } interface B{ public abstract void m2(); } interface C extends A,B{ } class D implements C{ public void m1(){ System.out.println("m1()"); } public void m2(){ System.out.println("m2()"); } } public class InterfaceDemo1{ public static void main(String[] args){ /* D d = new D(); d.m1(); d.m2(); */ //直接使用接口中的常量 // System.out.println(A.a); //接口多態:接口類型的變量,指向子類實例對象 A a = new D(); a.m1(); } } E:\01\Java\day08\day08\day08\InterfaceDemo2.java /* 接口使用場景: 1.接口作為形參類型 實際傳遞的是實現子類的對象 2.接口作為返回值類型 實際返回的是實現子類的對象 */ interface A{ public abstract void show(); } class B implements A{ public void show(){ System.out.println("B.show()..."); } } class Test{ public void test(A a){//相當于有一條賦值語句: a = ... a.show(); //既然a指向的是一個實現類的對象,就可以調用show方法 } public A getA(){ return new B(); } } //測試類 public class InterfaceDemo2{ public static void main(String[] args){ B b = new B(); Test t = new Test(); t.test(b);//B.show()... //方法的返回值是接口類型,實際返回的是實現子類的對象 //接口類型的變量 指向了實現子類的實例對象(接口多態) A a = t.getA(); a.show();//B.show()... 既然a指向的是一個實現類的對象,就可以調用show方法 } } *E:\01\Java\day08\day08\day08\PolymorphismDemo.java* /* 多態:同一個變量的不同形態 普通類多態: 父類和子類都是普通類 抽象類多態: 抽象類和實現子類之間的多態 接口多態: 接口和實現子類之間的多態 */ class Animal{ public void eat(){ System.out.println("animal eat()..."); } } class Dog extends Animal{ public void eat(){ System.out.println("Dog eat()..."); } //子類特有的方法 public void test(){ System.out.println("Dog test()..."); } } class Cat extends Animal{ public void eat(){ System.out.println("Cat eat()..."); } //子類特有的方法 public void test(){ System.out.println("Cat test()..."); } } // public class PolymorphismDemo{ public static void main(String[] args){ //變量類型和實例對象類型一致.編譯期類型和運行期類型相同 Animal an = new Animal(); an.eat(); //父類類型的變量指向的是子類實例對象 //=左邊是編譯期類型,右邊是運行時類型 Animal an2 = new Dog(); an2.eat();// an2.test();//找不到符號,站在父類的角度看,看不到test方法. /* an2 = new Cat(); an2.eat();// */ } }
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看