天天看點

面向對象(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