国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

黑馬程序員_JavaSE學習總結第10天_面向對象5

2019-11-15 00:13:17
字體:
來源:轉載
供稿:網友
黑馬程序員_javaSE學習總結第10天_面向對象5

------- android培訓、java培訓、期待與您交流! ----------

10.01 運動員和教練案例分析

教練和運動員案例:運動員分乒乓球運動員和籃球運動員,教練分乒乓球教練和籃球教練。為了出國交流,跟乒乓球相關的人員都需要學習英語。

分析:

10.02 運動員和教練案例實現

  1 //定義一個說英語的接口  2 interface SpeakEnglish   3 {  4     //說英語  5     public abstract void speak();  6 }  7   8 //定義人的抽象類  9 abstract class Person  10 { 11     PRivate String name; 12     private int age; 13      14     public Person() {} 15      16     public Person(String name,int age)  17     { 18         this.name = name; 19         this.age = age; 20     } 21      22     public String getName()  23     { 24         return name; 25     } 26      27     public void setName(String name)  28     { 29         this.name = name; 30     } 31      32     public int getAge()  33     { 34         return age; 35     } 36      37     public void setAge(int age)  38     { 39         this.age = age; 40     } 41      42     //睡覺 43     public void sleep()  44     { 45         System.out.println("人都是要睡覺的"); 46     } 47      48     //吃飯 49     public abstract void eat(); 50 } 51  52 //定義運動員抽象類 53 abstract class Player extends Person  54 { 55     public Player() {} 56      57     public Player(String name,int age)  58     { 59         super(name,age); 60     } 61      62     //學習 63     public abstract void study(); 64 } 65  66 //定義教練抽象類 67 abstract class Coach extends Person  68 { 69     public Coach() {} 70      71     public Coach(String name,int age)  72     { 73         super(name,age); 74     } 75      76     //教學 77     public abstract void teach(); 78 } 79  80 //定義乒乓球運動員具體類 81 class PingPangPlayer extends Player implements SpeakEnglish  82 { 83     public PingPangPlayer(){} 84      85     public PingPangPlayer(String name,int age)  86     { 87         super(name,age); 88     } 89      90     //吃 91     public void eat()  92     { 93         System.out.println("乒乓球運動員吃大白菜,喝小米粥"); 94     } 95      96     //學習 97     public void study()  98     { 99         System.out.println("乒乓球運動員學習如何發球和接球");100     }101     102     //說英語103     public void speak() 104     {105         System.out.println("乒乓球運動員說英語");106     }107 }108 109 //定義籃球運動員具體類110 class BasketballPlayer extends Player 111 {112     public BasketballPlayer(){}113     114     public BasketballPlayer(String name,int age) 115     {116         super(name,age);117     }118     119     //吃120     public void eat() 121     {122         System.out.println("籃球運動員吃牛肉,喝牛奶");123     }124     125     //學習126     public void study() 127     {128         System.out.println("籃球運動員學習如何運球和投籃");129     }130 }131 132 //定義乒乓球教練具體類133 class PingPangCoach extends Coach implements SpeakEnglish 134 {135     public PingPangCoach(){}136     137     public PingPangCoach(String name,int age) 138     {139         super(name,age);140     }141     142     //吃143     public void eat() 144     {145         System.out.println("乒乓球教練吃小白菜,喝大米粥");146     }147     148     //教149     public void teach() 150     {151         System.out.println("乒乓球教練教如何發球和接球");152     }153     154     //說英語155     public void speak() 156     {157         System.out.println("乒乓球教練說英語");158     }159 }160 161 //定義籃球教練具體類162 class BasketballCoach extends Coach 163 {164     public BasketballCoach(){}165     166     public BasketballCoach(String name,int age) 167     {168         super(name,age);169     }170     171     //吃172     public void eat() 173     {174         System.out.println("籃球教練吃羊肉,喝羊奶");175     }176     177     //教178     public void teach() 179     {180         System.out.println("籃球教練教如何運球和投籃");181     }182 }

