1. 程式人生 > 其它 >面向物件(15):形式引數和返回值問題案例

面向物件(15):形式引數和返回值問題案例

面向物件(15):形式引數和返回值問題案例

一、形式引數

形式引數:
    (1)基本資料型別:byte、short、int、long、float、double、char、boolean
    (2)引用資料型別:類、介面、陣列、抽象類

1、當類作為形參:實際上傳的是該類的物件的地址值

class Student{
    public void study(){
        System.out.println("好好學習天天向上");
    }
}

class StudentDemo{
    //但凡今後看到一個方法的引數是一個類的型別傳參的時候
    //實際上傳的是該類的物件的地址值
    public void fun(Student s){
        s.study();
    }
}

public class StudentTest {
    public static void main(String[] args) {
        StudentDemo sd = new StudentDemo();
        //使用匿名物件傳參
        sd.fun(new Student());
    }
}
        執行結果如下:
                好好學習天天向上

                Process finished with exit code 0

2、當抽象類作為方法的形式引數的時候,使用多型的形式建立物件

//抽象類
abstract class Person{
    public abstract void study();
}
//具體的類
class Student2 extends Person {
//重寫抽象類中的方法
    @Override
    public void study() {
        System.out.println("好好學習天天向上");
    }
}

class PersonDemo{
    //將來看到當一個抽象方法作為形式引數型別的時候
    //實際上需要的是子類實現物件的地址值,利用多型的性質
    public void fun(Person p){ 
        p.study();
    }
}

//測試類
public class PersonTest {
    public static void main(String[] args) {
        PersonDemo pd = new PersonDemo();
        //使用匿名物件傳參
        pd.fun(new Student2());//將抽象類的子類物件的地址值傳進去
    }
}
            執行結果如下:
                        好好學習天天向上

                        Process finished with exit code 0

3、當介面作為方法的形式引數的時候,使用介面多型的形式建立物件

interface Person2{
    public abstract void study();
}

class Teacher implements Person2{

    @Override
    public void study() {
        System.out.println("好好學習天天向上");
    }
}

class TeacherDemo{
    //將來看到當介面作為形式引數傳入的時候
    //實際上需要的是該介面的實現類的物件的地址值,利用介面多型的性質
    public void fun(Person2 person2){ // Person2 person2 = new Teacher();
        person2.study();
    }
}

public class TeacherTest {
    public static void main(String[] args) {
        TeacherDemo td = new TeacherDemo();
        td.fun(new Teacher());
    }
}
			執行結果如下:
                        好好學習天天向上

                        Process finished with exit code 0

二、返回值型別

返回值:
    (1)基本資料型別:byte、short、int、long、float、double、char、boolean
    (2)引用資料型別:類、介面、抽象類

1、當類作為返回值,返回的結果是什麼?

當類作為方法的返回值型別的時候,返回是實際上是該類物件的地址值

class Student3{
    public void study(){
        System.out.println("好好學習天天向上");
    }
}

class StudentDemo3{
   public Student3 fun(){
		//return new Student3();
        //當類作為方法的返回值型別的時候,返回是實際上是該類物件的地址值
       Student3 s = new Student3();
       return s;
   }
}

public class StudentTest2 {
    public static void main(String[] args) {
        StudentDemo3 sd = new StudentDemo3();
        Student3 s = sd.fun();
        s.study();
    }
}

2、當抽象類作為返回值,返回的結果是什麼?

需要的是該抽象類子類的物件

abstract class Person3{
    public abstract void study();
}

class PersonDemo3{
    public Person3 getPerson(){
        //抽象類不能例項化
		//Person3 person3 = new Person3();
		//return person3;

		//Doctor doctor = new Doctor();//該方法可行
		//return doctor;
        Person3 person3 = new Doctor();//建議使用該方法
        return person3;
    }
}

class Doctor extends Person3{
    @Override
    public void study() {
        System.out.println("醫生學習醫術");
    }
}

public class PersonTest2 {
    public static void main(String[] args) {
        PersonDemo3 pd3 = new PersonDemo3();
        Person3 person3 = pd3.getPerson(); //Person3 person3 = new Doctor();
        person3.study();
    }
}
            執行結果如下:
                        醫生學習醫術

                        Process finished with exit code 0

3、當介面作為返回值,返回的結果是什麼?

需要的是實現該介面的類的物件

interface PlayGame{
    public abstract void playLoL();
}

class Teacher2 implements PlayGame{

    @Override
    public void playLoL() {
        System.out.println("老師打英雄聯盟");
    }
}

class TeacherDemo2{
    public PlayGame getPlayGame(){
        PlayGame pg = new Teacher2();
        return pg;
    }
}

public class TeacherTest2 {
    public static void main(String[] args) {
       /*
        TeacherDemo2 td2 = new TeacherDemo2();
        //使用介面多型
         PlayGame pg = td2.getPlayGame();
         pg.playLoL();
       */
      
        	/*
             td2用new TeacherDemo2()替代,得:
             PlayGame pg = new TeacherDemo2().getPlayGame();
             pg.playLoL();

             pg用new TeacherDemo2().getPlayGame();替代,得:
             new TeacherDemo2().getPlayGame().playLoL();
         	*/

        //鏈式程式設計(後面大家會學習scala,spark,flink)
        new TeacherDemo2().getPlayGame().playLoL();
    }
}
        執行結果如下:
                老師打英雄聯盟

                Process finished with exit code 0