形式参数和返回值问题

形式参数问题

1.当类作为方法的形式参数的时候,实际上需要的是该类的地址

class Student {
    public void study() {
        System.out.println("好好学习,天天向上");
    }
}

class StudentDemo {
    public void fun(Student student) {
        student.study();
    }
}

public class StudentTest {
    public static void main(String[] args) {
        StudentDemo studentDemo = new StudentDemo();
        Student student = new Student();
        studentDemo.fun(student);
    }
}

2.当抽象类作为形式参数传参的时候,实际上需要的是该类子类实现对象的地址值,利用多态的形式创建

abstract class Person {
    public abstract void study();
}

class Student2 extends Person {
    @Override
    public void study() {
        System.out.println("好好学习,天天向上");
    }
}

class PersonDemo {
    public void fun(Person person) {
        person.study();
    }
}

public class PersonTest {
    public static void main(String[] args) {
        PersonDemo personDemo = new PersonDemo();
        //抽象类无法被实例化
//        Person p = new Person();
        Person p = new Student2();
//        personDemo.fun(p);
        personDemo.fun(new Student2());
    }
}

3. 当接口作为形式参数传参的时候,实际上需要的是该接口的实现类对象的地址值,利用接口多态的形式创建

interface Person2 {
    public abstract void study();
}

class Teacher implements Person2 {
    @Override
    public void study() {
        System.out.println("好好学习,天天赚钱");
    }
}

class TeacherDemo {
    public void fun(Person2 person2) {
        person2.study();
    }
}

public class TeacherTest {
    public static void main(String[] args) {
        TeacherDemo teacherDemo = new TeacherDemo();
        //接口不能实例化
//        Person2 person2 = new Person2();
        Person2 p = new Teacher();
        teacherDemo.fun(new Teacher());
    }
}

返回值问题

1.当类作为方法的返回值的时候,实际上返回的是该类对象的地址值 

class Student3 {
    public void study() {
        System.out.println("好好学习天天向上");
    }
}

class StudentDemo3 {
    public Student3 fun() {
        Student3 s = new Student3();
        return s;
    }
}

public class StudentTest2 {
    public static void main(String[] args) {
        StudentDemo3 studentDemo3 = new StudentDemo3();
        //返回的地址值要接收一下才能输出
        Student3 s = studentDemo3.fun();
        s.study();
    }
}

2.当抽象类作为返回值的时候,需要返回的是该抽象类的子类对象

abstract class Person3 {
    public abstract void study();
}

class Doctor extends Person3 {
    @Override
    public void study() {
        System.out.println("好好学习医术");
    }
}

class PersonDemo3 {
    public Person3 fun() {
        //抽象类不能实例化
//        Person3 person3 = new Person3();

//        Person3 p  = new Doctor();
//        return p;

        //换一种写法
        return new Doctor();
    }
}

public class PersonTest2 {
    public static void main(String[] args) {
        PersonDemo3 personDemo3 = new PersonDemo3();
        //返回的地址值接收一下
        Person3 p = personDemo3.fun();  //相当于Person3 p = new Doctor();
        p.study();
    }
}

3.当接口作为返回值的时候,需要返回的是实现该接口的类对象 

interface PlayGame3 {
    public abstract void playLol();
}

class Teacher3 implements PlayGame3 {
    @Override
    public void playLol() {
        System.out.println("打英雄联盟");
    }
}

class TeacherDemo3 {
    public PlayGame3 fun() {
//        PlayGame3 pg = new Teacher3();
//        return pg;
        //换一种写法
        return new Teacher3();
    }
}

public class TeacherTest2 {
    public static void main(String[] args) {
        TeacherDemo3 teacherDemo3 = new TeacherDemo3();
        PlayGame3 pg3 = teacherDemo3.fun();  //PlayGame3 pg3 = new Teacher3();
        pg3.playLol();

        //链式编程
        //上面三行代码用链式编程改进(spark,flink都是这样的写代码方式)
        new TeacherDemo3().fun().playLol();
    }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

+7_big data

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值