人生苦短我學Java-6-面向物件之類與方法定義/例項化/過載/可變個數形參
阿新 • • 發佈:2020-12-20
一、面向物件
1、面向物件的三大特徵- 封裝
- 繼承
- 多型
- 類是對一類事物的描述,是抽象的、概念上的定義。重點就是類的設計(比如我們人類,是有哪些特徵等等)
- 物件是實際存在的該類事物的每個個體,因而也稱為例項(instance)。
類就好比如是:人類
物件:實實在在的我
如下:建立PersonTest類,其中有屬性有方法:
package com.object; /* @USER PPL-泡泡龍 or 廣深小龍 @date 2020-12-20 12:42 */ public class Person {public static void main(String[] args) { PersonTest p1 = new PersonTest(); p1.name = "ppl"; p1.age = 18; p1.isMale = true; p1.eat(); p1.sleep(); p1.talk(); } } class PersonTest { // 屬性 String name; int age; boolean isMale;// 方法 public void eat() { System.out.println("人吃什麼?答:人間煙火"); } public void sleep() { System.out.println("人需要睡覺休息,專家建議每天睡眠至少8小時"); } public void talk() { System.out.println("人可以說話,但我說的是中文"); } }
3、類屬性(成員變數)與區域性變數
也意味著作用域不一樣。
特別需要注意:區域性變數在呼叫前是沒有初始值,所以一定要在呼叫前初始化值,除了形參以呼叫時傳入;
package com.object; /* @USER PPL-泡泡龍 or 廣深小龍 @date 2020-12-20 12:15 */ public class ObjectTest { public static void main(String[] args) { User user = new User(); user.name = "泡泡龍"; user.age = 18; user.eat("米飯"); } } class User { // 類的變數 String name; int age; public void eat(String food) { System.out.println("姓名:" + name + " 吃的是什麼? 答案:" + food); System.out.println("年齡只有:" + age); String IsMale = "true"; // 方法的變數(區域性變數) System.out.println("我是區域性變數:" + IsMale); } }
4、類的方法宣告
- pubilc String xx:定義了返回值為String型別,就一定要有String返回值;
- pubilc String xx(String xxx){}:形參xxx,可以多個形參,逗號分開,呼叫該方法時傳入;
- 方法中也可以呼叫類的屬性;
- return既是結束這個方法執行,並返回值;(結束後面不可再執行,因已結束方法);
- 在類中的方法A它可以呼叫方法B等等,特殊的遞迴,方法A呼叫方法A;(慎用遞迴)
- 方法中,不能再定義方法;(Python裡面是可以的,常用裝飾器便如此)
package com.object; /* @USER PPL-泡泡龍 or 廣深小龍 @date 2020-12-20 16:20 */ public class ClassM { public static void main(String[] args) { ClassTest m = new ClassTest(); m.eat("米飯"); System.out.println(m.name); System.out.println(m.getName()); System.out.println(m.returnName()); // 引用型別 ClassTest[] st = new ClassTest[3]; st[0] = new ClassTest(); System.out.println("111" + st[0].name); } } class ClassTest { // 類屬性 String name = "泡泡龍"; // 形參:food,可以多個逗號分開 public void eat(String food) { System.out.println("吃的是:" + food); } // 有返回值:return,需指定返回的型別,比如:String // 但是命名指定了返回值的型別,就一定要有:return返回值 public String getName() { eat("麵條"); // 方法內部呼叫方法 return name; } // 判斷語句,需要在各個分支都要return public String returnName() { if ("泡泡".contains(name)) { return name; } else if ("泡泡龍".contains(name)) { return "1"; } else { return "-1"; } } }
輸出:
吃的是:米飯
泡泡龍
吃的是:麵條
泡泡龍
1
111泡泡龍
5、匿名例項化物件
在例項化中,沒有賦值給一個變數,即為匿名例項化;
特徵:只能呼叫一次(再呼叫就是新的呼叫,記憶體解析會重新執行)new ClassName().方法名;
package com.object; /* @USER PPL-泡泡龍 or 廣深小龍 @date 2020-12-20 17:47 */ public class Instance { public static void main(String[] args) { // 正常例項化 PersonT p = new PersonT(); p.GetAge(); // 匿名例項化 new PersonT().GetAge(); } } class PersonT { int age = 8; public void GetAge() { System.out.println(age); } }
6、方法過載
同一個類,相同的方法名,引數不同包括形參個數,不同引數的型別。跟起它都沒有關係,比如返回值,修飾符等。
簡單來說處理不同資料型別的時候,可以定義不同型別,同名稱的方法,方便我們任何型別進行呼叫。
package com.object1220; /* @USER PPL-泡泡龍 or 廣深小龍 @date 2020-12-20 19:47 */ public class OverLoad { // 方法過載,定義兩個同名的方法:print public String print(String str) { return str; } public int print(int num) { return num; } } class OverLoadTest { public static void main(String[] args) { OverLoad o = new OverLoad(); System.out.println(o.print("字串")); System.out.println(o.print(666)); } }
7、可變個數形參方法
格式:public void 方法名(資料型別... 變數名){}
- 也是可以形成方法過載,但也得遵循過載原來的規則;
- 傳參時可以傳入多個,通過變數名下標獲取或者遍歷獲取所以傳入的引數;
- 只能命名一個數據型別的可變個數形參;
package com.object1220; /* @USER PPL-泡泡龍 or 廣深小龍 @date 2020-12-20 20:18 */ public class Args { // 可變個數形參 public void eat(String... food) { // 遍歷可變形參 String strs = ""; for (int i = 0; i < food.length; i++) { strs += food[i] + " "; } System.out.println(strs); } public void eat(String food) { System.out.println("過載:" + food); } public void eat(int count) { System.out.println("過載,每天吃幾次?:" + count); } public static void main(String[] args) { Args a = new Args(); a.eat("1", "2", "3", "PPL"); a.eat("米飯"); a.eat(3); } }
輸出:
1 2 3 PPL
過載:米飯
過載,每天吃幾次?:3
感謝尚矽谷在B站開源教學視訊提供學習,歡迎來大家QQ交流群一起學習:482713805