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