日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 面相,java学习17-面相对象(多态)

發布時間:2023/12/4 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 面相,java学习17-面相对象(多态) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多態

——父類或者接口的引用指向自己的子類對象。

優點:提高代碼的擴展性

弊端:前期建立父類的引用,雖然可以接受后期所有該類的子類的對象。但是只能使用父類中的功能,不能使用子類特有的功能,因為前期的程序無法知道后期的子類的特有內容的。但是前期的程序可以使用子類覆蓋了父類的方法的內容。

前提:

1. 必須存在著繼承關系。

2. 通常使用覆蓋操作

例子:

package com.dragon.src;

/**

* 抽象類

* @author DRAGON

*

*/

abstract class Animal

{

abstract void eat();

}

class Dog extends Animal

{

@Override

void eat() {

System.out.println("小狗在吃飯");

}

public void Home(){

System.out.println("小狗在看門");

}

}

class Cat extends Animal{

@Override

void eat() {

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

}

public void catchMouse(){

System.out.println("小貓在捉老鼠");

}

}

class Pig extends Animal{

@Override

void eat() {

System.out.println("豬在吃飼料");

}

public void gongDi() {

System.out.println("豬拱地");

}

}

public class DuotaiDemo {

/**

* @param args

*/

public static void main(String[] args) {

Dog dog = new Dog();

//dog.eat();

Cat cat = new Cat();

//cat.eat();

Pig pig = new Pig();

//使用多態性,都屬于animal

eatmethod(dog);

eatmethod(cat);

eatmethod(pig);

/***********向上轉型*************/

//父類應用指向子類的對象

//animal引用可以指向任意的子類型的對象

//但animal引用只能調用Animal中的方法

Animal animal = new Dog();//

//好處:提高了擴展性

//局限:只能使用父類中的方法

//這種提升可以限制對子類對象的操作

/***********向上轉型*************/

Dog dog2 = (Dog)animal;//變成子類

//優點:可以使用子類的特有方法

//弊端:如果類型轉換錯誤,會出現運行異常

//應用情景:

//當需要對程序進行擴展,或者限定對對象的方法時,可以使用向上轉型,操作其父類型

//當要使用子類的特有的內容是,就需要向下轉型,轉型前一定要判斷,否則內容容易出現異常

//注意:在整個轉型過程中,自始至終都是一個子類對象在做類型的變化而已,千萬別把父類對象轉成子類型,這是不可能的

}

//共性功能

public static void eatmethod(Animal animal){

animal.eat();

}

//轉型判斷

public static void method(Animal animal) {

//向下轉型前的健壯性進行類型判斷

if(animal instanceof Cat){

Cat cat = (Cat)animal;

cat.catchMouse();

}else if(animal instanceof Dog){

Dog dog = (Dog)animal;

dog.Home();

}else if(animal instanceof Pig){

Pig pig = (Pig)animal;

pig.gongDi();

}

}

}

應用情景:

//當需要對程序進行擴展,或者限定對對象的方法時,可以使用向上轉型,操作其父類型

//當要使用子類的特有的內容是,就需要向下轉型,轉型前一定要判斷,否則內容容易出現異常

//注意:在整個轉型過程中,自始至終都是一個子類對象在做類型的變化而已,千萬別把父類對象轉成子類型,這是不可能的

原理:在同一塊堆內存塊中,不同的引用對方法產生了不同的作用。

多態的出現在成員調用上的特點:

1.成員變量

編譯時期:參考的是引用型變量所屬的類中是否有調用的成員變量,如果有,編譯通過,如果沒有編譯失敗。

運行時期:調用的也是引用型變量所屬類中的成員變量。

簡單說:編譯和運行都看等號的左邊。

2.成員函數。

編譯時期:參考的是引用型變量所屬的類中是否有調用的方法。有,編譯通過,沒有編譯失敗。

運行時期:參考的是對象所屬的類中是否有調用的方法,如果有運行子類自己的方法,如果沒有就父類的方法。

簡答說:編譯時期看左邊,運行時期看右邊。因為函數有一個覆蓋的特性。

非靜態方法需要和當期運行的對象進行動態綁定,哪個對象調用了這個方法,這個方法就所屬于哪個對象。就會運行哪個對象的中的方法。

3,靜態函數。

編譯時期:參考的是引用型變量所屬的類中是否該方法。

運行時期:參考的也是引用型變量所屬的類中的方法。

簡單說:編譯和運行都看左邊。

因為靜態方法是不所屬于對象的,是所屬于類的,

它會類加載的時候,靜態的綁定到所屬的類上。

總結

以上是生活随笔為你收集整理的java 面相,java学习17-面相对象(多态)的全部內容,希望文章能夠幫你解決所遇到的問題。

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