1. 程式人生 > 實用技巧 >人生苦短我學Java-6-面向物件之類與方法定義/例項化/過載/可變個數形參

人生苦短我學Java-6-面向物件之類與方法定義/例項化/過載/可變個數形參

一、面向物件

1、面向物件的三大特徵
  • 封裝
  • 繼承
  • 多型
如果要說是四大特徵就多加:抽象性 2、類(Class)和物件(Object)是面向物件的核心概念。
  • 類是對一類事物的描述,是抽象的、概念上的定義。重點就是類的設計(比如我們人類,是有哪些特徵等等)
  • 物件是實際存在的該類事物的每個個體,因而也稱為例項(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