Java基礎(六)——繼承

個人簡介

👀個人主頁: 前端雜貨鋪
?開源項目: rich-vue3 (基于 Vue3 + TS + Pinia + Element Plus + Spring全家桶 + MySQL)
🙋?♂?學習方向: 主攻前端方向,正逐漸往全干發展
📃個人狀態: 研發工程師,現效力于中國工業軟件事業
🚀人生格言: 積跬步至千里,積小流成江海
🥇推薦學習:🍖開源 rich-vue3 🍍前端面試寶典 🍉Vue2 🍋Vue3 🍓Vue2/3項目實戰 🥝Node.js實戰 🍒Three.js

🌕個人推廣:每篇文章最下方都有加入方式,旨在交流學習&資源分享,快加入進來吧

內容參考鏈接
Java基礎(一)Hello World,8種數據類型,鍵盤錄入
Java基礎(二)數組,方法,方法重載
Java基礎(三)類和對象、構造方法
Java基礎(四)字符串、StringBuffer、StringBuilder、StringJoiner
Java基礎(四)ArrayList

文章目錄

    • 前言
    • 繼承
      • Java 繼承的特點
      • 方法重寫
      • 繼承中構造方法的訪問特點
    • static
    • 總結

前言

大家好,這里是前端雜貨鋪。

本篇文章,我們主要學習 Java 中繼承,并順帶認識一下 static。


繼承

繼承,可以讓類和類之間產生子父的關系。我們可以把多個子類中重復的代碼抽取到父類中,子類可以直接使用,減少代碼冗余,提高代碼復用性。

子類可以得到父類的屬性和行為,子類可以使用。

子類可以在父類的基礎上新增其他功能,使得子類更強大。

public class 子類 extends 父類 {}

Java 繼承的特點

  • Java 只支持單繼承,不支持多繼承,但支持多層繼承(A 繼承父類 B,B 繼承父類 C…)
  • Java 中所有的類都直接或間接繼承于 Object 類
  • 子類只能訪問父類中的非私有成員
  • 子類中 不能繼承 父類中 非私有和私有的構造方法
  • 子類中 能繼承 父類中 非私有和私有的成員變量(但私有不可用)
  • 子類中 能繼承 父類中 虛方法表(非private、非static、非final修飾)中的成員方法,其余不能繼承
  • 繼承中成員變量訪問特點:就近原則:先在局部位置找,本類成員位置找,父類成員位置找,逐級往上

方法重寫

幾個注意事項:

  • 重寫方法的名稱、形參列表必須與父類中的一致
  • 子類重寫父類方法時,訪問權限子類必須大于等于父類(空著不寫 < protected < public)
  • 子類重寫父類方法時,返回值類型子類必須小于等于父類
  • 只有被添加到虛方法表中的方法才能被重寫
package com.javabasic.define;public class Test {public static void main(String[] args) {Student student = new Student();student.lunch();}
}class Person {public void eat() {System.out.println("父類-吃饅頭");}public void drink() {System.out.println("父類-喝開水");}
}class Student extends Person {public void lunch() {this.eat();this.drink();super.eat();super.drink();}@Overridepublic void eat() {System.out.println("子類-吃辣條");}@Overridepublic void drink() {System.out.println("子類-喝飲料");}
}

在這里插入圖片描述


繼承中構造方法的訪問特點

  • 子類不能繼承父類的構造方法,但是可以通過super調用
  • 子類構造方法的第一行,有個默認的super()
  • 默認先訪問父類中無參的構造方法,再執行自己
  • 如果想要調用父類的有參構造方法,必須手動書寫

Person.java

package com.javabasic.define;public class Person {String name;int age;public Person() {System.out.println("父類的無參構造");}public Person(String name, int age) {this.name = name;this.age = age;}
}

Student.java

package com.javabasic.define;public class Student extends Person {public Student() {super();System.out.println("子類的無參構造");}public Student(String name, int age) {super(name, age);}
}

Test.java

