方法的形式参数问题
方法的形式参数问题: 只研究引用类型
方法形式参数:
具体类:调用该方法,此时实际参数需要的是当当前类的对象!
抽象类:调用该方法,此时实际参数需要的是当前抽象类的子类对象!
接口类型:调用该方法,此时实际参数需要的是接口的子实现类对象!
开发中:方法形式参数是具体类以及接口情况居多的!
具体类:调用该方法,此时实际参数需要的是当当前类的对象!
package com.qf.args_01;
/**
* 方法的形式参数问题: 只研究引用类型
*
* 方法形式参数:
* 具体类:调用该方法,此时实际参数需要的是当当前类的对象!
* 抽象类
* 接口
*
*/
class Student{
public void studyJavaEE(){
System.out.println("正在学习JavaEE之JavaSE") ;
}
}
//定义一个StudentDemo类
class StudentDemo{
public void show(Student s){//方法的形式参数是一个学生类型
s.studyJavaEE() ;
}
}
//测试类
public class ArgsDemo1 {
public static void main(String[] args) {
//访问StudentDemo类中的show方法
StudentDemo sd = new StudentDemo() ;
Student student = new Student() ;
sd.show(student) ;
System.out.println("---------------------------------------") ;
//另一种方式:匿名对象
new StudentDemo().show(new Student());
}
}
抽象类:调用该方法,此时实际参数需要的是当前抽象类的子类对象!
package com.qf.args_01;
/**
* 方法的形式参数问题: 只研究引用类型
*
* 方法形式参数:
* 具体类:调用该方法,此时实际参数需要的是当当前类的对象!
* 抽象类:调用该方法,此时实际参数需要的是当前抽象类的子类对象!
* 接口
*
*/
//定义一个Person类
abstract class Person{
/*public void work(){
System.out.println("人都需要工作");
}*/
public abstract void work() ;
}
//定义一个PersonDemo类
class PersonDemo{
public void function(Person p){//方法的形式参数是引用类型--抽象类,抽象类不能new,需要传递抽象类的子类对象!
p.work() ;
}
}
//定义抽象类的子类(具体类)
class Worker extends Person{
@Override
public void work() {
System.out.println("爱工作,爱Java,爱高圆圆!");
}
}
//测试类
public class ArgsDemo2 {
public static void main(String[] args) {
//访问PersonDemo类中的function方法?
PersonDemo pd = new PersonDemo() ;
//Person p = new Person() ;抽象类不能实例化(不能创建对象)
Person person = new Worker() ;
pd.function(person) ;
System.out.println("----------------------------------") ;
new PersonDemo().function(new Worker());
}
}
接口类型:调用该方法,此时实际参数需要的是接口的子实现类对象!
package com.qf.args_01;
/**
* 方法的形式参数问题: 只研究引用类型
*
* 方法形式参数:
* 具体类:调用该方法,此时实际参数需要的是当当前类的对象!
* 抽象类:调用该方法,此时实际参数需要的是当前抽象类的子类对象!
* 接口类型:调用该方法,此时实际参数需要的是接口的子实现类对象!
*
* 开发中:方法形式参数是具体类以及接口情况居多的!
*/
//定义一个接口
interface Love{
public abstract void love() ;
}
//定义一个类:LoveDemo
class LoveDemo{
public void method(Love love) {//方法的形式参数是一个接口? 接口不能new,需要接口的子实现类对象
love.love();
}
}
//需要有定义接口的子实现类,实现Love接口
class LoveImpl implements Love{
@Override
public void love() {
System.out.println("love Java!");
}
}
//测试类
public class ArgsDemo3 {
public static void main(String[] args) {
//要访问LoveDemo类中的method方法?
LoveDemo ld = new LoveDemo() ;
// Love l = new Love() ;//接口不能实例化
// ld.method(l);
//接口多态:接口名指向子实现类
Love l = new LoveImpl() ;
ld.method(l);
System.out.println("--------------------------");
new LoveDemo().method(new LoveImpl()) ;
}
}