形式参数和返回值是抽象类或接口时该如何调用

形式参数和返回值是抽象类或接口时该如何调用

形式参数是抽象类时

需求:
在测试类中调用StudentDemo01类中的method()方法,通过method方法调用Student类中的study()方法。

//学生类(抽象类)
abstract class Student {
	public abstract void study();	
}

class StudentDemo01 {
	public void method(Student s) {
		s.study();
	}
}
//测试类
public class Test {
	public static void main(String[] args) {
		
	}
}

解决方法:

//学生类(抽象类)
abstract class Student {
	public abstract void study();
}

class StudentDemo01 {
	//Student抽象类作为形式参数,调用其study()方法。
	public void method(Student s) {
		s.study();
	}
}
//自定义一个StudentDemo02类继承Student类,间接初始化Student类。
class StudentDemo02 extends Student {
	public void study() {
		System.out.println("good good study, day day up!");
	}
}
//测试类
public class Test {
	public static void main(String[] args) {
		StudentDemo01 sd1 = new StudentDemo01();
		//创建子类对象。
		StudentDemo02 sd2 = new StudentDemo02();
		sd1.method(sd2);
	}
}

使用匿名内部类解决:

//学生类(抽象类)
abstract class Student {
	public abstract void study();
}

class StudentDemo01 {
	public void method(Student s) {
		s.study();
	}
}

//测试类
public class Test {
	public static void main(String[] args) {
		StudentDemo01 sd1 = new StudentDemo01();
		//使用匿名内部类直接重写Student类中的Study()方法。
		sd1.method(new Student() {
			public void study() {
				System.out.println("good good study, day day up!");
			}
		});
	}
}

抽象类是返回值

需求:
在测试类中调用StudentDemo01类中的method()方法,通过method方法调用Student类中的study()方法

//学生类(抽象类)
abstract class Student {
	public abstract void study();
}

class StudentDemo01 {
	public Student method() {
		return
	}
}
//测试类
public class Test {
	public static void main(String[] args) {
		
	}
}

解决方法:

//学生类(抽象类)
abstract class Student {
	public abstract void study();
}

class StudentDemo01 {
	public Student method() {
		return new StudentDemo02();
	}
}
//自定义一个StudentDemo02类继承Student类,间接初始化Student类。
class StudentDemo02 extends Student {
	public void study() {
		System.out.println("good good study, day day up!");
	}
}
//测试类
public class Test {
	public static void main(String[] args) {
		StudentDemo01 sd1 = new StudentDemo01();
		Student s = sd1.method();
		s.study();
	}
}

匿名内部类解决:

//学生类(抽象类)
abstract class Student {
	public abstract void study();
}

class StudentDemo01 {
	public Student method() {
		//使用匿名内部类直接重写Student类中的Study()方法。
		return new Student() {
			public void study() {
				System.out.println("good good study, day day up!");
			}
		};
	}
}
//测试类
public class Test {
	public static void main(String[] args) {
		StudentDemo01 sd1 = new StudentDemo01();
		Student s = sd1.method();
		s.study();
	}
}

形式参数是接口时

需求:
在测试类中调用Student类中的method()方法,通过method方法调用Study接口中的study()方法。

//接口
interface Study {
	public abstract void study(); 
}
//学生类
class Student {
	public void method(Study s) {
		s.study();
	}
}
//测试类
public class Test {
	public static void main(String[] args) {
		
	}
}

解决方法:

//接口
interface Study {
	public abstract void study(); 
}
//学生类
class Student {
	public void method(Study s) {
		s.study();
	}
}
//自定义Study接口的子实现类StudentDemo,重写study()方法。
class StudentDemo implements Study {
	public void study() {
		System.out.println("good good study, day day up!");
	}
}
//测试类
public class Test {
	public static void main(String[] args) {
		Student s = new Student();
		StudentDemo sd = new StudentDemo();
		s.method(sd);
	}
}

匿名内部类解决:

//接口
interface Study {
	public abstract void study(); 
}
//学生类
class Student {
	public void method(Study s) {
		s.study();
	}
}
//测试类
public class Test {
	public static void main(String[] args) {
		Student s = new Student();
		//使用匿名内部类直接重写Study接口中的Study()方法。
		s.method(new Study() {
			public void study() {
				System.out.println("good good study, day day up!");
			}
		});
	}
}

接口是返回值时

需求:
在测试类中调用Student类中的method()方法,通过method方法调用Study接口中的study()方法。

//接口
interface Study {
	public abstract void study(); 
}
//学生类
class Student {
	public Study method() {
		return
	}
}
//测试类
public class Test {
	public static void main(String[] args) {
	
	}
}

解决方法:

//接口
interface Study {
	public abstract void study(); 
}
//学生类
class Student {
	public Study method() {
		return new StudentDemo();
	}
}
//自定义Study接口的子实现类StudentDemo,重写study()方法。
class StudentDemo implements Study {
	public void study() {
		System.out.println("good good study, day day up!");
	}
}
//测试类
public class Test {
	public static void main(String[] args) {
		Student s = new Student();
		Study s1 = new StudentDemo();
		s1.study();
	}
}

匿名内部类解决:

//接口
interface Study {
	public abstract void study(); 
}
//学生类
class Student {
	public Study method() {
		//使用匿名内部类直接重写Study接口中的Study()方法。
		return new Study() {
			public void study() {
				System.out.println("good good study, day day up!");
			}
		};
	}
}
//测试类
public class Test {
	public static void main(String[] args) {
		Student s = new Student();
		Study s1 = s.method();
		s1.study();
	}
}

以上便是我对形式参数和返回值是抽象类或接口时该如何调用的理解,最后附上一张自己总结时写代码的照片。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值