package com.javabasic.define;public class Test {public static void main(String[] args) {// 調用無參構造,先走父,再走子Student student = new Student();// 間接調用父類的有參構造Student student2 = new Student("張三", 22);System.out.println(student2.name + ", " + student2.age);}
}

在這里插入圖片描述


static

static 表示靜態,是 Java 中的一個修飾符,可以修飾成員方法,成員變量。

被 static 修飾的成員變量,叫做靜態變量。

  • 被該類所有對象共享
  • 不屬于對象,屬于類
  • 隨著類的加載而加載,優先于對象存在

Student.java

package com.javabasic.define;public class Student {private String name;private int age;public static String teacherName;public void show() {System.out.println(name + " " + age + " " + teacherName);}public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

Test.java

package com.javabasic.define;public class Test {public static void main(String[] args) {Student.teacherName = "xx老師";Student student = new Student("前端雜貨鋪", 20);student.show();}
}

在這里插入圖片描述


被 static 修飾的成員方法,叫做靜態方法。

  • 多用在測試類和工具類中
  • Javabean 類中很少會用
  • 靜態方法中沒有 this 關鍵字
  • 靜態方法只能訪問靜態
  • 非靜態方法可以訪問非靜態方法和靜態方法

下面,我們創建一個工具類 ArrayUtil.java,里面均為靜態方法,用于處理一些數組數據。

ArrayUtil.java

package com.javabasic.define;public class ArrayUtil {private ArrayUtil() {}public static String printArr(int[] arr) {StringBuilder sb = new StringBuilder();sb.append("[");for (int i = 0; i < arr.length; i++) {if (i == arr.length - 1) {sb.append(arr[i]);} else {sb.append(arr[i]).append(", ");}}sb.append("]");return sb.toString();}public static double getAverage(double[] arr) {double sum = 0;for (int i = 0; i < arr.length; i++) {sum += arr[i];}return sum / arr.length;}
}

Test.java

package com.javabasic.define;public class Test {public static void main(String[] args) {int[] arr1 = {1, 2, 3, 4, 5};String str = ArrayUtil.printArr(arr1);System.out.println(str);double[] scores = {1.0, 2.0, 3.0, 4.0, 5.0};double average = ArrayUtil.getAverage(scores);System.out.println(average);}
}

在這里插入圖片描述


總結

本篇文章,我們學習了繼承的相關內容,并認識了 static 的特性及使用場景…

好啦,本篇文章到這里就要和大家說再見啦,祝你這篇文章閱讀愉快,你下篇文章的閱讀愉快留著我下篇文章再祝!


參考資料:

  1. Java 基礎(bilibili-黑馬程序員)
  2. 菜鳥教程–Java

在這里插入圖片描述


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

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

相關文章

【Web】

1、配倉庫 [rootlocalhost yum.repos.d]# vi rpm.repo ##本地倉庫標準寫法 [baseos] namemiaoshubaseos baseurl/mnt/BaseOS gpgcheck0 [appstream] namemiaoshuappstream baseurlfile:///mnt/AppStream gpgcheck0 2、掛載 [rootlocalhost ~]mount /dev/sr0 /mnt mount: /m…

QT操作各類數據庫用法詳解

文章目錄 創建內存SQLITE數據庫QSqlTableModel操作數據庫表連接國產數據庫多線程數據處理不指定數據庫名打開數據庫QT對各種數據庫的支持情況處理數據庫表名QT連接各種數據庫Qt提供了一個名為QtSQL模塊的強大組件, 使得在Qt應用程序中連接和操作多種類型的數據庫變得相對簡單。…

Vulnhub-Os-hackNos-1(包含靶機獲取不了IP地址)

https://download.vulnhub.com/hacknos/Os-hackNos-1.ova #靶機下載地址 題目&#xff1a;要找到兩個flag user.txt root.txt 文件打開 改為NAT vuln-hub-OS-HACKNOS-1靶機檢測不到IP地址 重啟靶機 按住shift 按下鍵盤字母"E"鍵 將圖中ro修改成…

Github 2024-07-06 開源項目日報 Top10

根據Github Trendings的統計,今日(2024-07-06統計)共有10個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Python項目3TypeScript項目2Rust項目2非開發語言項目1C++項目1QML項目1MDX項目1JavaScript項目1Assembly項目1免費編程書籍和學習資源清單 創建…

JS 四舍五入使用整理

一、Number.toFixed() 把數字轉換為字符串,結果的小數點后有指定位數的數字,重點返回的數據類型為字符串 toFixed() 方法將一個浮點數轉換為指定小數位數的字符串表示,如果小數位數高于數字,則使用 0 來填充。 toFixed() 方法可把 Number 四舍五入為指定小數位數的數字。…

Vue 3集成krpano 全景圖展示

Vue 3集成krpano 全景圖展示 星光云全景系統源碼 VR全景體驗地址 星光云全景VR系統 將全景krpano靜態資源文件vtour放入vue項目中 導入vue之前需要自己制作一個全景圖 需要借助官方工具進行制作 工具下載地址&#xff1a;krpano工具下載地址 注意事項&#xff1a;vuecli…

Hook 實現 Windows 系統熱鍵屏蔽(二)

目錄 前言 一、介紹用戶賬戶控制&#xff08;UAC&#xff09; 1.1 什么是 UAC &#xff1f; 2.2 UAC 運行機制的概述 2.3 分析 UAC 提權參數 二、 NdrAsyncServerCall 函數的分析 2.1 函數聲明的解析 2.2 對 Winlogon 的逆向 2.3 對 rpcrt4 的靜態分析 2.4 對 rpcrt4…

YOLOv8_obb數據集可視化[旋轉目標檢測實踐篇]

先貼代碼,周末再補充解析。 這個篇章主要是對標注好的標簽進行可視化,雖然比較簡單,但是可以從可視化代碼中學習到YOLOv8是如何對標簽進行解析的。 import cv2 import numpy as np import os import randomdef read_obb_labels(label_file_path):with open(label_file_path,…

探索 IPython 的環境感知能力:詳解 %env 命令的妙用

探索 IPython 的環境感知能力&#xff1a;詳解 %env 命令的妙用 在數據科學和編程的海洋中&#xff0c;環境變量扮演著至關重要的角色。IPython&#xff0c;這一強大的交互式計算工具&#xff0c;通過其內置的魔術命令 %env&#xff0c;為我們提供了與環境變量交互的強大能力。…

git基礎指令總結持續更新之git分支簡介和基本操作,解決合并和沖突,回退和rebase(變基),分支命名和分支管理,學習筆記分享

git 分支簡介和基本操作 Git 分支是 Git 的核心特性之一&#xff0c;它允許開發者在不同的開發線上工作&#xff0c;而不會影響主代碼庫。以下是 Git 分支的簡介和一些基本操作&#xff1a; 分支的概念&#xff1a; 分支是 Git 中的一個獨立開發線。創建分支時&#xff0c;G…

rtt設備驅動框架學習——內核對象基類object

內核對象基類object 這個基類是內核所有對象的基類 在rt-thread/include/rtdef.h文件里有對內核對象基類object的定義 /*** Base structure of Kernel object*/ struct rt_object {char name[RT_NAME_MAX]; /**< name of kernel object */rt…

清新簡約之美,開源個人博客:Jekyll Theme Chirpy

Jekyll Theme Chirpy&#xff1a;簡約不簡單&#xff0c;Chirpy 讓你的博客煥發新意- 精選真開源&#xff0c;釋放新價值。 概覽 Jekyll Theme Chirpy 是為Jekyll靜態網站生成器設計的現代主題&#xff0c;以其清新、簡約的設計風格和用戶友好的交互體驗受到開發者和博客作者的…

為企業知識庫選模型?全球AI大模型知識庫RAG場景基準測試排名

大語言模型常見基準測試 大家對于AI模型理解和推理能力的的基準測試一定非常熟悉了&#xff0c;比如MMLU&#xff08;大規模多任務語言理解&#xff09;、GPQA&#xff08;研究生級別知識問答&#xff09;、GSMSK&#xff08;研究生數學知識考察&#xff09;、MATH&#xff08…

Zabbix監控軟件

目錄 一、什么是Zabbix 二、zabbix監控原理 三、zabbix 安裝步驟 一、什么是Zabbix ●zabbix 是一個基于 Web 界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案。 ●zabbix 能監視各種網絡參數&#xff0c;保證服務器系統的安全運營&#xff1b;并提供靈活的…

python讀取寫入txt文本文件

讀取 txt 文件 def read_txt_file(file_path):"""讀取文本文件的內容:param file_path: 文本文件的路徑:return: 文件內容"""try:with open(file_path, r, encodingutf-8) as file:content file.read()return contentexcept FileNotFoundError…

Swagger的原理及應用詳解(十)

本系列文章簡介&#xff1a; 在當今快速發展的軟件開發領域&#xff0c;特別是隨著微服務架構和前后端分離開發模式的普及&#xff0c;API&#xff08;Application Programming Interface&#xff0c;應用程序編程接口&#xff09;的設計與管理變得愈發重要。一個清晰、準確且易…

【多線程】進程與線程

&#x1f3c0;&#x1f3c0;&#x1f3c0;來都來了&#xff0c;不妨點個關注&#xff01; &#x1f3a7;&#x1f3a7;&#x1f3a7;博客主頁&#xff1a;歡迎各位大佬! 文章目錄 1. 操作系統1.1 什么是操作系統1.2 操作系統主要的功能 2. 進程2.1 什么是進程2.2 通過PCB描述一…

jEasyUI 創建菜單按鈕

jEasyUI 創建菜單按鈕 jEasyUI(jQuery EasyUI)是一個基于jQuery的用戶界面插件集合,它為用戶提供了一系列的UI組件,如菜單、按鈕、表格等,以簡化Web頁面的開發過程。在本文中,我們將重點介紹如何使用jEasyUI創建菜單按鈕。 1. 環境準備 在開始之前,請確保您的開發環境…

使用Python繪制甘特圖

使用Python繪制甘特圖 甘特圖效果代碼 甘特圖 甘特圖是一種項目管理工具&#xff0c;用于展示項目進度和任務安排。它通過條狀圖形表示各任務的起止時間&#xff0c;便于直觀地查看項目的各個任務的進度和相互關系。 效果 [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片…

(void) (_x == _y)的作用

在閱讀宋寶華的《Linux設備驅動開發詳解》一書時&#xff0c;看到下面這段代碼&#xff1a; #define min(x, y) ({ \ const typeof(x) _x (x); \ const typeof(y) -y (y); \ (void) (&_x &_y); \ _x < _y ? _x : _y; }) 這段代碼可以理解如…