包_繼承

来源:https://www.cnblogs.com/ruckly/archive/2019/04/22/10753612.html
-Advertisement-
Play Games

包_繼承 1.包 包(package) 用於管理程式中的類,主要用於解決類的同名問題。包可以看成目錄。 包的作用: 【1】防止命名衝突 【2】允許類組成一個單元模塊,便於管理 【3】更好的保護類、屬性和方法 1.1定義包 package用於定義包,形如:package 路徑(包名) 必須寫到源文件的 ...


包_繼承

1.包

包(package) 用於管理程式中的類,主要用於解決類的同名問題。包可以看成目錄。

包的作用:

【1】防止命名衝突

【2】允許類組成一個單元模塊,便於管理

【3】更好的保護類、屬性和方法

1.1定義包

package用於定義包,形如:package   路徑(包名)

必須寫到源文件的有效代碼的第一句。

1 package cm.wuhao;     //定義包
2 
3 public class Test01{
4     public static void main(String[] args){
5         System.out.println("test package");
6     }
7 }

編譯帶包的源文件

javac -d 目的地 源文件

編譯完成後生成的位元組碼的全路徑

 

運行編譯好的位元組碼文件

java 包路徑+類名

例如:

 1.2包的命名規範

原則:始終保持類的全路徑是唯一

規範:

[1]包名由小寫字母組成,不能以圓點開頭或結尾。圓點有特殊意義——包分隔符

[2]包名之前最好加上唯一的首碼,通常使用組織倒置的網路功能變數名稱。如javagroup.com.xx   avagroup.net.xx

[3]包名後續部分依不同機構內部的規範不同而不同

1.3導包

import 用於導包,告訴類需要的其他類在什麼位置(路徑)。

形如:

1 import com.wuhao.Student; // 導入com.wuhao下的Student類。 

2 import com.wuhao.*; // 導入com.wuhao下的所有類。

編譯時要先編譯導入的包,其他類生成該類的全路徑方能編譯本類成功。

1.4不同包中的同名

如果一個類中用到了兩個不同包但同名的類時,如何處理?

1 import java.util.Date; //兩個包中都有date類
2 import java.sql.Date;
3 
4 public class Test05{
5     public static void main(String[] args) { 
6     Date date = new Date(0);
7 }
8 
9 }

這時候系統報錯,並沒有通過編譯

我們可以這樣處理:

創建對象時寫其中一個對象的全路徑

 1 import java.sql.Date;//sql中的Date類
 2 
 3 public class Test05{
 4     public static void main(String[] args) { 
 5     java.util.Date date1 = new java.util.Date();//寫全路徑
 6     System.out.println("date1的地址"+date1);
 7     Date date2 = new Date(0); //調用sql中的Date類
 8     System.out.println("date2的地址"+date2);
 9 }
10 
11 }

2.jvm中提供的包

包名

描述

java.lang/語言包

系統預設導入,String類保存在這個包中,所以我們在使用String時不需要導包

java.util

工具包,一些常用的類庫,Scanner,Date,Arrays

java.io

輸入輸出處理,文件的讀寫等

java.net

網路編程

java.math

數學計算.Math.random

java.awt(C)

這個包中的類用於構建和管理應用程式的圖形用戶界面

3.靜態導入

如果一個類中定義的屬性和方法都是靜態時,可以考慮使用靜態導入。jdk1.5+ 出現。

1 package cn.sxt01;
2 public class Calc{
3     public static float PI = 3.14f; //靜態屬性
4     
5     public static int add(int a,int b){
6         return a+b;
7     }
8 }
1 package cn.sxt02;
2 // 靜態導入
3 import static cn.sxt01.Calc.*;
4 public class Test01{
5     public static void main(String[] args){
6         System.out.println(PI);
7         System.out.println(add(1,2));
8     }
9 }

思考:如果一個類中還有實例成員,能不能用靜態導入?

4.繼承

4.1為什麼要繼承?

為了提取較少代碼的重覆性,把抽取重覆性的代碼到一個公共類中,這個公共的類稱為父類(super class)。繼承於父類的類稱為子類(sub class).

java 的繼承特性:

【1】單根性:只能有一個父類(只有一個爸爸)

【2】傳遞性:可以是爸爸從爺爺那繼承過來的非私有的屬性和方法,兒子在從爸爸那裡繼承下來(類似中國的香火延續)

類B繼承於類A,使用關鍵字extends,則B擁有了A中非私有的屬性和方法。

1 class Car {                   //父類
2     private int site;  //座位數
3     public void setSite(int site){
4         this.site = site;
5     }
6     void print(){
7         System.out.print("載客量是"+site+"人");
8     }
9 }
1 class Bus extends Car {           //子類
2     Bus(int site){
3         setSite(site);
4     }
5 }
1 public class Test04{
2     public static void main(String[] args) {   
3     Bus bus = new Bus(20);    
4     bus.print();
5 }
6 
7 }    

如果Person中定義了private 屬性count

5.super關鍵字

super只是一個關鍵字,區別於this關鍵字,super並沒有引用有地址。

super的作用:

【1】訪問父類的構造方法

 1 public Dog(String name,int health,int love,String strain){
 2         /*
 3         this.setName(name);
 4         this.setHealth(health);
 5         this.setLove(love);
 6         */
 7         super(name,health,love);
 8         this.setStrain(strain);
 9         
10     }

