形式参数
1.基本数据类型
需要什么数据类型,在传参的时候就传什么数据类型(形式参数的改变对实际参数没有影响)
2.引用类型
1)具体类:若形式参数是一个具体的类,则需要创建该类的对象
2)抽象类:若形式参数为抽象类,则需新定义一个抽象类的子类来进行实例化(抽象类多态)
例:
//引用类型为抽象类例子
//声明一个抽象类
abstract class Person{
public abstract void study() ;
}
class PersonDemo{
//成员方法
public void method(Person p){
p.study() ;
}
}
//自定义一个抽象的子类来进行Person的实例化
class Student extends Person{
@Override
public void study() {
System.out.println("学习");
}
}
//测试类
public class PersonTest {
public static void main(String[] args) {
//需求:调用PersonDemo类中method()方法
//方式1:
PersonDemo pd=new PersonDemo(); //抽象类不能新建对象去访问方法
Person p=new Student(); //新建抽象类的子类对象
pd.method(p);
//方式2:链式编程
new PersonDemo().method(new Student()) ;
}
}
3)接 口:若形式参数为接口,那需新定义一个接口的子实现类,通过接口多态来进行实例化
例:
//引用类型为接口类型例子
//定义一个接口
interface Inter{
public abstract void study() ;
}
//定义一个类
class TeacherDemo{
public void method(Inter i){//接口不能实例化: 如果一个方法的形式参数是一个接口,那么需要创建该接口的子实现类对象
i.study() ;
}
}
//接口的子实现类
class Student implements Inter{
@Override
public void study() {
System.out.println("学习java");
}
}
//测试类
public class TeacherTest {
public static void main(String[] args) {
//需求:需要调用TeacherDemo类中的method()方法
//方法1:
TeacherDemo td = new TeacherDemo() ;
//创建该接口对象:通过接口多态
Inter i = new Student() ; //接口多态
td.method(i);
System.out.println("----------------");
//方法2:匿名内部类
Inter i2 = new Inter() {
@Override
public void study() {
System.out.println("学习java");
}
};
i2.study();
}
}
返回值(引用类型)
1.具体类:直接返回该类对象(通常开发中使用匿名对象)
例:
//返回类型为一个具体的类例子
//定义一个类
class Student{
public void show(){
System.out.println("好好学习,天天向上");
}
}
class StudentDemo{
public Student method(){
return new Student() ; //如果方法的返回值是一个具体的类,那么需要该类对象
}
}
//测试类
public class StudentTest {
public static void main(String[] args) {
//需求:需要调用StudentDemo这个类中method()方法
//方法1:创建StudentDemo类对象
StudentDemo sd = new StudentDemo() ;
Student s = sd.method() ;
s.show();
//方法2:使用匿名对象进行访问(返回值为具体类时多使用此方法)
new StudentDemo().method().show();
}
}
2.抽象类:返回值若为抽象类,则需返回该抽象类的子类对象
例:
//返回类型为抽象类例子
//定义一个抽象类
abstract class Person{
public abstract void show() ;
}
class PersonDemo{
// 如果一个方法的返回值是一个抽象类,需要的返回是该抽象类的子类对象
public Person method(){
return new Teacher() ; //Person p = new Teacher() ;
}
}
//抽象类的子类
class Teacher extends Person{
@Override
public void show() {
System.out.println("老师");
}
}
//测试类
public class PersonTest {
public static void main(String[] args) {
//需求:要调用PersonDemo这个类中的method()方法
//方法1:
PersonDemo pd = new PersonDemo() ;
Person p = pd.method() ; //Person p = new Teacher() ;
p.show() ;
System.out.println("----------------");
//方法2:链式编程
Person p1 = new PersonDemo().method() ;
p1.show() ;
}
}
3.接 口:返回值若是接口类型,需返回该接口的子实现类对象
例:
//返回类型为接口例子
//定义一个接口
interface Love{
public abstract void love();
}
class TeacherDemo{
public Love method(){
return new Teacher() ; //接口多态:Love l = new Teacher();
}
}
//定义接口的子实现类
class Teacher implements Love{
@Override
public void love() {
System.out.println("老师讲课");
}
}
//测试类
public class TeacherTest {
public static void main(String[] args){
//需求:需要调用TeacherDemo中的method()
TeacherDemo td = new TeacherDemo() ;
//使用对象名调用功能
Love l = td.method() ; //Love l = new Teacher2(); 接口多态
l.love() ;
}
}
2017.10.22