更新时间:2023-09-21 来源:黑马程序员 浏览量:
在编写程序中,会经常碰到调用的方法要接收的是一个类类型的情况,那么这时,要向方法中传入该类的对象。因为一个变量要想使用必须先赋值,才能使用,不赋值不能用,包括引用类型的变量,引用类型的变量其实是栈内存中的一块空间,必须在堆内存中开辟对应的空间,并将该空间的地址值赋值给变量后,该变量才能找到具体的空间,从而使用该空间的内容。
//测试类
public class Test {
    public static void main(String[] args) {
        //创建Person对象
        Person p = new Person("张三",18);//假设对象地址:0x111
        //调用method方法
        //调用方法时相当于:method(0x111)
        method(p);
    }
    /*
        定义一个方法method,用来接收一个Person对象,在方法中调用Person对象的show方法
        三要素:
        1.方法名称:method
        2.参数列表:Person p
        3.返回值类型:void
     */
    //当方法被调用时,Person p将接收调用者传递过来的对象的地址值
    //Person p = 0x111 = new Person("张三",18)
    public static void method(Person p){
        p.show();
    }
}public class Person{
    private String name;//姓名
    private int age;//年龄
    //空参构造
    public Person() {
    }
    //满参构造
    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);
    }
}       运行结果
我叫: 张三, 年龄: 18
写程序调用方法时,我们以后会经常碰到返回一个类类型的返回值,那么这时,该方法要返回一个该类的对象。
public class Test {
    public static void main(String[] args) {
        //调用getPerson方法,获取返回的Person对象
        //方法调用结束后:Person p = 0x111 = new Person("张三",18)
        Person p = getPerson();
        //调用p对象中的show方法
        p.show();
    }
    /*
        定义一个方法method,用来获取一个Person对象,在方法中完成Person对象的创建
        三要素:
        1.方法名称:getPerson
        2.参数列表:void
        3.返回值类型:Person
     */
    public static Person getPerson(){
        //创建Person对象
        Person p = new Person("张三",18);//假设对象地址:0x111
        return p;//return 0x111;
    }
}public class Person{
    private String name;//姓名
    private int age;//年龄
    //空参构造
    public Person() {
    }
    //满参构造
    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);
    }
}  运行结果
我叫: 张三, 年龄: 18
抽象类作为方法参数的情况也很多见。当遇到方法参数为抽象类类型时,要传入一个实现抽象类所有抽象方法的子类对象。因为抽象类,不能创建对象,必须创建子类,传递子类对象
//测试类
public class Test {
    public static void main(String[] args) {
        //创建Person类的子类Student对象
        //通过多态的方式,创建一个Person类型的变量,而这个对象实际是Student对象
        Person p = new Student("张三",18);//假设对象地址:0x111
        //调用method方法
        //调用方法时相当于:method(0x111)
        method(p);
    }
    /*
        定义一个方法method,用来接收一个Person类型的对象,在方法中调用Person类型对象的show方法
        三要素:
        1.方法名称:method
        2.参数列表:Person p
        3.返回值类型:void
     */
    //当方法被调用时,Person p将接收调用者传递过来的对象的地址值
    //Person p = 0x111 = new Student("张三",18)
    public static void method(Person p){////抽象类作为参数
        //通过p变量调用show方法,这时实际调用的是Student对象中的show方法
        p.show();
    }
}public abstract class Person{
    private String name;//姓名
    private int age;//年龄
    //空参构造
    public Person() {
    }
    //满参构造
    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());
    }
}       运行结果
我叫: 张三, 年龄: 18
抽象类作为方法返回值的情况,这时需要返回一个实现抽象类所有抽象方法的子类对象。
//测试类
public class Test {
    public static void main(String[] args) {
        //调用getPerson方法,获取返回的Person类的子类对象
        //方法调用结束后:Person p = 0x111 = new Student("张三",18)
        Person p = getPerson();
        //调用p对象中的show方法,其实是Student类重写后的show方法
        p.show();
    }
    /*
        定义一个方法getPerson,用来获取一个Person类的子类对象,在方法中完成Person类子类对象的创建
        三要素:
        1.方法名称:getPerson
        2.参数列表:void
        3.返回值类型:Person
     */
    public static Person getPerson(){
        //创建Person对象
        Person p = new Student("张三",18);//假设对象地址:0x111
        return p;//return 0x111;
    }
}  运行结果
我叫: 张三, 年龄: 18
接口作为方法参数的情况是很常见的,经常会碰到。当遇到方法参数为接口类型时,那么该方法要传入一个接口实现类对象。
//测试类
public class Test {
    public static void main(String[] args) {
        //通过多态的方式,创建一个Smoke类型的变量,而这个对象实际是Student
        Smoke s = new SmokeableStudent();//假设地址值为:0x666
        //调用method方法
        //调用方法时相当于:method(0x666)
        method(s);
    }
    /*
        定义一个方法method,用来接收一个Smoke类型对象,在方法中调用Smoke对象的show方法
        三要素:
        1.方法名:method
        2.参数列表:Somke sm
        3.返回值类型:void
     */
    //当调用方法时,会传递该接口的实现类对象
    //Smoke sm = 0x666 = new SmokeableStudent()
    public static void method(Smoke sm){//接口作为参数
        //通过sm变量调用smoking方法,这时实际调用的是SmokeableStudent对象中的smoking方法
        sm.smoking();
    }
}//接口
public interface Smoke{
    public abstract void smoking();//抽象方法
}
```
```
public class SmokeableStudent implements Smoke{
    @Override
    public void smoking() {
        System.out.println("课下吸口烟,赛过活神仙");
    }
}       运行结果
课下吸口烟,赛过活神仙
接口作为方法返回值的情况。当遇到方法返回值是接口类型时,那么该方法需要返回一个接口实现类对象。
//测试类
public class Test {
    public static void main(String[] args) {
        //调用method方法,获取返回的会吸烟的对象
        //方法调用结束后:Smoke s = 0x666 = new SmokeableStudent()
        Smoke s = method();
        //通过s变量调用smoking方法,这时实际调用的是SmokeableStudent对象中的smoking方法
        s.smoking();
    }
    /*
        定义一个方法method,用来获取一个具备吸烟功能的对象,并在方法中完成吸烟者的创建
     */
    public static Smoke method(){
        //多态的形式创建对象
        Smoke sm = new SmokeableStudent();//假设地址值:0x666
        return sm;//相当于return 0x666
    }
}//接口
public interface Smoke{
    public abstract void smoking();//抽象方法
}
```
```
public class SmokeableStudent implements Smoke{
    @Override
    public void smoking() {
        System.out.println("课下吸口烟,赛过活神仙");
    }
}       运行结果
课下吸口烟,赛过活神仙
1.类作为方法参数时,说明要向方法中传入该类的对象
2.类作为方法返回值时,说明该方法要返回一个该类的对象。
3.抽象类作为方法参数时,说明要传入一个实现抽象类所有抽象方法的子类对象。
4.抽象类作为方法返回值时,说明需要返回一个实现抽象类所有抽象方法的子类对象。
5.接口作为方法参数时,说明该方法要传入一个接口实现类对象。
  6.接口作为方法返回值时,说明该方法需要返回一个接口实现类对象。
本文版权归黑马程序员Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:黑马程序员Java培训学院
1024首播|39岁程序员逆袭记:不被年龄定义,AI浪潮里再迎春天
2025-10-241024程序员节丨10年同行,致敬用代码改变世界的你
2025-10-24【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19