super調用父類構造方法時,必須寫到構造方法有效代碼第一句

【2】super調用父類的非私有屬性

super可以訪問父類的非私有屬性。私有的屬性不能用super訪問。

變數隱藏(C)

當子類定義了一個和父類同名的屬性時,在子類中優先訪問子類的屬性,如果要訪問父類屬性一定要加super。

一句話:如果要訪問父類屬性,通過super;如果要訪問子類屬性,通過this.

[3] super訪問非私有父類方法

1 public void print(){
2         System.out.print("我的姓名"+super.getName());
3         System.out.print(",健康值"+super.getHealth());
4                 System.out.print(",親密度"+super.getLove());
5         super.showInfo();
6         System.out.println(",我是一隻"+this.getStrain());
7     }
8                         

6.子類不能繼承父類的資源

 

7.訪問修飾符

java中存在4類訪問修飾符,分別是private、預設、protected、public。

修飾符

本類✘

同包子類

同包其他類

不同包子類

不同包其他類

private

預設

protected

public

 

private :只能訪問本類成員

friendly:預設的,同包可以訪問,包訪問符

protected:除了不同包的其它類不能訪問,其它都可以訪問

public:全都可以訪問

8.繼承的循序

繼承關係記憶體圖

9.方法的重寫

當子類從父類繼承過來的方法不能滿足自身需要時,子類可以根據自身情況進行方法重寫(overwrite/override)

方法重寫建立在繼承的基礎上,沒有繼承,就沒有重寫!

子類根據自身情況,可以選擇部分重寫和完全重寫。

 部分重寫

1 public void showInfo(){
2         super.showInfo();
3         System.out.println("我是一隻"+this.getStrain());
4     }

完全重寫

1 public void showInfo(){
2         System.out.println("--"+super.getName()+"--");
3         System.out.println("健康值:"+super.getHealth());
4         System.out.println("親密度:"+super.getLove());
5         System.out.println("品種:"+this.getStrain());
6     }

重寫的規則

[1]方法名稱相同

[2]參數列表相同

[3]子類的訪問許可權一定 >= 父類訪問許可權 private 特殊除外

[4]返回值和父類相同或者是其子類

1 public Pet create(){
2         Pet pet = new Pet();
3         return pet;
4 }
1 public Dog create(){
2         Dog dog = new Dog();
3         return dog;
4 }

 


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

-Advertisement-
Play Games
更多相關文章
  • R語言基礎學習——D02 20190423內容綱要: 1、前言 2、向量操作 (1)常規操作 (2)不定長向量計算 (3)序列 (4)向量的刪除與保留 3、列表詳解 (1)列表的索引 (2)列表得元素屬性 (3)更改列表元素 (4)刪除列表元素 (5)合併兩個列表 (6)將列表轉換為向量 4、推薦 ...
  • 一、引言 大部分系統都離不開數據訪問,資料庫包括SQL和NOSQL,SQL是指關係型資料庫,常見的有SQL Server,Oracle,MySQL(開源),NOSQL是泛指非關係型資料庫,常見的有MongoDB,Redis。 用spring開發時我們常用的ORM框架有JDBC、Mybatis,Hib ...
  • java.util.logging.Logger——java 中提供的日誌類 實際開發 90% 都是使用 log4j 記錄日誌,而 Log4j 底層就是 java.util.logging.Logger 實現的 Log4j 是一個日誌輸出框架,就是用於輸出日誌的。Mybatis 的日誌輸出是通過 L ...
  • 1.cd 到指定目錄 2.運行命令 python 3之前 python 3+ 3.運行後: 4.在瀏覽器輸入 http://localhost:8888/. 測試,然後就可以瀏覽網頁 ...
  • 閱讀目錄 一、模塊和包 模塊(module)的概念: 在電腦程式的開發過程中,隨著程式代碼越寫越多,在一個文件里代碼會越來越長,越來越不容易維護。 為了編寫可維護的代碼,我們把很多函數分組,分別放到不同的文件里,這樣,每個文件包含的代碼就相對較少,很多編程語言都採用這種組織代碼的方式。在Pytho ...
  • 新聞 "Ionide試驗版本" "FSharp路線圖介紹" "Blazor官方預覽" ".NET Framework 4.8發佈" ".NET Core 3 Preview 4發佈" "需要來自FSharp.Data.SqlClient用戶的反饋" "Fable.React 5發佈" "Though ...
  • 一、介面思想 建立關聯的橋梁,方便管理代碼 介面思想提現:為類拓展功能 介面類:用來定義功能的類,為繼承它的子類提供功能的。 該類的功能方法一般不需要有實現體,實現體有繼承它的子類自己去實現。 介面類:用來定義功能的類,為繼承它的子類提供功能的。 該類的功能方法一般不需要有實現體,實現體有繼承它的子 ...
  • volatile是java虛擬機提供的輕量級的同步機制 JMM(Java記憶體模型)是圍繞著併發編程中原子性、可見性、有序性這三個特征來建立的 原子性:一個操作或多個操作要麼全部執行完成且執行過程不被中斷,要麼就不執行。 可見性:當多個線程同時訪問同一個變數時,一個線程修改了這個變數的值,其他線程能夠 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...