10.03 運動員和教練案例測試

  1 //定義一個說英語的接口  2 interface SpeakEnglish   3 {  4     //說英語  5     public abstract void speak();  6 }  7   8 //定義人的抽象類  9 abstract class Person  10 { 11     private String name; 12     private int age; 13      14     public Person() {} 15      16     public Person(String name,int age)  17     { 18         this.name = name; 19         this.age = age; 20     } 21      22     public String getName()  23     { 24         return name; 25     } 26      27     public void setName(String name)  28     { 29         this.name = name; 30     } 31      32     public int getAge()  33     { 34         return age; 35     } 36      37     public void setAge(int age)  38     { 39         this.age = age; 40     } 41      42     //睡覺 43     public void sleep()  44     { 45         System.out.println("人都是要睡覺的"); 46     } 47      48     //吃飯 49     public abstract void eat(); 50 } 51  52 //定義運動員抽象類 53 abstract class Player extends Person  54 { 55     public Player() {} 56      57     public Player(String name,int age)  58     { 59         super(name,age); 60     } 61      62     //學習 63     public abstract void study(); 64 } 65  66 //定義教練抽象類 67 abstract class Coach extends Person  68 { 69     public Coach() {} 70      71     public Coach(String name,int age)  72     { 73         super(name,age); 74     } 75      76     //教學 77     public abstract void teach(); 78 } 79  80 //定義乒乓球運動員具體類 81 class PingPangPlayer extends Player implements SpeakEnglish  82 { 83     public PingPangPlayer(){} 84      85     public PingPangPlayer(String name,int age)  86     { 87         super(name,age); 88     } 89      90     //吃 91     public void eat()  92     { 93         System.out.println("乒乓球運動員吃大白菜,喝小米粥"); 94     } 95      96     //學習 97     public void study()  98     { 99         System.out.println("乒乓球運動員學習如何發球和接球");100     }101     102     //說英語103     public void speak() 104     {105         System.out.println("乒乓球運動員說英語");106     }107 }108 109 //定義籃球運動員具體類110 class BasketballPlayer extends Player 111 {112     public BasketballPlayer(){}113     114     public BasketballPlayer(String name,int age) 115     {116         super(name,age);117     }118     119     //吃120     public void eat() 121     {122         System.out.println("籃球運動員吃牛肉,喝牛奶");123     }124     125     //學習126     public void study() 127     {128         System.out.println("籃球運動員學習如何運球和投籃");129     }130 }131 132 //定義乒乓球教練具體類133 class PingPangCoach extends Coach implements SpeakEnglish 134 {135     public PingPangCoach(){}136     137     public PingPangCoach(String name,int age) 138     {139         super(name,age);140     }141     142     //吃143     public void eat() 144     {145         System.out.println("乒乓球教練吃小白菜,喝大米粥");146     }147     148     //教149     public void teach() 150     {151         System.out.println("乒乓球教練教如何發球和接球");152     }153     154     //說英語155     public void speak() 156     {157         System.out.println("乒乓球教練說英語");158     }159 }160 161 //定義籃球教練具體類162 class BasketballCoach extends Coach 163 {164     public BasketballCoach(){}165     166     public BasketballCoach(String name,int age) 167     {168         super(name,age);169     }170     171     //吃172     public void eat() 173     {174         System.out.println("籃球教練吃羊肉,喝羊奶");175     }176     177     //教178     public void teach() 179     {180         System.out.println("籃球教練教如何運球和投籃");181     }182 }183 class Demo184 {185     public static void main(String[] args)186     {187         //測試運動員(乒乓球運動員和籃球運動員)188         //乒乓球運動員189         PingPangPlayer ppp = new PingPangPlayer();190         ppp.setName("王浩");191         ppp.setAge(33);192         System.out.println(ppp.getName()+"---"+ppp.getAge());193         ppp.eat();194         ppp.sleep();195         ppp.study();196         ppp.speak();197         System.out.println("----------------");198         199         //籃球運動員200         BasketballPlayer bp = new BasketballPlayer();201         bp.setName("姚明");202         bp.setAge(34);203         System.out.println(bp.getName()+"---"+bp.getAge());204         bp.eat();205         bp.sleep();206         bp.study();207         //bp.speak(); //沒有該方法208     }209 }

