Java面向對象筆記

多態

一種類型的變量可以引用多種實際類型的對象

package ooplearn;public class Test {public static void main(String[] args) {Animal[] animals = new Animal[2];animals[0] = new Dog();animals[1] = new Cat();for (Animal animal : animals){animal.eat();}}
}class Animal {public void eat() {System.out.println("Animal eat");}
}class Dog extends Animal{public void eat(){System.out.println("Dog eat");}
}class Cat extends Animal{public void eat(){System.out.println("Cat eat");}
}

Animal類型的變量animal可以引用Dog和Cat類型對象,稱為多態。Animal就是animal變量的靜態類型,Dog和Cat就是animal變量的動態類型。animal.eat()調用的是變量動態類型的方法,稱為動態綁定

靜態綁定

package ooplearn;public class Test {public static void main(String[] args) {Dog d = new Dog();Animal a = d;System.out.println(d.title); // return DogSystem.out.println(a.title); // return Animal}
}
class Animal {public static String title = "Animal";
}class Dog extends Animal{public static String title = "Dog";
}

變量d的靜態類型是Dog,訪問Dog變量和方法,變量a的靜態類型是Animal,訪問Animal的變量和方法。訪問綁定到變量的靜態類型,稱靜態綁定

實例方法調用順序

package ooplearn;public class Test {public static void main(String[] args) {Animal[] animals = new Animal[2];animals[0] = new Dog();animals[1] = new Cat();for (Animal animal : animals){animal.eat();}}
}class Animal {public void eat() {System.out.println("Animal eat");}
}class Dog extends Animal{public void eat(){System.out.println("Dog eat");}
}
class Cat extends Animal{
}

上述代碼返回

Dog eat
Animal eat

循環輸出的過程animal變量的實際類型分別為Dog和Cat,先從實際類型找方法,找不到就去父類找。

內部類

定義在類里的類稱為內部類,一般與外部類(包含內部類的類)關系密切,與其他類關系不大。一般對外隱藏,有更好的封裝性。如Swing編程中為組件創建ActionListener:


import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;public class TwoButtons {JFrame frame;JLabel label;public static void main(String[] args) {TwoButtons gui = new TwoButtons();gui.go();}public void go() {frame = new JFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JButton labelButton = new JButton("Change Label");labelButton.addActionListener(new LabelListener());JButton colorButton = new JButton("Change Circle");colorButton.addActionListener(new ColorListener());label = new JLabel("I'm a label");MyDrawPanel drawPanel = new MyDrawPanel();}class LabelListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stublabel.setText("Ouch!");}}class ColorListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubframe.repaint();}}
}

權限修飾符

修飾本類本包其他包子類其他包
privateYNNN
不寫YYNN
protectedYYYN
publicYYYY

private修飾部分只能在本類中使用;缺省狀態下,可見性上升到當前包內,即在同一個包內的地方可以使用;protected范圍還包括本包之外其他包屬于自己子類的部分;public沒限制。

導圖

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/22341.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/22341.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/22341.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java面試題-集合

Java面試題-集合 1、什么是集合?2、集合和數組的區別是什么?3、集合有哪些特點?4、常用的集合類有哪些?5、List, Set, Map三者的區別?6、說說集合框架底層數據結構?7、線程安全的集合…

MeshFusion Pro : Ultimate Optimization Tool

MeshFusion Pro是Unity的強大優化工具,它使用一種高效的方法來組合對象,以減少繪制調用并提高FPS。 MeshFusion Pro可用于組合靜態對象以及LODGroups。您還可以創建動態組合對象,其中每個單獨的網格都可以在運行時移動,新的組合網格將自動更新。在保持單個網格自由度的同時…

【數據結構與算法 | 二叉樹篇】力扣101, 104, 111

1. 力扣101 : 對稱二叉樹 (1). 題 給你一個二叉樹的根節點 root , 檢查它是否軸對稱。 示例 1: 輸入:root [1,2,2,3,4,4,3] 輸出:true示例 2: 輸入:root [1,2,2,null,3,null,3] 輸出:false…

Java1.8語言+ springboot +mysql + Thymeleaf 全套家政上門服務平臺app小程序源碼

Java1.8語言 springboot mysql Thymeleaf 全套家政上門服務平臺app小程序源碼 家政系統是一套可以提供上門家政、上門維修、上門洗車、上門搬家等服務為一體的家政平臺解決方案。它能夠與微信對接、擁有用戶端小程序,并提供師傅端app,可以幫助創業者在…

樹的算法基礎知識

什么是樹: 樹是n(n>0)個結點的有限集。n0時稱為空樹。在任意一棵非空樹中: 有且僅有一個特定的稱為根的結點當n>1時,其余結點可分為m(m>0)個互不相交的有限集T1、T2、......、Tm&…

ElasticSearch學習筆記之三:Logstash數據分析

