形式参数与返回值问题

 一:形式参数与返回值问题: 

                        1.形式参数: 基本数据类型:

                                               引用数据类型:

                                                                  1)类(具体类):

                                                                  2)抽象类:

                                                                  3)接口:        

类(具体类):方法的形式参数如果是一个引用类型,并且引用是一个具体类,需要传递的是该类型具体对象。

package org.westos.demo;
//定义Person类
class Person {
	public void eat() {
		System.out.println("为一天吃三顿饭");
		
	}
}
//定义Student类
class Student {

	public void Methond(Person p){//这时Methond()中的形式参数为Person p
			
			p.eat();
		}
	}

//测试类
public class Demo1 {
	//主方法
	public static void main(String[] args) {
		//创建一个Student类对象
		Student s = new Student();
		//创建一个Person类对象	
		Person p = new Person();
		
		s.Methond(p);//通过Student类对象s调用Methon()方法,传递得参数为Person类对象的引用
	}

}

抽象类:遇到形式参数是抽象类的解决方式有两种

方式一:传统方式         形参是一个抽象类,那么实际需要该抽象类子类对象  (抽象类多态) ;因为抽象类不能实例化,所以不能像具体类那样直接创建对象,将引用变量进行传递。所以得通过该抽象类子类(抽象类多态)来进行。

package org.westos.demo;
//形参是一个抽象类,那么实际需要该抽象类子类对象  (抽象类多态)
//定义Person1抽象类
abstract class Person1 {
	public abstract void show1();
}
//定义一个子类Student1
class Student1 extends Person1 {

	public void show1() {
		System.out.println("形参是抽象类的引用变量  通过传统方法来解决");
	}
}

class StudentMethon {
	public void Methon(Person1 p) {
		p.show1();

	}

}

public class Demo2 {
	public static void main(String[] args) {
		//创建一个StudentMethon队形
		StudentMethon sm = new StudentMethon();
		//多态
		Person1 p = new Student1(); 
		sm.Methon(p);
	}
}

方式二:通过匿名类来解决(推荐使用)

package org.westos.demo;

//通过匿名内部类来方式来解决形参是抽象类的问题
//定义抽象类Person3
abstract class Person3 {

	public abstract void show();
}

// 定义StudentMethon3类
class StudentMethon3 {

	public void Methon(Person3 p) {

		p.show();
	}
}

// 测试类
public class Dome3 {
	// 主方法
	public static void main(String[] args) {
		// 创建一个StudentMethon3类对象
		StudentMethon3 sm = new StudentMethon3();
		// 创建一个Person3类对象
		Person3 p = new Person3() {//匿名内部类
			public void show() {// 方法重写
				System.out.println("形参是抽象类,通过匿名类来解决");

			}

		};
		sm.Methon(p);

	}

}

接口:遇到形式参数是抽象类的解决方式有两种

扫描二维码关注公众号,回复: 2354538 查看本文章

方式一:形参是一个接口类型:需要该接口的子实现类的对象 (接口多态)。  同样和抽象方法一样,接口也不可以进行实例化,所以通过自实现类来解决这个问题。

package org.westos.demo;

//参数类型为接口 传统方式需要该接口的子实现类的对象
//定义一个接口
interface Person4 {
	public abstract void show();
}

// 接口的自实现类
class Student4 implements Person4 {
	public void show() {
		System.out.println("参数为接口类型   通过传统方式解决");

	}

}

// 定义一个StudentMethon4类
class StudentMethon4 {

	public void Methon(Person4 p) {
		p.show();
	}
}

// 测试类
public class Demo4 {
	// 主方法
	public static void main(String[] args) {
		// 创建一个StudentMethon4类的对象
		StudentMethon4 sm = new StudentMethon4();
		// 接口多态
		Person4 p = new Student4();
		sm.Methon(p);

	}
}

方式二:通过匿名内部类来解决(推荐使用)

package org.westos.demo;

//通过匿名内部类来解决参数是接口类型变量的问题
//创建一个接口
interface Person5 {
	public abstract void show();
}

// 创建一个StudentMethon5类
class StudentMethon5 {
	public void Methon(Person5 p) {
		p.show();
	}

}

// 测试类
public class Demo5 {
	// 主方法
	public static void main(String[] args) {
		// 创建一个StudentMethon5类对象
		StudentMethon5 sm = new StudentMethon5();
		// 匿名类
		Person5 p = new Person5() {

			public void show() {

				System.out.println("我的参数是接口   通过匿名内部类来解决");
			}
		};
		sm.Methon(p);

	}

}

                       

                          1.返回值:   基本数据类型:

                                               引用数据类型:

                                                                  1)类(具体类):需要该具体类 具体对象(或者匿名对象)

                                                                  2)抽象类:需要返回的是该子类的对象

                                                                  3)接口: 需要该接口子实现类对象;

类(具体类):需要该具体类 具体对象(或者匿名对象)

                 方式一:传统方式, 创建一个具体类对象

                  方式二: 采用匿名对象(在参数只使用一次的情况下);

package org.westos.Demo3;

//定义一个具体类
class Student {

	public void show() {
		System.out.println("我返回的是一个具体类对象");
	}

}

// 定义一个StudentMethod类
class StudentMethod {
	// 定义一个Method方法 返回值为Student类对象
	public Student Method() {
		// Student s = new Student();//方式一 传统方式 创建一个Student对象

		return new Student();// 方式 二 采用匿名对象

	}

}

// 测试类
public class StudentTest {
	// 主方法
	public static void main(String[] args) {
		// 创建一个StudentMethod类对象
		StudentMethod sm = new StudentMethod();
		// Student s = sm.Method();
		// s.show();

		sm.Method().show();// 链式编程 sm.Method()返回一定是一个对象

	}

}

抽象类:      需要返回的是该子类的对象

                 由于抽象类部可以实例化,所以得通过子类间接得创建对象(抽象类多态)

package org.westos.Demo3;

//定义一个抽象类Person1
abstract class Person1 {
	public abstract void show1();
}

// 定义一个Student1类
class Student1 extends Person1 {
	public void show1() {

		System.out.println("我返回得是一个抽象类");
	}
}

// 定义一个StudentMethod1类
class StudentMethod1 {

	public Person1 Method1() {// 定义一个Method1方法 返回值为抽象类Person1得对象
		Person1 p = new Student1();// 抽象类多态,通过子类间接创建对象

		return p;
	}

}

// 测试类
public class StudentTest1 {
	// 主方法
	public static void main(String[] args) {
		// 创建一个 StudentMethod1类对象
		StudentMethod1 sm = new StudentMethod1();

		Person1 p = sm.Method1();
		p.show1();
	}

}

接口:       需要该接口子实现类对象;

               同样和抽象类一样,接口不可以实例化,通过子实现类间接创建对象;

package org.westos.Demo3;

//定义一个接口
interface StuInter {

	public abstract void show2();
}

// 定义一个Student2类实现接口StuInter
class Student2 implements StuInter {

	public void show2() {

		System.out.println("我返回得是一个接口");
	}

}

// 定义一个StudentMethod2类
class StudentMethod2 {

	public StuInter Method3() {
		StuInter i = new Student2();// 通过子实现类创建对象 接口多态

		return i;
	}
}

// 测试类
public class StudentTest2 {
	// 主方法
	public static void main(String[] args) {
		StudentMethod2 sm = new StudentMethod2();
		StuInter s = sm.Method3();
		s.show2();

	}

}

猜你喜欢

转载自blog.csdn.net/qq_41942241/article/details/81149133