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