面向物件(15):形式引數和返回值問題案例
阿新 • • 發佈:2021-12-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