首頁常見問題正文

Java培訓(xùn):類、接口作為參數(shù)和返回值詳解

更新時(shí)間:2023-09-21 來源:黑馬程序員 瀏覽量:

 1.類作為方法參數(shù)

  (1)基本思想

  在編寫程序中,會經(jīng)常碰到調(diào)用的方法要接收的是一個(gè)類類型的情況,那么這時(shí),要向方法中傳入該類的對象。因?yàn)橐粋€(gè)變量要想使用必須先賦值,才能使用,不賦值不能用,包括引用類型的變量,引用類型的變量其實(shí)是棧內(nèi)存中的一塊空間,必須在堆內(nèi)存中開辟對應(yīng)的空間,并將該空間的地址值賦值給變量后,該變量才能找到具體的空間,從而使用該空間的內(nèi)容。

  (2)代碼演示

//測試類
public class Test {
    public static void main(String[] args) {
        //創(chuàng)建Person對象
        Person p = new Person("張三",18);//假設(shè)對象地址:0x111
        //調(diào)用method方法
        //調(diào)用方法時(shí)相當(dāng)于:method(0x111)
        method(p);
    }

    /*
        定義一個(gè)方法method,用來接收一個(gè)Person對象,在方法中調(diào)用Person對象的show方法
        三要素:
        1.方法名稱:method
        2.參數(shù)列表:Person p
        3.返回值類型:void
     */
    //當(dāng)方法被調(diào)用時(shí),Person p將接收調(diào)用者傳遞過來的對象的地址值
    //Person p = 0x111 = new Person("張三",18)
    public static void method(Person p){
        p.show();
    }
}
public class Person{
    private String name;//姓名
    private int age;//年齡
    //空參構(gòu)造
    public Person() {
    }
    //滿參構(gòu)造
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //setters and getters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //展示信息的方法
    public void show(){
        System.out.println("我叫: "+name+", 年齡: "+age);
    }
}

       運(yùn)行結(jié)果

我叫: 張三, 年齡: 18

  2.類作為方法返回值

  (1)基本思想

  寫程序調(diào)用方法時(shí),我們以后會經(jīng)常碰到返回一個(gè)類類型的返回值,那么這時(shí),該方法要返回一個(gè)該類的對象。

  (2)代碼演示

public class Test {
    public static void main(String[] args) {
        //調(diào)用getPerson方法,獲取返回的Person對象
        //方法調(diào)用結(jié)束后:Person p = 0x111 = new Person("張三",18)
        Person p = getPerson();
        //調(diào)用p對象中的show方法
        p.show();
    }

    /*
        定義一個(gè)方法method,用來獲取一個(gè)Person對象,在方法中完成Person對象的創(chuàng)建
        三要素:
        1.方法名稱:getPerson
        2.參數(shù)列表:void
        3.返回值類型:Person
     */
    public static Person getPerson(){
        //創(chuàng)建Person對象
        Person p = new Person("張三",18);//假設(shè)對象地址:0x111
        return p;//return 0x111;
    }
}
public class Person{
    private String name;//姓名
    private int age;//年齡
    //空參構(gòu)造
    public Person() {
    }
    //滿參構(gòu)造
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //setters and getters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //展示信息的方法
    public void show(){
        System.out.println("我叫: "+name+", 年齡: "+age);
    }
}

  運(yùn)行結(jié)果

我叫: 張三, 年齡: 18

  3.抽象類作為方法參數(shù)

  (1)基本思想

  抽象類作為方法參數(shù)的情況也很多見。當(dāng)遇到方法參數(shù)為抽象類類型時(shí),要傳入一個(gè)實(shí)現(xiàn)抽象類所有抽象方法的子類對象。因?yàn)槌橄箢?不能創(chuàng)建對象,必須創(chuàng)建子類,傳遞子類對象

  (2)代碼演示

//測試類
public class Test {
    public static void main(String[] args) {
        //創(chuàng)建Person類的子類Student對象
        //通過多態(tài)的方式,創(chuàng)建一個(gè)Person類型的變量,而這個(gè)對象實(shí)際是Student對象
        Person p = new Student("張三",18);//假設(shè)對象地址:0x111
        //調(diào)用method方法
        //調(diào)用方法時(shí)相當(dāng)于:method(0x111)
        method(p);
    }

    /*
        定義一個(gè)方法method,用來接收一個(gè)Person類型的對象,在方法中調(diào)用Person類型對象的show方法
        三要素:
        1.方法名稱:method
        2.參數(shù)列表:Person p
        3.返回值類型:void
     */
    //當(dāng)方法被調(diào)用時(shí),Person p將接收調(diào)用者傳遞過來的對象的地址值
    //Person p = 0x111 = new Student("張三",18)
    public static void method(Person p){////抽象類作為參數(shù)
        //通過p變量調(diào)用show方法,這時(shí)實(shí)際調(diào)用的是Student對象中的show方法
        p.show();
    }
}
public abstract class Person{
    private String name;//姓名
    private int age;//年齡
    //空參構(gòu)造
    public Person() {
    }
    //滿參構(gòu)造
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //setters and getters
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //展示信息的方法
    public abstract void show();
}
public class Student extends Person {
    public Student() {
    }

    public Student(String name, int age) {
        super(name, age);
    }

    @Override
    public void show() {
        System.out.println("我叫: "+getName()+", 年齡: "+getAge());
    }
}

       運(yùn)行結(jié)果

