java 形式参数和返回值详谈

来源:互联网 发布:java带参的构造方法 编辑:程序博客网 时间:2024/06/07 20:07

一.
形式参数:

基本数据类型你要什么数据类型,在实际传参的时候就传什么数据类型;形式参数的改变对实际参数没有影响(String是引用类型和基本数据类型的效果一样String s ="abc")如果形式参数是引用类型:                    具体类类:如果形式参数是一个具体类,那么需要创建该类对象                    抽象类:如果形式参数是抽象类的情况,那么需要自定义一个抽象类的子类,来进行实例化(创建对象)!,创建对象的实质:抽象类多态!                    接口:如果形式参数是接口情况,那么需要自定义一个接口的子实现类,然后通过接口多态的形式给接口进行实例化!

具体类:

//  具体类 class Demo{    //成员方法    public float sum(float a,float b){        return  (a + b) ;    }}//定义一个类class Student{    public void show(){        System.out.println("好好学习,天天向上...");    }}class StudentDemo{public void method(Student s){//形式参数是一个引用类型,那么需要创建该类对象Student s = new Student() ;        s.show() ;    }}/*class StudentDemo{    public Student method(){//如果方法的返回值是一个具体的类,那么需要该类对象        /*Student s = new Student() ;        return s ;*/        return new Student() ;    }}*///测试类public class StudentTest {    public static void main(String[] args) {        //两个实际参数        /*int a = 10 ;        int b = 20 ;*/        float a = 10.0F;        float b = 12.34F;        //需求:需要调用sum来进行求和        Demo d = new Demo() ;        float result = d.sum(a, b) ;        System.out.println("result:"+result);        System.out.println("------------------------");        //需求:需要调用StudentDemo这个类中method()方法        //需要创建StudentDemo这个类的对象//      StudentDemo sd = new StudentDemo() ;//      //创建Student类的对象//      Student s = new Student() ;//      sd.method(s) ;//当前s变量不可用//      sd.method(s) ;//s就代表Student类的对象,把空间地址值作为参数传递        //返回值是具体的类:        //创建StudentDemo类对象        StudentDemo sd = new StudentDemo() ;        Student s = sd.method() ;        s.show();    }}抽象类: //抽象类abstract class Person{    public abstract void show();}class Student extends Person{    @Override    public void show() {        System.out.println("重写了show方法");    }}//测试类public class Test {    public static void main(String[] args) {//通过多态的方式,创建一个Person类型的变量,而这个对象实际是Student        Person p = new Student();//调用method方法        method(p);    }    //定义一个方法method,用来接收一个Person类型对象,在方法中调用Person对象的show方法    public static void method(Person p){//抽象类作为参数//通过p变量调用show方法,这时实际调用的是Student对象中的show方法        p.show();    }}接口://接口interface Inter{    public abstract void love() ;}//定义一个类class TeacherDemo{    public void method(Inter i){//接口不能实例化:  如果一个方法的形式参数是一个接口,那么需要创建该接口的子实现类对象        i.love() ;    }}//由于接口不能实例化,需要定义接口的子实现类class Student3 implements Inter{    @Override    public void love() {        System.out.println("学生爱学习,爱java...");    }}//测试类public class TeacherTest {    public static void main(String[] args) {        //需求:需要调用TeacherDemo类中的method()方法        //创建该类对象        TeacherDemo td = new TeacherDemo() ;        //创建该接口对象:通过接口多态        Inter i = new Student3() ; //接口多态    /*  Inter i = new Inter() { //匿名内部类             @Override            public void love() {                System.out.println("学生爱学习,爱java...");            }        };*/        td.method(i) ;    }}

二.返回值

具体类:直接返回该类对象(通常实际开发中使用的是匿名对象)抽象类:返回值如果是抽象类,需要的返回是该抽象类的子类对象接口:返回值是接口类型时,那么该方法需要返回一个接口实现类对象

具体类:

class Demo{    //成员方法    public float sum(float a,float b){        return  (a + b) ;    }}//定义一个类class Student{    public void show(){        System.out.println("好好学习,天天向上...");    }}//class StudentDemo{//  public void method(Student s){//形式参数是一个引用类型,那么需要该类对象Student s = new Student() ;//      s.show() ;//  }//}class StudentDemo{    public Student method(){//如果方法的返回值是一个具体的类,那么需要该类对象        /*Student s = new Student() ;        return s ;*/        return new Student() ;    }}//测试类public class StudentTest {    public static void main(String[] args) {        //两个实际参数        /*int a = 10 ;        int b = 20 ;*/        float a = 10.0F;        float b = 12.34F;        //需求:需要调用sum来进行求和        Demo d = new Demo() ;        float result = d.sum(a, b) ;        System.out.println("result:"+result);        System.out.println("------------------------");        //需求:需要调用StudentDemo这个类中method()方法        //需要创建StudentDemo这个类的对象//      StudentDemo sd = new StudentDemo() ;//      //创建Student类的对象//      Student s = new Student() ;////        sd.method(s) ;//当前s变量不可用//      sd.method(s) ;//s就代表Student类的对象,把空间地址值作为参数传递        //返回值是具体的类:        //创建StudentDemo类对象        StudentDemo sd = new StudentDemo() ;        Student s = sd.method() ;        s.show();    }}

抽象类:

abstract class Person2{    public abstract void show() ;}//定义PersonDemo2类class PersonDemo2{    public Person2 method(){ // 如果一个方法的返回值是一个抽象类,需要的返回是该抽象类的子类对象        /*Person2 p = new Teacher() ;        return p ;*/        return new Teacher() ;//Person2 p = new Teacher() ;    }}//抽象类的子类class Teacher extends Person2{    @Override    public void show() {        System.out.println("老师爱高圆圆,爱生活...");    }}//测试类public class PersonTest2 {    public static void main(String[] args) {        //需求:要调用PersonDemo2这个类中的method()方法        PersonDemo2 pd = new PersonDemo2() ;        Person2 p = pd.method() ;//pd.method();return new Teacher() ----->Person2 p = new Teacher() ;        p.show() ;        System.out.println("----------------");        //链式编程        Person2 p2 = new PersonDemo2().method() ;//链式编程        p2.show() ;    }}

接口:

//接口interface Smoke{    public abstract void smoking();}class Student implements Smoke{    @Override    public void smoking() {        System.out.println("课下吸口烟,赛过活神仙");    }}//测试类public class Test {    public static void main(String[] args) {//调用method方法,获取返回的会吸烟的对象        Smoke s = method();//通过s变量调用smoking方法,这时实际调用的是Student对象中的smoking方法        s.smoking();    } //定义一个方法method,用来获取一个具备吸烟功能的对象,并在方法中完成吸烟者的创建    public static Smoke method(){        Smoke sm = new Student();        return sm;    }}