更新時間:2023-09-21 來源:黑馬程序員 瀏覽量:
在編寫程序中,會經(jīng)常碰到調(diào)用的方法要接收的是一個類類型的情況,那么這時,要向方法中傳入該類的對象。因為一個變量要想使用必須先賦值,才能使用,不賦值不能用,包括引用類型的變量,引用類型的變量其實是棧內(nèi)存中的一塊空間,必須在堆內(nèi)存中開辟對應(yīng)的空間,并將該空間的地址值賦值給變量后,該變量才能找到具體的空間,從而使用該空間的內(nèi)容。
//測試類 public class Test { public static void main(String[] args) { //創(chuàng)建Person對象 Person p = new Person("張三",18);//假設(shè)對象地址:0x111 //調(diào)用method方法 //調(diào)用方法時相當(dāng)于:method(0x111) method(p); } /* 定義一個方法method,用來接收一個Person對象,在方法中調(diào)用Person對象的show方法 三要素: 1.方法名稱:method 2.參數(shù)列表:Person p 3.返回值類型:void */ //當(dāng)方法被調(diào)用時,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); } }
運行結(jié)果
我叫: 張三, 年齡: 18
寫程序調(diào)用方法時,我們以后會經(jīng)常碰到返回一個類類型的返回值,那么這時,該方法要返回一個該類的對象。
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(); } /* 定義一個方法method,用來獲取一個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); } }
運行結(jié)果
我叫: 張三, 年齡: 18
抽象類作為方法參數(shù)的情況也很多見。當(dāng)遇到方法參數(shù)為抽象類類型時,要傳入一個實現(xiàn)抽象類所有抽象方法的子類對象。因為抽象類,不能創(chuàng)建對象,必須創(chuàng)建子類,傳遞子類對象
//測試類 public class Test { public static void main(String[] args) { //創(chuàng)建Person類的子類Student對象 //通過多態(tài)的方式,創(chuàng)建一個Person類型的變量,而這個對象實際是Student對象 Person p = new Student("張三",18);//假設(shè)對象地址:0x111 //調(diào)用method方法 //調(diào)用方法時相當(dāng)于:method(0x111) method(p); } /* 定義一個方法method,用來接收一個Person類型的對象,在方法中調(diào)用Person類型對象的show方法 三要素: 1.方法名稱:method 2.參數(shù)列表:Person p 3.返回值類型:void */ //當(dāng)方法被調(diào)用時,Person p將接收調(diào)用者傳遞過來的對象的地址值 //Person p = 0x111 = new Student("張三",18) public static void method(Person p){////抽象類作為參數(shù) //通過p變量調(diào)用show方法,這時實際調(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()); } }
運行結(jié)果
我叫: 張三, 年齡: 18
抽象類作為方法返回值的情況,這時需要返回一個實現(xiàn)抽象類所有抽象方法的子類對象。
//測試類 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方法,其實是Student類重寫后的show方法 p.show(); } /* 定義一個方法getPerson,用來獲取一個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; } }
運行結(jié)果
我叫: 張三, 年齡: 18
接口作為方法參數(shù)的情況是很常見的,經(jīng)常會碰到。當(dāng)遇到方法參數(shù)為接口類型時,那么該方法要傳入一個接口實現(xiàn)類對象。
//測試類 public class Test { public static void main(String[] args) { //通過多態(tài)的方式,創(chuàng)建一個Smoke類型的變量,而這個對象實際是Student Smoke s = new SmokeableStudent();//假設(shè)地址值為:0x666 //調(diào)用method方法 //調(diào)用方法時相當(dāng)于:method(0x666) method(s); } /* 定義一個方法method,用來接收一個Smoke類型對象,在方法中調(diào)用Smoke對象的show方法 三要素: 1.方法名:method 2.參數(shù)列表:Somke sm 3.返回值類型:void */ //當(dāng)調(diào)用方法時,會傳遞該接口的實現(xiàn)類對象 //Smoke sm = 0x666 = new SmokeableStudent() public static void method(Smoke sm){//接口作為參數(shù) //通過sm變量調(diào)用smoking方法,這時實際調(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("課下吸口煙,賽過活神仙"); } }
運行結(jié)果
課下吸口煙,賽過活神仙
接口作為方法返回值的情況。當(dāng)遇到方法返回值是接口類型時,那么該方法需要返回一個接口實現(xiàn)類對象。
//測試類 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方法,這時實際調(diào)用的是SmokeableStudent對象中的smoking方法 s.smoking(); } /* 定義一個方法method,用來獲取一個具備吸煙功能的對象,并在方法中完成吸煙者的創(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("課下吸口煙,賽過活神仙"); } }
運行結(jié)果
課下吸口煙,賽過活神仙
1.類作為方法參數(shù)時,說明要向方法中傳入該類的對象
2.類作為方法返回值時,說明該方法要返回一個該類的對象。
3.抽象類作為方法參數(shù)時,說明要傳入一個實現(xiàn)抽象類所有抽象方法的子類對象。
4.抽象類作為方法返回值時,說明需要返回一個實現(xiàn)抽象類所有抽象方法的子類對象。
5.接口作為方法參數(shù)時,說明該方法要傳入一個接口實現(xiàn)類對象。
6.接口作為方法返回值時,說明該方法需要返回一個接口實現(xiàn)類對象。
本文版權(quán)歸黑馬程序員Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:黑馬程序員Java培訓(xùn)學(xué)院
首發(fā):https://java.itheima.com