目录

  • 一、基本数据类型
  • 二、引用数据类型
  • 1. 类名作为形参或返回值类型
  • 2. 抽象类名作为形参或返回值类型
  • 3. 接口名作为形参或返回值类型


一、基本数据类型

数据类型

整型

byte、short、int、long

字符型

char

浮点型

float、double

布尔型

boolean

  • 如果要的形参类型或返回值类型是基本数据类型,就给一个基本数据类型的变量或常量

二、引用数据类型

1. 类名作为形参或返回值类型

  • 将该类的对象作为形参或返回值
public class Student {//学生类
    public String name = "";
    public int age = 0;//成员变量

    public void study() {//成员方法
        System.out.println("学习");
    }

    public Student() {//空参构造
    }

    public Student(String name, int age) {//有参构造
        this.name = name;
        this.age = age;
    }
}
public class MyTest {//测试类
    public static void main(String[] args) {
        Student student = getStudent("张三", 20);//调用方法获得Student类的对象
        show(student);//类的对象作为方法参数
    }

    private static Student getStudent(String name, int age) {//得到Student类的一个对象
        return new Student(name, age);//类的对象作为返回值
    }

    private static void show(Student student) {//打印传入Student类的对象的成员变量
        System.out.println("name:" + student.name + "\nage:" + student.age);
    }
}

2. 抽象类名作为形参或返回值类型

  • 当形参类型或返回值类型为抽象类时,因为抽象类不能实例化,所以无法直接将抽象类的对象作为参数传入。但是我们可以将抽象类的非抽象子类的对象作为参数传入,其实也就是多态的形式(抽象类名 变量名 = new 非抽象子类(); )
abstract class People {//抽象类人类
    public String name = "";
    public int age = 0;//成员变量

    public abstract void study();
}

public class Student extends People {//学生类

    @Override
    public void study() {//对study方法重写
        System.out.println("学习");
    }

    public Student() {//空参构造
    }

    public Student(String name, int age) {//有参构造
        this.name = name;
        this.age = age;
    }
}

public class MyTest {//测试类

    public static void main(String[] args) {
        People people = getStudent("张三", 20);//多态形式,成员变量调用父类,成员方法优先调用子类重写过的
        show(people);//将抽象类的非抽象子类的对象作为方法参数
    }

    private static People getStudent(String name, int age) {//抽象类类型People作为返回值类型

        return new Student(name, age);//将抽象类的非抽象子类的对象作为返回值
    }

    private static void show(People people) {//抽象类类型作为方法参数类型

        System.out.println("name:" + people.name + "\nage:" + people.age);
    }
}

3. 接口名作为形参或返回值类型

  • 接口也不能实例化,所以不能简单的将“接口的对象”作为参数传递或返回,与抽象类一样,虽然不能直接实例化,但是接口可以被实现,可以用实现接口的非抽象类的对象作为方法参数或返回值
interface Shopping {//购物接口
    public static final double money = 500;//定义购物金额

    public abstract void shopping();//定义购物抽象方法
}

public class Student implements Shopping {//学生类
    public String name = "";
    public int age = 0;//成员变量

    public Student() {//空参构造
    }

    public Student(String name, int age) {//有参构造
        this.name = name;
        this.age = age;
    }

    @Override
    public void shopping() {//对接口的shopping方法重写
        System.out.println("学生购物买文具比较多");
    }
}

public class MyTest {//测试类

    public static void main(String[] args) {
        Shopping shopping = getStudent("张三", 20);//多态形式,成员变量调用父类,成员方法优先调用子类重写过的
        show(shopping);//将接口的非抽象实现类的对象作为方法参数
    }

    private static Shopping getStudent(String name, int age) {//接口类型作为返回值类型

        return new Student(name, age);//将接口的非抽象实现类的对象作为返回值
    }

    private static void show(Shopping shopping) {//接口类型作为方法参数类型

        System.out.println("money:" + shopping.money);
        shopping.shopping();
    }
}

因作者水平有限,如果有错误,希望能够指出。
如果不同的见解,也可以在评论下方一起讨论哦!