日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

JAVA子类作为实参父类作为形参_java 多态 实参形参

發布時間:2024/1/8 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA子类作为实参父类作为形参_java 多态 实参形参 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多態:

概述:

多態是繼 封裝性,繼承性,面向對象的第三大特性

定義:

多態:是指同一行為具有多個不同的表現形式.

生活中:比如跑的動作:貓,狗,大象,跑起來的動作都是不一樣的

飛的動作:昆蟲,鳥類,人造飛機,飛起來的動作都是不一樣的

可見同一行為通過不同的事物,可以表現出不同的形態.

多態描述的就是這樣的一種狀態

前提:

1.繼承或實現【二選其一】

2.父類的引用指向子類的對象【格式體現】

3.方法的重寫【意義:不重寫無意義】

表現:多態表現得格式:

父類類型 變量名 = new 子類對象;

變量名.方法名();

備注:父類類型指的是子類對象繼承的父類類型,或者實現的父接口類型.

public class Fu{

public void method(){

System.out.println("父類的method方法");

}

}

//1.繼承

public class Zi extends Fu{

//2.重寫

@Override

public void method(){

System.out.println("子類重寫后的method方法");

}

}

public class TestPolymorphismDemo01{

public static void main(String[] args){

//多態格式

/*

父類類型 變量名 = new 子類對象;

變量名.方法名();

*/

//3.父類引用指向子類的對象

Fu fu = new Zi();

fu.method();//本質調用的是子類當中重新給之后的method方法

}

}

如果在使用多態方式調用方法時,首先檢查父類當中是否有該方法,

如果沒有則編譯直接報錯,如果有執行的是子類重寫后的方法

好處:

在實際開發中,父類類型作為方法的 形式參數(不同于實際參數),傳遞子類對象(實參)給方法,

進行方法的調用更能體現出多態的擴展性和便利性

代碼如下:

//定義一個抽象的父類

public abstract class Animal{

//定義一個抽象的方法

public abstract void eat();

}

//定義子類

public class Cat extends Animal{

@Override

public void eat(){

System.out.println("貓吃魚");

}

}

public class Dog extends Animal{

@Override

public void eat(){

System.out.println("啃骨頭");

}

}

public class TestPolyDemo03 {

public static void main(String[] args) {

//根據不同的對象來表現不同的吃的內容

Cat c = new Cat();

//showCatEat(c);//貓吃魚

Dog d = new Dog();

//showCatEat(dog);

showAnimalEat(c);

showAnimalEat(d);

}

/*public static void showCatEat(Cat cat){

cat.eat();

}

public static void showDogEat(Dog dog){

dog.eat();

}*/

/*

以上兩個方法可以用多態進行簡化 可以用showAnimalEat來替代

*/

public static void showAnimalEat(Animal animal){

animal.eat();

}

}

說明:由于多態特性的支持,showAnimalEat方法中的Animal類型,是Dog和Cat的父類類型,

父類類型接收子類對象,當然可以把cat對象和dog對象傳遞給方法.

當程序執行過程中.執行eat方法實際執行的是各自子類對象重寫之后的eat方法

不僅僅可以做到替代,在擴展性方面,無論之后出現多個子類,都不用編寫showXxxEat()方法了

直接使用showAnimalEat()方法了

好處:體現在 可以使程序編寫更簡單,并且具有良好的擴展性.

訪問類中的成員變量有兩種方式(多態前提)

1.直接通過對象名訪問成員變量:看等號左邊是誰,優先用誰,如果沒有繼續往上找

2.間接的通過成員方法訪問成員變量:看該方法屬于誰,優先用誰,如果沒有繼續往上找

//定義一個父類

public class Fu{

int num = 10;

//成員方法

public void showNum(){

System.out.println(num);

}

}

//子類

public class Zi extends Fu {

int num = 20;

@Override

public void showNum(){

System.out.println(num);

}

}

//測試類

public class TestPolyFieldDemo01 {

public static void main(String[] args){

//多態的表示形式

//父類類型 變量名 = new 子類對象;

//變量名.成員變量名

Fu fu = new Zi();

System.out.println(fu.num);

fu.showNum();//10? 20

}

}

引用數據類型的轉型

多態的轉型:分為向上轉型和向下轉型兩種情況:

向上轉型:

向上轉型:多態本身就是子類類型向父類類型 向上壯轉型的過程,這個過程是默認的

當一個父類引用指向了一個子類對象時,便是向上轉型.

使用格式:

父類類型 變量名 = new 子類類型();

比如Animal animal = new Cat();

向下轉型

向下轉型:父類類型向子類類型向下轉換的過程,這個過程是強制的:

一個已經向上轉型的子類對象,將父類的引用又轉為子類的引用,可以使用強制類型轉換

使用格式:

子類類型 變量名 = (子類類型)父類變量名;

比如:Cat cat = (Cat) animal;

轉型異常:

在進行向下轉換的過程中,一不小心就會出現java.lang.ClassCastException類型轉換異常

為了避免這種類型轉換異常的發生,java就提供了 【instanceof】 關鍵字,給引用變量做類型的校驗

格式如下:

變量名 instanceof 數據類型

如果變量屬于該數據類型則返回true

如果變量不屬于該數據類型則返回false

所以在轉換前,我們最好先進行引用變量的類型判斷,

代碼如下:

public class Test{

public static void main(Stirng[] args){

//向上轉形

Animal animal = new Cat();

//向下轉型

if(animal instanceof Cat){

//表明你就是一只貓

Cat cat = (Cat)animal;

cat.eat();//吃魚

cat.catchMouse();//逮老鼠

}else if(animal instanceof Dog){

//表名你就是一只狗

Dog dog = (Dog)animal;

dog.lookDoor();

}

}

}

實參與形參

main

int num = 10;//局部變量

TestPolymorphismDemo02.method(num)//指的是實參

public static void method(int num){int num 指的是形參

System.out.println(num);

}

總結

以上是生活随笔為你收集整理的JAVA子类作为实参父类作为形参_java 多态 实参形参的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。