java學習筆記之面向對象多態

来源:https://www.cnblogs.com/xuzhaocai/archive/2017/12/25/8111580.html
-Advertisement-
Play Games

面向對象三大特性之多態 一.多態的概念 多態是繼封裝,繼承之後,面向對象的三大特性。 現實事物經常會體現出多種形態,如學生,學生是人的一種,則一個具體的張三同學既是學生也是人,即出現兩種形態。 java作為面向對象的語言,同樣可以描述一個事物的多種形態,java中多態的代碼體現在一個子類對象(實現類 ...


面向對象三大特性之多態

一.多態的概念

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

  現實事物經常會體現出多種形態,如學生,學生是人的一種,則一個具體的張三同學既是學生也是人,即出現兩種形態。

  java作為面向對象的語言,同樣可以描述一個事物的多種形態,java中多態的代碼體現在一個子類對象(實現類對象)既可以給這個子類(實現類對象)引用變數賦值,又可以給這個子類(實現類對象)的父類(介面) 變數賦值。

  父類的引用變數指向子類對象。多態的前提需要有繼承關係或者是實現關係,否則沒法完成多態。在使用多態後的父類引用變數調用方法時,會調用子類重寫的;

二.多態的定義與使用

  多態的定義格式:就是父類的引用變數指向子類的對象;

    父類類型變數名  = new  子類對象();

    變數名.方法名();

  1.普通類的多態定義格式:

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

1 public class Fu {}
1 public class Zi extends  Fu{}
1 //多態使用
2 Fu  f= new Zi();

  2.抽象類多態的定義:

  抽象類變數名  =new  抽象類子類();

//抽象類
public abstract  class  Fu{

  public abstract  void method();  
}
//子類
public class Zi extends Fu{

   public void method(){//重寫抽象方法}
}
//多態的使用
Fu f=new Zi();

  3.介面多態定義的格式:

   介面變數名   =new   介面實現類();

  

//介面
public
interface Fu{ public abstract void method(); }
//實現類
public Zi  implements Fu{

   public void method(){
       //重寫介面的抽象方法
    }
}
//多態
Fu  f=new  Zi();

註意:雖然變數指向子類的對象,但表現的是一個父類的形態,可以調用一切父類的方法,子類特有的方法將不能調用

 

三.多態調用的註意事項:

  編譯:成員變數,成員方法都需要看父類;父類沒有編譯報錯;

  運行:成員變數運行父類的成員變數,成員方法運行父類重寫的方法

 

四.多態的好處與弊端

  好處:多態配合繼承子類重寫,提高了代碼的復用性與擴展性

  弊端:不能調用子類特有的方法

五.向上向下類型轉換

  多態本身是子類類型向父類類型向上轉型的過程;

  1.向上轉型:

    當子類的對象賦值給一個父類的引用時,便是向上轉型,多態本身就是向上轉型的過程

    使用格式:父類類型  變數名= new  子類類型();

  2.向下轉型:

    一個已經向上轉型的子類對象可以使用強制類型轉換的格式,將父類的引用轉換為子類引用,這個過程是向下轉型。直接創建父類對象的無法使用向下轉型;

    使用格式:

    子類類型    變數名= (子類類型)  父類類型的變數;

六.instanceof 關鍵字

  可以通過instanceof關鍵字來判斷某個對象是否屬於某種數據類型;

  使用格式:

     boolean  b= 對象(new )     instanceof  數據類型;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文作者在一年之內參加過多場面試,應聘崗位均為 Java 開發方向。在不斷的面試中,分類總結了 Java 開發崗位面試中的一些知識點。 主要包括以下幾個部分: 面試,是大家從學校走向社會的第一步。 互聯網公司的校園招聘,從形式上說,面試一般分為 2-3 輪技術面試 +1 輪 HR 面試。但是一些公司 ...
  • 在定義泛型時,我們可以通過extends來限定泛型類型的上限,也可以通過super來限定下限,這兩個限定字一般會和?等關鍵字搭配使用。 比如有這樣的代碼List<? super Father> dest,這裡,super包含“高於”的意思,? Super Father就表示dest存放的對象應當“以 ...
  • 本文詳細分析了Spring boot實現的一個web版的Hello World,通過Hello world這樣一個簡單的例子,詳細講解了Spring boot的基本操作,並對對Spring boot的原理做了相應的分析。 ...
  • [1]URL訪問 [2]參數傳入 [3]隱藏入口 [4]定義路由 [5]URL生成 ...
  • 1.抽象類可以有構造方法,介面沒有構造方法 Multiple markers at this line - Interfaces cannot have constructors - Syntax error on token "}", delete this token 2.一個子類只能繼承一個抽 ...
  • Swift是蘋果推出的一個比較新的語言,它除了借鑒語言如C#、Java等內容外,好像還採用了很多JavaScript腳本裡面的一些腳本語法,用起來感覺非常棒,作為一個使用C#多年的技術控,對這種比較超前的語言非常感興趣,之前也在學習ES6語法的時候學習了阮一峰的《ECMAScript 6 入門》,對... ...
  • 前言: Linux下搭建nginx+php+memached(LPMN)的時候,nginx.conf中配需要配置fastCGI,php需要安裝php-fpm擴展並啟動php-fpm守護進程,nginx才可以解析php腳本。那麼,這樣配置的背後原理是什麼?nginx、fastCGI、php-fpm之間 ...
  • Python的web模板,其實就是在HTML文檔中使用控制語句和表達語句替換HTML文檔中的變數來控制HTML的顯示格式,Python的web模板可以更加靈活和方便的控制HTML的顯示,而且大大地減少了編程人員的工作量。 模板語法: 1、控制語句{% ... %}:控制語句需要用{% end %}來 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...