我叫: 張三, 年齡: 18

  4.抽象類作為方法返回值

  (1)基本思想

  抽象類作為方法返回值的情況,這時(shí)需要返回一個(gè)實(shí)現(xiàn)抽象類所有抽象方法的子類對象。

  (2)代碼演示

//測試類
public class Test {
    public static void main(String[] args) {
        //調(diào)用getPerson方法,獲取返回的Person類的子類對象
        //方法調(diào)用結(jié)束后:Person p = 0x111 = new Student("張三",18)
        Person p = getPerson();
        //調(diào)用p對象中的show方法,其實(shí)是Student類重寫后的show方法
        p.show();
    }


    /*
        定義一個(gè)方法getPerson,用來獲取一個(gè)Person類的子類對象,在方法中完成Person類子類對象的創(chuàng)建
        三要素:
        1.方法名稱:getPerson
        2.參數(shù)列表:void
        3.返回值類型:Person
     */
    public static Person getPerson(){
        //創(chuàng)建Person對象
        Person p = new Student("張三",18);//假設(shè)對象地址:0x111
        return p;//return 0x111;
    }
}

  運(yùn)行結(jié)果

我叫: 張三, 年齡: 18

  5.接口作為方法的參數(shù)

  (1)基本思想

  接口作為方法參數(shù)的情況是很常見的,經(jīng)常會碰到。當(dāng)遇到方法參數(shù)為接口類型時(shí),那么該方法要傳入一個(gè)接口實(shí)現(xiàn)類對象。

  (2)代碼演示

//測試類
public class Test {
    public static void main(String[] args) {
        //通過多態(tài)的方式,創(chuàng)建一個(gè)Smoke類型的變量,而這個(gè)對象實(shí)際是Student
        Smoke s = new SmokeableStudent();//假設(shè)地址值為:0x666
        //調(diào)用method方法
        //調(diào)用方法時(shí)相當(dāng)于:method(0x666)
        method(s);
    }

    /*
        定義一個(gè)方法method,用來接收一個(gè)Smoke類型對象,在方法中調(diào)用Smoke對象的show方法
        三要素:
        1.方法名:method
        2.參數(shù)列表:Somke sm
        3.返回值類型:void
     */
    //當(dāng)調(diào)用方法時(shí),會傳遞該接口的實(shí)現(xiàn)類對象
    //Smoke sm = 0x666 = new SmokeableStudent()
    public static void method(Smoke sm){//接口作為參數(shù)
        //通過sm變量調(diào)用smoking方法,這時(shí)實(shí)際調(diào)用的是SmokeableStudent對象中的smoking方法
        sm.smoking();
    }
}
//接口
public interface Smoke{
    public abstract void smoking();//抽象方法
}
```



```
public class SmokeableStudent implements Smoke{
    @Override
    public void smoking() {
        System.out.println("課下吸口煙,賽過活神仙");
    }
}

       運(yùn)行結(jié)果

課下吸口煙,賽過活神仙

  6.接口作為方法的返回值

  (1)基本思想

  接口作為方法返回值的情況。當(dāng)遇到方法返回值是接口類型時(shí),那么該方法需要返回一個(gè)接口實(shí)現(xiàn)類對象。

  (2)代碼演示

//測試類
public class Test {
    public static void main(String[] args) {
        //調(diào)用method方法,獲取返回的會吸煙的對象
        //方法調(diào)用結(jié)束后:Smoke s = 0x666 = new SmokeableStudent()
        Smoke s = method();
        //通過s變量調(diào)用smoking方法,這時(shí)實(shí)際調(diào)用的是SmokeableStudent對象中的smoking方法
        s.smoking();
    }

    /*
        定義一個(gè)方法method,用來獲取一個(gè)具備吸煙功能的對象,并在方法中完成吸煙者的創(chuàng)建
     */
    public static Smoke method(){
        //多態(tài)的形式創(chuàng)建對象
        Smoke sm = new SmokeableStudent();//假設(shè)地址值:0x666
        return sm;//相當(dāng)于return 0x666
    }
}
//接口
public interface Smoke{
    public abstract void smoking();//抽象方法
}
```



```
public class SmokeableStudent implements Smoke{
    @Override
    public void smoking() {
        System.out.println("課下吸口煙,賽過活神仙");
    }
}

       運(yùn)行結(jié)果

課下吸口煙,賽過活神仙

  總結(jié):

  1.類作為方法參數(shù)時(shí),說明要向方法中傳入該類的對象

  2.類作為方法返回值時(shí),說明該方法要返回一個(gè)該類的對象。

  3.抽象類作為方法參數(shù)時(shí),說明要傳入一個(gè)實(shí)現(xiàn)抽象類所有抽象方法的子類對象。

  4.抽象類作為方法返回值時(shí),說明需要返回一個(gè)實(shí)現(xiàn)抽象類所有抽象方法的子類對象。

  5.接口作為方法參數(shù)時(shí),說明該方法要傳入一個(gè)接口實(shí)現(xiàn)類對象。

  6.接口作為方法返回值時(shí),說明該方法需要返回一個(gè)接口實(shí)現(xiàn)類對象。

  本文版權(quán)歸黑馬程序員Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!

  作者:黑馬程序員Java培訓(xùn)學(xué)院

  首發(fā):https://java.itheima.com

分享到:
在線咨詢 我要報(bào)名
和我們在線交談!