《廖雪峰Java教程》——面向對象基礎(1)

參考資料:

  • 面向對象基礎 - 廖雪峰的官方網站 (liaoxuefeng.com)

方法

Java 的方法允許定義可變參數

class Group {private String[] names;public void setNames(String... names) {this.names = names;}
}

可變參數代替數組類型的好處有:

  • 可變參數的傳參形式更簡單:

    Group g = new Group();
    g.setNames("Xiao Ming", "Xiao Hong", "Xiao jun");	// 可變參數
    g.setNames(new String[] {"Xiao Ming", "Xiao Hong", "Xiao jun"});	// 數組參數
    
  • 可變參數可以避免傳入 null

基本類型值傳遞,引用類型引用傳遞。

構造方法

class Person {private String name = "Unamed";private int age = 10;public Person(String name, int age) {this.name = name;this.age = age;}
}

在Java中,創建對象實例的時候,先初始化字段,例如,int age = 10; 表示字段初始化為 10 ,然后執行構造方法的代碼進行初始化。

方法重載

和 C++ 類似

繼承

使用 extends 關鍵字實現繼承:

class Person {private String name;private int age;public String getName() {...}public void setName(String name) {...}public int getAge() {...}public void setAge(int age) {...}
}class Student extends Person {// 不要重復name和age字段/方法,// 只需要定義新增score字段/方法:private int score;public int getScore() {}public void setScore(int score) {}
}

在Java中,沒有明確寫 extends 的類,編譯器會自動加上 extends Object ,所以除了 object 類,任何類都會繼承自某個類。

Java只允許一個class繼承自一個類,因此,一個類有且僅有一個父類

super

super 關鍵字表示父類:

class Person {protected String name;protected int age;public Person(String name, int age) {this.name = name;this.age = age;}
}class Student extends Person {protected int score;public Student(String name, int age, int score) {this.score = score;}
}

上述代碼會編譯報錯,這是因為在 Java 中,任何 class 的構造方法,第一行語句必須是調用父類的構造方法。如果沒有明確地調用父類的構造方法,編譯器會幫我們自動加一句 super(); 由于 Person 類沒有無參的構造方法,所以編譯失敗。

我們可以使用 super 顯示調用父類的構造方法:

class Student extends Person {protected int score;public Student(String name, int age, int score) {super(name, age); // 調用父類的構造方法Person(String, int)this.score = score;}
}

阻止繼承

使用 final 關鍵字修飾不能被繼承的類。

從 Java 15 開始,可以使用 sealedpermits 來明確指定能夠繼承該 class 的類:

public sealed class Shape permits Rect, Circle, Triangle {...
}

向上轉型

可以讓父類型的引用變量指向子類型的實例。

向下轉型

Person p1 = new Student(); // upcasting, ok
Person p2 = new Person();
Student s1 = (Student) p1; // ok
Student s2 = (Student) p2; // runtime error! ClassCastException!

向下轉型能否成功由變量實際所指的類型決定,可以使用 instanceof 加以判斷:

Person p = new Person();
System.out.println(p instanceof Person); // true
System.out.println(p instanceof Student); // falseStudent s = new Student();
System.out.println(s instanceof Person); // true
System.out.println(s instanceof Student); // trueStudent n = null;
System.out.println(n instanceof Student); // false

instanceof 實際上判斷一個變量所指向的實例是否是指定類型,或者這個類型的子類。如果一個引用變量為 null ,那么對任何 instanceof 的判斷都為 false

從 Java 14 開始,判斷 instanceof 后可以直接轉型為指定變量:

Object obj = "hello";
if (obj instanceof String) {String s = (String) obj;System.out.println(s.toUpperCase());
}// 可以簡寫為Object obj = "hello";
if (obj instanceof String s) {System.out.println(s.toUpperCase());
}

區分繼承和組合

繼承是 is 關系,組合是 has 關系。

多態

可以使用 @Override讓編譯器幫助檢查是否進行了正確的覆寫:

class Person {public void run() {}
}public class Student extends Person {@Override // Compile error!public void run(String s) {}
}

實例方法調用是基于運行時的實際類型的動態調用,而非變量的聲明類型。

覆寫Object方法

Object 定義了幾個重要的方法:

