更新時(shí)間:2023-09-21 來源:黑馬程序員 瀏覽量:
在編寫程序中,會經(jīng)常碰到調(diào)用的方法要接收的是一個(gè)類類型的情況,那么這時(shí),要向方法中傳入該類的對象。因?yàn)橐粋€(gè)變量要想使用必須先賦值,才能使用,不賦值不能用,包括引用類型的變量,引用類型的變量其實(shí)是棧內(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)用方法時(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
寫程序調(diào)用方法時(shí),我們以后會經(jīng)常碰到返回一個(gè)類類型的返回值,那么這時(shí),該方法要返回一個(gè)該類的對象。
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
抽象類作為方法參數(shù)的情況也很多見。當(dāng)遇到方法參數(shù)為抽象類類型時(shí),要傳入一個(gè)實(shí)現(xiàn)抽象類所有抽象方法的子類對象。因?yàn)槌橄箢?不能創(chuàng)建對象,必須創(chuàng)建子類,傳遞子類對象
//測試類
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
抽象類作為方法返回值的情況,這時(shí)需要返回一個(gè)實(shí)現(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方法,其實(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
接口作為方法參數(shù)的情況是很常見的,經(jīng)常會碰到。當(dāng)遇到方法參數(shù)為接口類型時(shí),那么該方法要傳入一個(gè)接口實(shí)現(xiàn)類對象。
//測試類
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é)果
課下吸口煙,賽過活神仙
接口作為方法返回值的情況。當(dāng)遇到方法返回值是接口類型時(shí),那么該方法需要返回一個(gè)接口實(shí)現(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方法,這時(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é)果
課下吸口煙,賽過活神仙
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