運行結果:

王浩---33乒乓球運動員吃大白菜,喝小米粥人都是要睡覺的乒乓球運動員學習如何發球和接球乒乓球運動員說英語----------------姚明---34籃球運動員吃牛肉,喝牛奶人都是要睡覺的籃球運動員學習如何運球和投籃

10.04 類名作為形式參數

形式參數和返回值問題

形式參數:基本類型、引用類型(類、抽象類、接口)

返回值類型:基本類型、引用類型(類、抽象類、接口)

例:

 1 class Student 2 { 3     public void study() 4     { 5         System.out.println("好好學習"); 6     } 7 } 8 class StudentTest 9 {10     //形式參數是一個類11     public void method(Student s)12     {13         s.study();14     }15 }16 class Demo17 {18     public static void main(String[] args)19     {20         StudentTest st = new StudentTest();21         Student s = new Student();22 //需要的是該類的對象23         st.method(s);24     }25 }

運行結果:

好好學習

10.05 抽象類名作為形式參數

例:

 1 abstract class Person 2 { 3     public abstract void study(); 4 } 5  6 class Student extends Person 7 { 8     public void study() 9     {10         System.out.println("好好學習");11     }12 }13 class PersonTest14 {15     //形式參數是一個抽象類16     public void method(Person p)17     {18         p.study();19     }20 }21 class Demo22 {23     public static void main(String[] args)24     {25         PersonTest pt = new PersonTest();26         Person p = new Student();27         //需要該抽象類的子類對象28         pt.method(p);29     }30 }

運行結果:

好好學習

10.06 接口名作為形式參數

例:

 1 interface Love 2 { 3     public abstract void love(); 4 } 5 class Teacher implements Love 6 { 7     public void love() 8     { 9         System.out.println("老師愛學生");10     }11 }12 class LoveTest13 {14     //形式參數是一個接口15     public void method(Love l)16     {17         l.love();18     }19 }20 class Demo21 {22     public static void main(String[] args)23     {24         LoveTest lt = new LoveTest();25         Love l = new Teacher();26         //需要該接口的實現類對象27         lt.method(l);28     }29 }

運行結果:

老師愛學生

10.07 類名作為返回值類型

例:

 1 class Student 2 { 3     public void study() 4     { 5         System.out.println("好好學習"); 6     } 7 } 8 class StudentTest 9 {10     //返回值是一個類11     public Student getStudent()12     {13         //真實返回的是該類的對象14         return new Student();15     }16 }17 class Demo18 {19     public static void main(String[] args)20     {21         StudentTest st = new StudentTest();22         Student s = st.getStudent();23         s.study();24     }25 }

10.08 抽象類名作為返回值類型

例:

 1 abstract class Person 2 { 3     public abstract void study(); 4 } 5 class Student extends Person 6 { 7     public void study() 8     { 9         System.out.println("好好學習");10     }11 }12 class PersonTest13 {14     //返回值是一個抽象類15     public Person getPerson()16     {17         //真實返回的是抽象類的子類對象18         return new Student();19     }20 }21 class Demo22 {23     public static void main(String[] args)24     {25         PersonTest pt = new PersonTest();26         Person p = pt.getPerson();27         p.study();28     }29 }

10.09 接口名作為返回值類型

例:

 1 interface Love 2 { 3     public abstract void love(); 4 } 5 class Teacher implements Love 6 { 7     public void love() 8     { 9         System.out.println("老師愛學生");10     }11 }12 class LoveTest13 {14     //返回值是一個接口15     public Love getLove()16     {17         //真實返回的是該接口的實現類對象18         return new Teacher();19     }20 }21 class Demo22 {23     public static void main(String[] args)24     {25         LoveTest lt = new LoveTest();26         Love l = lt.getLove();27         l.love();28     }29 }

10.10 鏈式編程

例:

 1 class Student 2 { 3     public void study() 4     { 5         System.out.println("好好學習"); 6     } 7 } 8 class StudentTest 9 {10     public Student getStudent()11     {12         return new Student();13     }14 }15 class Demo16 {17     public static void main(String[] args)18     {19         //鏈式編程,每次調用方法完畢后返回的是一個對象20         new StudentTest().getStudent().study();21     }22 }

10.11 package關鍵字的概述及作用

包的概述:其實就是文件夾

作用:對類進行分類管理

包的劃分:

例:學生的增加,刪除,修改,查詢和老師的增加,刪除,修改,查詢

基本的劃分:

按照功能分

cn.itcast.add(AddStudent,AddTeacher)

cn.itcast.delete(DeleteStudent,DeleteTeacher)

cn.itcast.update(UpdateStudent,UpdateTeacher)

cn.itcast.find(FindStudent,FindTeacher)

按照模塊分

cn.itcast.teacher(AddTeacher,DeleteTeacher,UpdateTeacher,FindTeacher)

cn.itcast.student(AddStudent,DeleteStudent,UpdateStudent,FindStudent)

10.12 包的定義及注意事項

定義包的格式:package 包名; 多級包用.分開即可

注意事項:

1.package語句必須是程序的第一條可執行的代碼

2.package語句在一個java文件中只能有一個

3.如果沒有package,默認表示無包名

10.13 帶包的類編譯和運行

手動式

1:javac編譯當前類文件

2:手動建立包對應的文件夾

3:把1步驟的class文件放到2步驟的最終文件夾下

4:通過java命令執行。

注意:需要帶包名稱執行

例:

1 package cn.itcast;2 class Demo3 {4     public static void main(String[] args)5     {6         System.out.println("hello world");7     }8 }

運行:

自動式

1:javac編譯的時候帶上-d即可

例:javac -d . HelloWorld.java (-d后面跟的是目錄, .表示當前目錄)

2:通過java命令執行。需要帶包名稱執行。

10.14 不同包下類之間的訪問

例:

定義兩個類:Demo,Test。

Demo:測試方法(main)

Test:求和方法(sum)

運行步驟如下:

10.15 import關鍵字的概述和使用

導包概述:不同包下的類之間的訪問,每次使用不同包下的類的時候,都需要加包的全路徑。比較麻煩。這個時候,java就提供了導包的功能。

導包格式:import 包名;

注意:這種方式導入是到類的名稱。雖然可以最后寫*,但是不建議。使用哪個類就導入哪個類。

例:

面試題:package,import,class有沒有順序關系?

有,package>import>class

package:只能有一個

import:可以有多個

class:可以有多個,建議只寫一個

10.16 四種權限修飾符

10.17 類及其組成所使用的常見修飾符

權限修飾符:public、protected、默認的、private

狀態修飾符:static、final

抽象修飾符:abstract

1.類:默認,public、final、abstract。其中使用public居多

2.成員變量:四種權限修飾符均可,final、static。其中使用private居多

3.構造方法:四種權限修飾符均可,其他不可以。其中使用public居多

4.成員方法:四種權限修飾符均可,fianl、static、abstract。其中使用public居多

10.18 內部類概述和訪問特點

把類定義在其他類的內部,這個類就被稱為內部類。

例:在類A中定義了一個類B,類B就是內部類。

內部類的訪問特點:

內部類可以直接訪問外部類的成員,包括私有。

外部類要訪問內部類的成員,必須創建對象。

例:

 1 class Outer 2 { 3     private int num = 10; 4 //內部類 5     class Inner 6     { 7         public void show() 8         { 9             //內部類可以直接訪問外部類的成員,包括私有10             System.out.println("show run..."+num);11         }12     }13     public void method()14     {15         //外部類要訪問內部類的方法必須創建內部類的對象16         Inner in = new Inner();17         in.show();18     }19 }

10.19 內部類分類及成員內部類的使用

按照內部類在類中定義的位置不同,可以分為如下兩種格式:

在成員位置稱為成員內部類

在局部位置稱為局部內部類

例:

 1 class Outer 2 { 3     //成員內部類 4     class Inner 5     { 6     } 7     public void method() 8     { 9         //局部內部類10         class Inner11         {12         }13     }14 }

外界創建成員內部類對象的格式:

外部類名.內部類名對象名 = 外部類對象.內部類對象;

例:

 1 class Outer 2 { 3     private int num = 10; 4     //成員內部類 5     class Inner 6     { 7         public void show() 8         { 9             System.out.println(num);10         }11     }12 }13 class Demo14 {15     public static void main(String[] args)16     {17         //訪問Inner類的show()方法18      //外部類名.內部類名 對象名 = 外部類對象.內部類對象;19         Outer.Inner oi = new Outer().new Inner();20         oi.show();21     }22 }

10.20 成員內部類的常見修飾符及應用

成員內部類的常見修飾符

1.private 為了保證數據的安全性

例:

 1 class Outer 2 { 3     //成員內部類,私有 4     private class Inner 5     { 6         public void show() 7         { 8             System.out.println("滿足條件輸出"); 9         }10     }11     public void method(int num)12     {13         if(num > 0)14         {15             Inner i = new Inner();16             i.show();17         }18     }19 }20 class Demo21 {22     public static void main(String[] args)23     {24         Outer o = new Outer();25         o.method(-8);26     }27 }

上例中,只有當method方法傳入的參數大于0時,才可以創建內部類的對象調用方法,否則不創建

2.static 為了讓數據訪問更方便

  • 被靜態修飾的成員內部類只能訪問外部類的靜態成員
  • 內部類被靜態修飾后的方法可以有靜態方法也可以有非靜態方法

例:

 1 class Outer 2 { 3     private static int num = 10; 4     //成員內部類,靜態 5     public static class Inner 6     { 7         //靜態方法 8         public static void show1() 9         {10             System.out.println(num);11         }12         //非靜態方法13         public void show2()14         {15             System.out.println(num);16         }17     }18 }19 class Demo20 {21     public static void main(String[] args)22     {23         //成員內部類被靜態修飾后的訪問方式:24         //外部類名.內部類名 對象名 = new 外部類名.內部類名();25         Outer.Inner oi = new Outer.Inner();26         oi.show1();27         oi.show2();28 29         //靜態方法show1()的另一種調用方式30         Outer.Inner.show1();31     }32 }

10.21 成員內部類的面試題

分別輸出30、20、10

 1 class Outer 2 { 3     public int num = 10; 4     class Inner 5     { 6         public int num = 20; 7         public void show() 8         { 9             int num = 30;10             System.out.println(num);//3011             System.out.println(this.num);//2012             System.out.println(new Outer().num);//1013             System.out.println(Outer.this.num);//1014         }15     }16 }17 class Demo18 {19     public static void main(String[] args)20     {21         Outer.Inner oi = new Outer().new Inner();22         oi.show();23     }24 }

10.22 局部內部類訪問局部變量的問題

1.可以直接訪問外部類的成員

2.在局部位置可以創建內部類對象,通過對象調用內部類方法,來使用局部內部類功能

例:

 1 class Outer 2 { 3     private int num = 10; 4     public void method() 5     { 6         //局部內部類 7         class Inner 8         { 9             public void show()10             {11                 //可以直接訪問外部類的成員12                 System.out.println(num);13             }14         }15         //在局部位置創建內部類對象16         Inner i = new Inner();17         //通過對象調用內部類方法18         i.show();19     }20 }21 class Demo22 {23     public static void main(String[] args)24     {25         Outer o = new Outer();26         o.method();27     }28 }

局部內部類訪問局部變量的注意事項:

例:

 1 class Outer 2 { 3     public void method() 4     { 5         //局部變量 6         final int num = 20; 7         //局部內部類 8         class Inner 9         {10             public void show()11             {12                 //局部內部類訪問局部變量,該局部變量必須被聲明為最終類型13                 System.out.println(num);14             }15         }16 17         Inner i = new Inner();18         i.show();19     }20 }21 class Demo22 {23     public static void main(String[] args)24     {25         Outer o = new Outer();26         o.method();27     }28 }

因為局部變量會隨著方法的調用完畢而消失,這個時候,局部對象并沒有立馬從堆內存中消失,還要使用那個變量。為了讓數據還能繼續被使用,就用fianl修飾,這樣,在堆內存里面存儲的其實是一個常量值。

10.23 匿名內部類的格式和理解

匿名內部類就是內部類的簡化寫法。

前提:存在一個類或者接口,這里的類可以是具體類也可以是抽象類。

格式:new 類名或者接口名() {重寫方法;}

本質:是一個繼承了該類或者實現了該接口的子類匿名對象

例:

10.24 匿名內部類的方法調用

例:

 1 interface Inter 2 { 3     public abstract void show1(); 4     public abstract void show2(); 5 } 6 class Outer 7 { 8     public void method() 9     {10         /* 一個方法的調用11         new Inter()12         {13             public void show1()14             {15                 System.out.println("show1");16             }17         }.show1();18         */19         //兩個方法的調用20         Inter i = new Inter()21         {22             public void show1()23             {24                 System.out.println("show1");25             }26             public void show2()27             {28                 System.out.println("show2");29             }30         };31         i.show1();32         i.show2();33     }34 }35 class Demo36 {37     public static void main(String[] args)38     {39         Outer o = new Outer();40         o.method();41     }42 }

10.25 匿名內部類在開發中的應用

例:

 1 interface Person 2 { 3     public abstract void study(); 4 } 5 class PersonDemo 6 { 7     public void method(Person p) 8     { 9         p.study();10     }11 }12 class Demo13 {14     public static void main(String[] args)15     {16         PersonDemo pd = new PersonDemo();17         pd.method(new Person()18         {19             public void study()20             {21                 System.out.println("好好學習");22             }23         });24     }25 }

當函數參數是接口類型時,而且接口中的方法不超過三個,可以用匿名內部類作為實際參數進行傳遞

10.26 匿名內部類的面試題

按照要求,補齊代碼,要求在控制臺輸出”HelloWorld”

 1 interface Inter  2 {  3     void show();  4 } 5 class Outer  6 {  7     //補齊代碼  8 } 9 class Demo10 {11     public static void main(String[] args)12     {13         Outer.method().show();14     }15 }

補齊代碼:

 1 /* 2 分析: 3 1:Outer.method()可以看出method()是Outer中的一個靜態方法 4 2:Outer.method().show()可以看出method()方法的返回值是一個對象。 5 又由于接口Inter中有一個show()方法,所以method()方法的返回值類型是一個接口。 6 */ 7 interface Inter  8 {  9     void show(); 10 }11 class Outer 12 { 13     //補齊代碼 14     public static Inter method()15     {16         return new Inter()17         {18             public void show()19             {20                 System.out.println("helloworld");21             }22         };23     }24 }25 class Demo26 {27     public static void main(String[] args)28     {29         Outer.method().show();30     }31 }


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贵定县| 永年县| 务川| 华宁县| 长岭县| 阜城县| 玛多县| 鹰潭市| 揭东县| 安岳县| 阿拉善盟| 鄢陵县| 闵行区| 高雄市| 灵丘县| 斗六市| 宁明县| 鹤壁市| 横峰县| 灵璧县| 都兰县| 丰台区| 阳西县| 奎屯市| 芜湖市| 神农架林区| 凯里市| 常山县| 建平县| 拜泉县| 虹口区| 彩票| 达孜县| 壤塘县| 利津县| 灵寿县| 都昌县| 西畴县| 潞城市| 新兴县| 龙口市|