方法参数类型及返回值类型问题
类名作为形式参数或返回值
如果一个方法形参类型为 类 或者返回值类型为 类,则传递一个该类的对象。例:
public class demo1 {
public static void main(String[] args) {
Student student = new Student();
student.show(student,20); //传入参数 Student类型的对象student
System.out.println(student.num); // 改变student的num值为20
student = student.show2(40); //方法返回值为在方法内new的对象的地址,使对象student指向新new的Student类对象的地址,且最终num赋值为40
System.out.println(student.num); // 40
}
}
class Student{
int num = 10;
public void show(Student student,int num){ // 形参为 类 类型的方法
this.num = num;
}
public Student show2(int num){ // 返回值为 类 类型的方法
Student student = new Student();
student.num = num;
return student;
}
}
抽象类名作为形式参数或返回值
如果一个方法形参类型为 抽象类 或者返回值类型为 抽象类,则传递一个该类的子类对象。例:
public class demo2 {
public static void main(String[] args) {
ErHa erha = new ErHa();
erha.show(erha,40); //传入抽象类的子类对象
System.out.println(erha.num);
Dog dog = new ErHa();
dog = dog.show2(); //将方法返回的父类指向子类对象dog的地址赋给dog
System.out.println(dog.num); //多态访问成员变量,访问的是父类空间的成员变量。为50
}
}
abstract class Dog{
int num = 20;
public abstract void show(Dog dog,int num);
public abstract Dog show2();
}
class ErHa extends Dog {
int num = 30;
@Override
public void show(Dog dog,int num) {
this.num = num;
}
@Override
public Dog show2() {
Dog dog = new ErHa(); // 改变的是抽象父类的空间num值,多态
dog.num = 50;
return dog;
}
}
接口名作为形式参数或返回值类型
如果一个方法形参类型为 接口类型 或者返回值类型为 接口类型,则传递一个该接口的子类对象。例:
public class demo3 {
public static void main(String[] args) {
ErHa erha = new ErHa();
erha.show(erha,40); //传入接口的子类对象
System.out.println(erha.num); //打印子类对象的num
Dog dog = new ErHa();
dog = dog.show2();
System.out.println(dog.num); //多态访问成员变量,访问的是父类空间的成员变量。为 20
}
interface Dog{
int num = 20;
public abstract void show(Dog dog,int num);
public abstract Dog show2();
}
static class ErHa implements Dog {
int num = 30;
@Override
public void show(Dog dog,int num) {
this.num = num;
}
@Override
public Dog show2() {
Dog dog = new ErHa(); // 接口内的成员变量为常量。不能修改
return dog;
}
}