面向对象---形式参数和返回值的问题

一、形式参数

1、基本类型

    此种类型比较简单,对实际参数没有影响

2、引用类型

    1)基本类

        形式参数是基本类,以代码为例:
class Student{
	public void study() {
		System.out.println("Good Good Study,Day Day Up...");
	}
}
class StudentDemo{
	//成员方法
	public void method(Student s) {
		s.study(); 
	}
}

//测试类
public class PersonTest {
	
	public static void main(String[] args) {
		//方式一
		StudentDemo sd = new StudentDemo() ;
		sd.method(new Student());
		System.out.println("----------------");
		
		//方式二:链式编程
		//匿名对象是可以作为参数传递的
		new StudentDemo().method(new Student());
	}
}
由于在StudentDemo类中,method方法的形式参数是一个Student类(具体类),那么如何调用StudentDemo中的mehtod()方法呢?首先要创建一个StudentDemo对象来调用method方法,接下来需要创建Student对象来作为实际参数去传递。

    2)抽象类

    形式参数是一个抽象类:此时这块需要的是该抽象类的子类对象   (抽象类多态...)
//抽象的Person类
abstract class Person{
	public void teach() {
		System.out.println("今天天气不错,适合踢球...");
	}
}
class PersonDemo{
	public void method(Person p) { //不能直接创建对象 Person p =new Person();  可以采用抽象类多态的形式实现
		p.teach();
	}
}
//需要提供Pereson类的子类
class Teacher extends Person{
	
}
//测试类
public class TeacherTest {

	public static void main(String[] args) {
		PersonDemo pd = new PersonDemo() ;
//		Perosn p = new  Person() ; //错误的,抽象类是不能实例化的
		//可以通过子类进行实例化
		Person p = new Teacher();//抽象类多态
		pd.method(p);
	}
}
由于在PersonDemo类中,method方法的形式参数是一个Person类(抽象类),于是创建PersonDemo类对象pd,定义子类Teacher类来实例化Person类,利用抽象类多态Person p = new Teacher(); 通过pd调用method方法,并将p传过去。

    3)接口

    形式参数是一个接口:
//定义一个接口
interface Inter{
	public abstract void study() ;
}
class InterDemo{
	public void show(Inter i) { //需要创建该接口对象,不能直接实例化 Inter i = new Inter() ;错误的
				    //需要提供接口的子实现类,可以通过子实现类进行实例化:接口多态...
		i.study();
	}
}
//子实现类
class Student2 implements Inter{

	@Override
	public void study() {
		System.out.println("Good Good Study ,Day Day Up ...");
	}
}
//测试类
public class StudentTest {

	public static void main(String[] args) {
		//需求:如何调用InterDemo这个类中的show()方法?
		//创建InterDemo类的对象
		InterDemo id = new InterDemo() ;
		//接口多态的形式创建Inter对象
		Inter i = new Student2() ;
		id.show(i);
	}
}
在这里除了通过接口多态的方式外,还有另外一种方法:匿名内部类,而且在实际开发中用的要更多一点,这个后面再具体讲。

二、返回值

1、基本类型

    如果返回值基本类型:用对应的基本类型去接收数据即可!

2、引用类型

    1)基本类

    需要提供一个该具体类的对象来接收

class Student3{
	public void study() {
		System.out.println("Good Good Study ,Day Day Up ...");
	}
}
class StudentDemo3{
	public int show() {
		return 100 ;
	}
	public Student3 method() {

		//方式一:匿名对象的方式
		//return new Student3();
		//方式二:返回具体对象
		Student3 s = new Student3();
		return s ;
	}
}
//测试类
public class PersonTest2 {

	public static void main(String[] args) {
		//采用匿名对象的方式
		Student3 s = new StudentDemo3().method() ;
		s.study();
		System.out.println("-------------------");
		//采用具体对象的方式
		StudentDemo3 sd = new StudentDemo3() ;
		Student3 s2 = sd.method() ;
		s2.study(); 
	}
}

    2)抽象类

    需要当前抽象类的子类对象接收(抽象类多态)

abstract class Person2{ 
	 public void show() {
		 System.out.println("今天天气不错");
	 }
 }
class PersonDemo2{
	 public Person2 method() {

		 //方式一:抽象类多态的形式创建对象
		 //Person2 p = new Teacher2() ;
		 //return p ;
		 
		 //方式二:匿名对象,还是通过子类实例化
		 return new Teacher2() ;	
	 }
 }
class Teacher2 extends Person2{	//抽象类多态
	 
 }
 //测试类
public class StudentTest2 {

	public static void main(String[] args) {
		
		PersonDemo2 pd = new PersonDemo2() ;
		Person2 p = pd.method() ;
		p.show(); 
	}
}

    3)接口

interface Inter2{
	public abstract void study();
}

class InterDemo2{
	public static Inter2 method() {
		
//		return new InterImpl() ; //匿名对象的方式
		Inter2 i = new InterImpl();//接口多态的方式
		return i ;
	}
}
class InterImpl implements Inter2{

	@Override
	public void study() {
		System.out.println("好好学习,天天向上...");
	}
}
public class TeacherTest2 {
	
	public static void  main(String[] args) {
		InterDemo2 id = new InterDemo2() ;
		Inter2 i = id.method() ; //或Inter2 i = new InterDemo().method(); 
		i.study(); 
	}
}

阅读更多
文章标签: Java
上一篇面向对象---接口
下一篇面向对象---内部类
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