一、形式参数
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();
}
}