  • toString() :把 instance 輸出為 String
  • equals() :判斷兩個 instance 是否邏輯相等;
  • hashCode() :計算一個 instance 的哈希值。

final

如果一個父類不允許子類對它的某個方法進行覆寫,可以把該方法標記為 final

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

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

相關文章

Java服務器代碼遠程調試(IDEA版)

Java服務器代碼遠程調試 配置啟動腳本參數配置IDEA遠程調試工具操作步驟 注意:遠程調試的代碼需要與本地代碼一致,遠程調試目的是解決本地環境無法支持調試的情況下,解決線上(測試)環境調試問題。 配置啟動腳本參數 n…

如何壓縮視頻大小,怎么壓縮視頻

在數字化浪潮中,視頻已成為我們生活和工作的重要部分。但視頻往往伴隨著大文件體積,這給存儲和分享帶來了不少困擾。本文將為您揭秘好用的壓縮視頻的方法,幫助您輕松減小視頻文件大小,提高分享效率! 方法,使…

C++——模擬戰爭游戲

以下是一個使用C編寫的簡單模擬戰爭游戲的示例代碼&#xff1a; #include <iostream> #include <vector> #include <random>// 聲明一個簡單的戰士類 class Warrior { public:Warrior(int attackPower) : m_attackPower(attackPower) {}int getAttackPower(…

spring boot 整合 sentinel

注意版本問題 我這是jdk11 、spring boot 2.7.15 、 alibaba-sentinel 2.1.2.RELEASE <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.15</version><…

[圖解]SysML和EA建模住宅安全系統-05-參數圖

1 00:00:01,140 --> 00:00:03,060 這是實數沒錯&#xff0c;這是分鐘 2 00:00:03,750 --> 00:00:07,490 但是你在這里選&#xff0c;選不了的 3 00:00:07,500 --> 00:00:09,930 因為它這里不能夠有那個 4 00:00:11,990 --> 00:00:13,850 但是我們前面這里 5 00…

vue長列表,虛擬滾動

1.新建子組件&#xff0c;將數據傳遞過去(幾萬條數據的數組&#xff0c;一次性展示多少條&#xff0c;每條數據的行高). <template><div class"vitualScroll"><sub-scroll :dataList"dataList" :rowCount"20" :rowHeight"2…

[JavaScript]“復雜”的 this

【版權聲明】未經博主同意&#xff0c;謝絕轉載&#xff01;&#xff08;請尊重原創&#xff0c;博主保留追究權&#xff09; https://blog.csdn.net/m0_69908381/article/details/140092319 出自【進步*于辰的博客】 參考筆記二&#xff0c;P6.1&#xff1b;筆記三&#xff0c…

【鏈表】- 兩數相加

1. 對應力扣題目連接 兩數相加 2. 實現案例代碼 public class AddingTwoNumbers {public static void main(String[] args) {// 示例用例 1ListNode l1 new ListNode(2);l1.next new ListNode(4);l1.next.next new ListNode(5);ListNode l2 new ListNode(5);l2.next ne…

【Python爬蟲】Python爬取喜馬拉雅,爬蟲教程!

一、思路設計 &#xff08;1&#xff09;分析網頁 在喜馬拉雅主頁找到自己想要的音頻&#xff0c;得到目標URL&#xff1a;https://www.ximalaya.com/qinggan/321787/ 通過分析頁面的網絡抓包&#xff0c;最終的到一個比較有用的json數據包 通過分析&#xff0c;得到了發送json…

docker部署前端,配置域名和ssl

之前使用80端口部署前端項目后&#xff0c;可以使用IP端口號在公網訪問到部署的項目。 進行ICP域名備案后&#xff0c;可以通過域名解析將IP套殼&#xff0c;訪問域名直接訪問到部署的項目~ 如果使用http協議可以很容易實現這個需求&#xff0c;對nginx.conf文件進行修改&#…

Spring Boot集成DeepLearning4j實現圖片數字識別

1.什么是DeepLearning4j&#xff1f; DeepLearning4J&#xff08;DL4J&#xff09;是一套基于Java語言的神經網絡工具包&#xff0c;可以構建、定型和部署神經網絡。DL4J與Hadoop和Spark集成&#xff0c;支持分布式CPU和GPU&#xff0c;為商業環境&#xff08;而非研究工具目的…

《昇思25天學習打卡營第28天 | 昇思MindSporeVision Transformer圖像分類》

第28天 本節學習了Vision Transformer圖像分類 ViT則是自然語言處理和計算機視覺兩個領域的融合結晶。在不依賴卷積操作的情況下&#xff0c;依然可以在圖像分類任務上達到很好的效果。ViT模型的主體結構是基于Transformer模型的Encoder部分&#xff08;部分結構順序有調整&a…

Mojo: AI開發的革命性編程語言

------------->更多內容&#xff0c;請移步“魯班秘笈”&#xff01;&#xff01;<------------- 剛剛Mojo和HuggingFace一樣發布新版本&#xff0c;此版本編號為24.4&#xff0c;包括幾個核心語言和標準庫增強功能。此版本最大的亮點之一是收到了來自18個社區貢獻者的21…

redis布隆過濾器原理及應用場景

目錄 原理 應用場景 優點 缺點 布隆過濾器&#xff08;Bloom Filter&#xff09;是一種空間效率很高的隨機數據結構&#xff0c;它利用位數組和哈希函數來判斷一個元素是否存在于集合中。 原理 數據結構&#xff1a; 位數組&#xff1a;一個由0和1組成的數組&#xff0c;初始…

【AI應用探討】—膠囊神經網絡(GNN)應用場景

目錄 一、圖像識別與分類 二、目標檢測與跟蹤 三、自然語言處理 四、其他應用場景 一、圖像識別與分類 多層次特征捕捉 膠囊網絡通過其獨特的膠囊結構和動態路由算法&#xff0c;能夠捕捉圖像中的多層次特征。每個膠囊不僅輸出激活強度&#xff0c;還輸出一個多維向量&…

Docker Desktop安裝mysql

安裝 Docker Desktop 1、訪問 Docker Desktop 官方下載地址&#xff1a;https://www.docker.com/products/docker-desktop/ &#xff0c; 選擇對應平臺的 Docker Desktop 安裝包點擊下載&#xff1a; 2、下載成功后&#xff0c;雙擊開始安裝&#xff1a; 3、安裝之前的相關配…

產品經理-對產品經理的認識(1)

今天跟大家聊一下產品經理這個崗位的,產品經理是互聯網崗位當中比較火的一個崗位,也是最接近CEO的崗位 產品經理崗位&#xff0c;技術門檻低&#xff0c;薪水和前景都很不錯&#xff0c;又處于團隊的核心位置 產品經理崗位沒有完全相關的專業設置和清晰的學習路徑&#xff0c;絕…

Spring Boot中實現多數據源配置

Spring Boot中實現多數據源配置 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將探討如何在Spring Boot應用中實現多數據源配置&#xff0c;以應對復雜…

java框架的落地實踐案例:大數據平臺設計與實現

使用 java 框架設計和實現大數據平臺可為企業提供數據處理和分析解決方案&#xff0c;使之能夠做出數據驅動的決策。系統采用微服務架構&#xff0c;分解數據處理任務為松散耦合組件&#xff0c;構建于 spring boot 等 java 框架之上。數據采集通過kafka 進行&#xff0c;數據清…

Rust借助dotenv庫讀取環境變量

這里寫自定義目錄標題 歡迎使用Markdown編輯器新的改變功能快捷鍵合理的創建標題&#xff0c;有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、居右SmartyPants 創建一個自定義列表如何創建一個…