第3章 Logstash數據分析 Logstash使用管道方式進行日志的搜集處理和輸出。有點類似*NIX系統的管道命令 xxx | ccc | ddd,xxx執行完了會執行ccc,然后執行ddd。 在logstash中,包括了三個階段: 輸入input --> 處理filter(不是必須…

異或炸彈(easy)(牛客小白月賽95)

題目鏈接: D-異或炸彈(easy)_牛客小白月賽95 (nowcoder.com) 題目: 題目分析: 一看 還以為是二維差分的題呢 到后來才發現是一維差分問題 這里的距離是 曼哈頓距離 dis abs(x - xi) abs(y - yi) 暴力的做法 就是枚舉 n * n 個…

word-海報制作

1、確定海報的尺寸大小 2、創建主題顏色 設計-顏色-自定義顏色-柑橘rgb值改變著色1-著色6的顏色 3、將文字添加至文本框,更改字體顏色、大小和格式 4、添加背景水印:插入-形狀-文本框 5、組合全部元素 圖片素材網址:

Power BI前端設計:深度探索與實戰技巧

Power BI前端設計:深度探索與實戰技巧 Power BI作為一款強大的商業智能工具,其前端設計對于用戶體驗和數據可視化效果至關重要。本文將深入探討Power BI前端設計的四個關鍵方面、五個實用技巧、六個設計要素以及七個注意事項,助您提升Power …

學習分享-如何避免 Apache ShardingSphere 中的笛卡爾積現象

前言 Apache ShardingSphere 是一個開源的分布式數據庫中間件,旨在通過數據分片、分布式事務、分布式治理等技術,提升數據庫系統的性能和可擴展性。然而,最近在使用 ShardingSphere 進行分庫分表并多表查詢時,出現了笛卡爾積現象…

Spark Streaming 概述及入門案例

一、介紹 1. 不同的數據處理 從數據處理的方式: 流式數據處理(Streaming)批量數據處理(Batch) 從數據處理的延遲: 實時數據處理(毫秒級別)離線數據處理(小時或天級別) 2. 簡介 SparkStreaming 是一個準實時(秒或分鐘級別)、微批量的數據處理框架Spa…

在Red Hat Enterprise Linux 9上使用Docker快速安裝并部署RocketMQ

在Red Hat Enterprise Linux 9上快速安裝和部署RocketMQ可以按照以下步驟進行: 1. 安裝Docker 首先,確保Docker已經安裝在你的系統上。 更新系統包并安裝依賴項: sudo yum update -y sudo yum install -y yum-utils device-mapper-persiste…

2024年5月份面試總結

2024年5月份找工作/面試總結: 本人前段時間寫了剛過完年后的一個月內找工作的情況,請查看https://blog.csdn.net/zgaoq/article/details/136236788?spm1001.2014.3001.5501 但是后續寫的總結被和諧了,不知道這篇文章能不能發出來。 1、5月份…

系統架構設計師【第19章】: 大數據架構設計理論與實踐 (核心總結)

文章目錄 19.1 傳統數據處理系統存在的問題19.2 大數據處理系統架構分析19.2.1 大數據處理系統面臨挑戰19.2.2 大數據處理系統架構特征 19.3 Lambda架構19.3.1 Lambda架構對大數據處理系統的理解19.3.2 Lambda架構應用場景19.3.3 Lambda架構介紹19.3.4  Lambda架構的實…

數據庫的換行符到前端不展示了

是這樣的原本數據庫中的數據都是帶有\n換行符的但是頁面卻一直不展示 解決辦法 <el-drawer title"預覽" :visible.sync"drawer" :with-header"false"><div v-for"(item, index) in cardArray" :key"index"><…

如何將 Vue 應用程序部署到 Cloudflare Pages

在現代 Web 開發中&#xff0c;Vue.js 已經成為了一個非常受歡迎的前端框架。它的簡潔、高效和靈活性使得開發人員可以輕松構建出色的用戶界面和交互體驗。而 Cloudflare Pages 提供了一個簡單而強大的方式來托管和部署靜態網站和應用程序。本文將介紹如何將 Vue 應用程序部署到…

Android常見內存泄漏場景總結

一、非靜態內部類造成的內存泄漏 造成原因&#xff1a;非靜態內部類默認會持有外部類的引用&#xff0c;如果內部類的生命周期超過了外部類就會造成內存泄漏。 場景&#xff1a;當Activity銷毀后&#xff0c;由于內部類中存在異步耗時任務還在執行&#xff0c;導致Activity實…

[補題記錄]Leetcode 3.無重復字符的最長子串

傳送門&#xff1a;無重復字符的最長子串 Problem/題意 給一個由英文、數字、符號、空格組成的字符串&#xff0c;找出其中不含有重復字符的最長子串的長度。 比如&#xff1a;abb 包含了重復字符 b&#xff1b;abc 沒有包含重復字符。 注意是子串&#xff0c;不是子序列。 …

內網安全:橫向傳遞攻擊(PTH || PTK || PTT 哈希票據傳遞)

內網安全&#xff1a;橫向傳遞攻擊. 橫向移動就是在拿下對方一臺主機后&#xff0c;以拿下的那臺主機作為跳板&#xff0c;對內網的其他主機再進行后面滲透&#xff0c;利用既有的資源嘗試獲取更多的憑據、更高的權限&#xff0c;一步一步拿下更多的主機&#xff0c;進而達到控…

CodeMirror 創建標簽計算編輯器

在日常開發中對于一些數據計算場景可能會遇到標簽計算的需求&#xff0c;下面關于如何使用CodeMirror實現標簽計算編輯功能。 1&#xff0c;結果圖 2&#xff0c;主體代碼邏輯 大家只需要復制粘貼主要codeMirror使用邏輯即可 <template><el-dialogref"dialogRe…