首頁(yè)常見(jiàn)問(wèn)題正文

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

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

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

  (1)基本思想

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

  (2)代碼演示

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

    /*
        定義一個(gè)方法method,用來(lái)接收一個(gè)Person對(duì)象,在方法中調(diào)用Person對(duì)象的show方法
        三要素:
        1.方法名稱(chēng):method
        2.參數(shù)列表:Person p
        3.返回值類(lèi)型:void
     */
    //當(dāng)方法被調(diào)用時(shí),Person p將接收調(diào)用者傳遞過(guò)來(lái)的對(duì)象的地址值
    //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.類(lèi)作為方法返回值

  (1)基本思想

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

  (2)代碼演示

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

    /*
        定義一個(gè)方法method,用來(lái)獲取一個(gè)Person對(duì)象,在方法中完成Person對(duì)象的創(chuàng)建
        三要素:
        1.方法名稱(chēng):getPerson
        2.參數(shù)列表:void
        3.返回值類(lèi)型:Person
     */
    public static Person getPerson(){
        //創(chuàng)建Person對(duì)象
        Person p = new Person("張三",18);//假設(shè)對(duì)象地址: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.抽象類(lèi)作為方法參數(shù)

  (1)基本思想

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

  (2)代碼演示

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

    /*
        定義一個(gè)方法method,用來(lái)接收一個(gè)Person類(lèi)型的對(duì)象,在方法中調(diào)用Person類(lèi)型對(duì)象的show方法
        三要素:
        1.方法名稱(chēng):method
        2.參數(shù)列表:Person p
        3.返回值類(lèi)型:void
     */
    //當(dāng)方法被調(diào)用時(shí),Person p將接收調(diào)用者傳遞過(guò)來(lái)的對(duì)象的地址值
    //Person p = 0x111 = new Student("張三",18)
    public static void method(Person p){////抽象類(lèi)作為參數(shù)
        //通過(guò)p變量調(diào)用show方法,這時(shí)實(shí)際調(diào)用的是Student對(duì)象中的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.抽象類(lèi)作為方法返回值

  (1)基本思想

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

  (2)代碼演示

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


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

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

我叫: 張三, 年齡: 18

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

  (1)基本思想

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

  (2)代碼演示

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

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



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

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

課下吸口煙,賽過(guò)活神仙

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

  (1)基本思想

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

  (2)代碼演示

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

    /*
        定義一個(gè)方法method,用來(lái)獲取一個(gè)具備吸煙功能的對(duì)象,并在方法中完成吸煙者的創(chuàng)建
     */
    public static Smoke method(){
        //多態(tài)的形式創(chuàng)建對(duì)象
        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("課下吸口煙,賽過(guò)活神仙");
    }
}

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

課下吸口煙,賽過(guò)活神仙

  總結(jié):

  1.類(lèi)作為方法參數(shù)時(shí),說(shuō)明要向方法中傳入該類(lèi)的對(duì)象

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

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

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

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

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

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

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

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

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