JAVA對多型的理解
多型一般理解為編譯與執行時的不同狀態。
例如 LIst list = new ArrayList();
目前,我的理解為編譯程式的時候,類中的成員變數,成員方法看左邊 || 而在執行時,成員方法則看右邊。
class A{ public String run(D obj){ return ("A & D"); } public String run(A obj){ return ("A & A"); } } class B extends A{ public String run(B obj){ return ("B & B"); } public String run(A obj){ return ("B & A"); } } class C extends B{} class D extends B{}
A aa = new A(); A ab = new B(); B b = new B(); C c = new C(); D d = new D(); System.out.println(aa.run(b));//A & A System.out.println(aa.run(c));//A & A System.out.println(aa.run(d));//A & D System.out.println(ab.run(b));//B & A System.out.println(ab.run(c));//B & A System.out.println(ab.run(d));//A & D System.out.println(b.run(b));//B & B System.out.println(b.run(c));//B & B System.out.println(b.run(d));//A & D
可以看這個例子,比如:
/**
* ab.run(d); 在這個方法中,ab這個物件,編譯時看左邊,所以ab這個物件擁有run(D obg)和run(A obj)兩個方法,
* 所以ab.run(d)輸出為A & D.同理可以的出其他結果。
* 需要注意的是,雖然ab這個物件new的是B,但是因為編譯時看的是左邊的方法,所以ab不可以呼叫B中的專有方法run(B obj)
*即使呼叫了run(b),也會將b看作A的子類,從而呼叫run(A obj)
* */
相關推薦
JAVA對多型的理解
多型一般理解為編譯與執行時的不同狀態。例如 LIst list = new ArrayList();目前,我的理解為編譯程式的時候,類中的成員變數,成員方法看左邊 || 而在執行時,成員方法則看右邊。class A{ public String ru
java面試(4):對多型的理解
面向物件程式設計有三大特性:封裝、繼承、多型。 封裝隱藏了類的內部實現機制,可以在不影響使用的情況下改變類的內部結構,同時也保護了資料。對外界來說它的內部細節是隱藏的,暴露給外界的只是它的訪問方法。 &nb
java中對多型的理解
子類Cat重寫了父類Animal的非靜態成員方法am.eat();的輸出結果為:貓吃飯。 子類重寫了父類(Animal)的靜態成員方法am.sleep();的輸出結果為:動物在睡覺 未被子類(Cat)重寫的父類(Animal)方法am.run()輸出結果為:動物在奔跑 System.out.println(a
談談我對多型的理解
什麼是多型 多型是面向物件的特性之一,從字面上理解,多型就是指一個物件在執行是會有多種形態,就比如可以說student是一個person,也可以說student是一個object。 我們來看一個經典的例子: Service service=new ServiceImpl(); 我們經
java語言機制中的多型多型理解以及多型的向上轉型和向下轉型問題
多型中轉型問題往往不容易理解,特別是向上和向下轉型。 下面先說說多型的概念和前提: 1.要有繼承關係; 2.要有方法重寫; 3.要有父類引用指向子類物件; 如果是成員變數的話,編譯看左邊(父類),執行看左邊(子類); 如果是成員方法的話,編譯看左邊(父類),執行看右邊(子類)
C++學習之對多型的理解
最近學習C++多型及子類記憶體結構,有一些理解與看法,記錄下來 1.多型產生,虛擬函式,虛擬函式指標,虛擬函式表 這一部分不詳細描述,個人參考的書籍是Siddhartha Rao的<21天學通C++>的第11章:多型 瞭解了編譯器利用虛擬函式表與物件的虛擬函式指標來實現多型的
.Net高階技術:對多型的深入理解
一、C#多型的特性使得設計模式成為可能 二十多種設計模式的都是基於多型 二、多型的表現形式 1.普通類 子類能夠繼承父類的所有成員(父類的私有成員子類物件不能直接訪問到),包括父類實現的介面已經父類繼承的其他類的成員。 將方法標記為virtual,表示子類可以重寫這個方法(當然也
java中多型的理解
多型的定義:指允許不同類的物件對同一訊息做出響應。即同一訊息可以根據傳送物件的不同而採用多種不同的行為方式。 實現多型的技術稱為:動態繫結(dynamic binding),是指在執行期間判斷所引用
JAVA多型理解(包含他人經典例子)
引言:理解JAVA多型應先理解JAVA繼承、封裝。 一、什麼是多型 面向物件程式設計有三個特徵,即封裝、繼承和多型。 1. 封裝隱藏了類的內部實現機制,從而可以在不影響使用者的前提下改變類的內部結構,同時保護了資料。 2. 繼承是為了重用父類程式碼,同時為實現
深入理解Java的多型
這幾天我在重新複習Java語言基礎,雖然和團隊一起,自己個人都進行了實際專案的開發,但越往上面走越覺得自己應該花點時間看看Java的基礎知識,鞏固一下基礎。今天覆習的是多型,同時寫下自己的學習心得。 資料抽象、繼承和多型是面向物件程式設計語言的三大
java中多型的理解,instanceof關鍵字,向上向下轉型的理解
一、多型的定義 比如:人可以是學生,也可以是老師,也可以是軍人。這就表現了人的多種形態性。多型就是多種形態。 多型的最終體現為:父類的引用變數可以指向子類物件。 多型的前提是必須有子父類關係,或者類實現介面關係,否則無法完成多型。 在使用多型後,父類的引用變數呼叫方法時,會呼叫子
通俗理解JAVA的多型機制
多型是Java面向物件的一個非常重要的機制,多型也被稱為動態繫結,該機制是用於增強可擴充套件性而提出的。 多型的必要條件: 1.存在繼承關係 2.對父類中的方法進行了重寫 3.呼叫方法時,形參為父類引用 在實際執行時,父類引用指向子類物件,呼叫的是實際
Java中多型轉型的問題理解及多型概述
一、虛擬碼 class 孔子爹 { public int age = 40; public void teach() { System.out.println("講解Java"); }
java 對類型的基本操作小結
() sage PE nor .get eight getname valueof XML 1.json 字符串轉換成對象 SyncCarriageStatusDTO dto= JSON.parseObject(value,SyncCarriageStatusDTO.cla
JAVA的多型----父類與子類轉換問題
JAVA語言中, 物件變數是多型的 每個子類物件都算是父類物件(子類物件可以當作父類變數所引用) 那反過來可不可以呢? 答案是取決於父類變數引用的是誰 如果父類變數引用的是子類物件的例項, 可以通過強轉被子類變數引用 如果父類變數引用的是父類物件的例項,則不能被為子類變數引用
java學習-多型
1、類的繼承關係 1.1 PDemo2.java public class PDemo2 { public void say(){ System.out.println("PDemo2 say()....."); } } 1.2 CDem
thinking in java (二) ----- 多型
面向物件的三大特性:封裝,繼承,多型。 封裝 封裝將類的內部資訊隱藏,不允許外部直接訪問(private),通過該類提供的方法(get(),set())來訪問操作類隱藏的資訊。隱藏了類的資訊,留出了訪問操作的介面。 繼承 為了複用父類的程式碼,兩個類如果有is-a關係,子類就可以繼承
JAVA的多型(強制轉換)
1 abstract class Animal { 2 String name; 3 String color; 4 5 public Animal(String name, String color) { 6 this.name = name;
Java特性-多型
多型: 封裝和繼承都是為多型服務的。 一個介面,多種實現。 能使用介面就不用抽象類,能使用抽象類就不用類,能用父類就不用子類。 目的: 把不同的子類物件都當作父類來看,可以遮蔽不同子類物件之間的差異,寫出通用的程式碼,做出通用的程式設計,以適應需
java-day10-多型
10.1 練習 畢姥爺: 講課 釣魚 畢老師 extends 畢姥爺 講課 釣魚 要求看到向上轉型,向下轉型 package day09; class BiLaoYe{ public void lecture(){