java学习笔记(第7天:形参和返回值)

目录

一、形参和返回值都是基本类型

二、类名作为形参和返回值

三、抽象类作为形参和返回值

四、接口作为形参和返回值


一、形参和返回值都是基本类型

这里比较简单,放一个不确定参数数量的例子玩玩:

package Demo;

public class Sum {
    public static void main(String[] args) {
        int s =sum(1,2,3,4);
        System.out.println(s);
    }
    public static int sum(int...nums){
        int ans=0; //局部变量必须手动初始化
        for(int i=0;i<nums.length;i++){
            ans+=nums[i];
        }
        return ans;
    }
}

对于可变参数的传递,其实传递的是一个数组。

二、类名作为形参和返回值

形参是类名时,参数要传递类的对象,返回值是类名时,返回的是该类的对象。

这里直接把类当做一个数据类型就可以,其实没什么区别。看一个小栗子:

  1. 创建一个学生类

    package Demo;
    /*    成员变量
            使用private修饰
    
        构造方法
            提供一个无参构造方法
            提供一个带多个参数的构造方法
    
        成员方法
            提供每一个成员变量对应的set方法和get方法
            提供一个显示对象信息的show方法
    */
    
    public class Student {
        //成员变量
        private String name;
        private int age;
    
        //构造方法
        public Student() {
        }  //无参数构造方法
    
        public Student(String name, int age) {
            this.age = age;
            this.name = name;
        }
    
        //提供age的get和set方法
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            if (age < 0) {
                System.out.println("你输入的年龄有误");
            } else {
                this.age = age;
            }
        }
    
        //提供name的get和set方法
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        //提供一个显示成员信息的show方法
        public void show() {
            System.out.println("name:" + name + ", age:" + age);
        }
    }
  2. 创建一个测试类,该测试类中包含一个学生初始化方法,它的形参是学生类,再定义一个创建学生对象的方法,它的返回值是学生类。

    package Demo;
    
    public class StudentDemo {
        public static void main(String[] args) {
            //创建一个学生对象
            Student s1 = new Student();
    
            //调用学生初始化方法
            studentInitialize(s1);
    
            //调用学生创建方法
            Student s2 = studentNew();
    
            //调用Student对象的show()方法
            s1.show(); //name:张楚岚, age:20
            s2.show(); //name:宝儿姐, age:18
        }
        public static void studentInitialize(Student s){
            s.setAge(20);
            s.setName("张楚岚");
        }
    
        public static Student studentNew(){
            Student s = new Student();
            s.setAge(18);
            s.setName("宝儿姐");
            return s;
        }
    }
    

三、抽象类作为形参和返回值

形参是抽象类时,参数要传递该类的子类(具体类)的对象,返回值是抽象类时,返回的是该类的子类(具体类)的对象。

这里其实就是因为抽象类不能直接实例化,只能参照抽象类多态的形式实例化其子类(具体类)。再来一个小栗子:

  1. 定义一个抽象人类:
    package Demo;
    
    public  abstract class People {
        private int age;
        private String name;
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public People() {
        }
    
        public People(int age, String name) {
            this.age = age;
            this.name = name;
        }
    }
    
  2. 定义一个学生类,继承自人类,包含一个show()方法:
    package Demo;
    
    public class Student extends People{
        public Student() {
        }
    
        public Student(int age, String name) {
            super(age, name);
        }
    
        //提供一个显示成员信息的show方法
        public void show() {
            System.out.println("name:" + super.getName() + ", age:" + super.getAge());
        }
    }
  3. 创建一个测试类,该测试类中包含一个人类初始化方法,它的形参是人类,再定义一个创建人类对象的方法,它的返回值是人类:
    package Demo;
    
    public class StudentDemo {
        public static void main(String[] args) {
            //创建一个学生对象
            People p1 = new Student();
    
            //调用学生初始化方法
            peopleInitialize(p1);
    
            //调用学生创建方法
            People p2 = peopleNew();
    
            //向下转型,然后调用Student对象的show()方法
            Student s1 =(Student)p1;
            s1.show(); //name:张楚岚, age:20
            Student s2 = (Student)p2;
            s2.show(); //name:宝儿姐, age:18
        }
        public static void peopleInitialize(People p){
            p.setAge(20);
            p.setName("张楚岚");
        }
    
        public static People peopleNew(){
            People P = new Student();
            P.setAge(18);
            P.setName("宝儿姐");
            return P;
        }
    }
    

    四、接口作为形参和返回值

形参是接口时,参数要传递该接口的实现类(具体类)的对象,返回值是接口时,返回的是该接口的实现类(具体类)的对象。

这里其实就是因为接口不能直接实例化,只能参照接口多态的形式实例化其实现类(具体类)。欢迎大家在来一个小栗子。

五、不确定数量的类名作为形参

这里直接改写了上面的例子中peopleInitialize()方法,并且一次初始化了三个对象。

package Demo;

public class StudentDemo {
    public static void main(String[] args) {
        //创建一个学生对象
        People p1 = new Student();
        People p3 = new Student();
        People p4 = new Student();

        //调用学生初始化方法
        peopleInitialize(p1,p3,p4);

        //调用学生创建方法
        People p2 = peopleNew();

        //向下转型,然后调用Student对象的show()方法
        Student s1 =(Student)p1;
        s1.show(); //name:张楚岚, age:20
        Student s2 = (Student)p2;
        s2.show(); //name:宝儿姐, age:18
        Student s3 = (Student)p3;
        s2.show(); //name:宝儿姐, age:18
        Student s4 = (Student)p4;
        s2.show(); //name:宝儿姐, age:18
    }
    public static void peopleInitialize(People...p){
        for(int i = 0;i<p.length;i++){
            People pp=p[i];
            pp.setAge(20);
            pp.setName("张楚岚");
        }
    }

    public static People peopleNew(){
        People P = new Student();
        P.setAge(18);
        P.setName("宝儿姐");
        return P;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

白马少年郎

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

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

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

打赏作者

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

抵扣说明:

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

余额充值