Java使用繼承的語法是,Java基礎語法八 繼承

1、超類和子類

超類和子類

父類與子類

多態:

一個對象變量可以指示多種實際類型的現象稱為多態

一個變量可以引用父類對象,也可以引用其子類對象,這就是多態。

不能將一個超類的引用賦給子類變量,因為調用子類方法時可能發生運行錯誤

子類引用可以賦給超類引用

動態綁定:

在運行時能夠自動地選擇哪個方法的現象稱為動態綁定

是一個非常重要的特性,無需對現存的代碼進行修改,就可以對程序進行擴展。

阻止繼承:final類和方法

將方法和類聲明為final主要目的是:確保它們不會在子類中改變語句

強制類型轉換

只能在繼承層次內進行類型轉換。

在將超類轉換成子類之前,應該使用instanceof進行檢查。

抽象類

使用abstract關鍵字,這樣就完全不需實現這個方法。

為了提高程序清晰度,包含一個或多個抽象方法的類本身必須被聲明為抽象的。

除了抽象方法外,抽象類還可以包含具體數據和具體方法。

盡量將通用的域和方法(不管是否是抽象的)放在超類(不管是否是抽象類)中

擴展抽象類

1 子類中定義部分抽象方法或抽象方法也不定義,這樣就必須將子類也標記為抽象類

2 定義全部的抽象方法,子類就不是抽象的了

抽象類不能被實例化 (不能new)這個類的對象

可以創建一個具體子類的對象,可以定義一個抽象類變量,但是它只能引用非抽象子類的對象。

受保護訪問

private 子類不能訪問超類的私有域,

protected 允許子類訪問超類的某個域

2、Object:所有類的超類

Object是Java的始祖,在Java中每個類都是由它擴展而來

可以使用Object類型的變量引用任何類型的對象

eqluas方法

用于檢測一個對象是否等于另一個對象,在Object類中,這個方法將判斷兩個對象是否具有相同的引用。

在子類中定義equals方法時,首先調用超類的equals。如果檢測失敗,對象就不可能相等。

如果超類中的域都相等,就需要比較子類中的實例域。

相等測試與繼承

Java語言規范要求equals方法具有下面的特性:

自反性:x.eqluas(x) 返回true

對稱性:當且僅當x.eqluas(y) 返回true,y.eqluas(x)返回true

傳遞性:如果x.eqluas(y)返回true,y.eqluas(z)返回true,x.equlas(z)也應該返回true

一致性:如果x,y引用的對象沒有發生變化,反復調用x.eqluas(y)應該返回同樣的結果

對于任意非空引用x,x.eqluas(null) 應該返回false

對稱性,instanceof 子類與超類的比較

如果子類能夠擁有自己的相等概念,則對稱性需求將強制采用getClass進行檢測

如果由超類決定相等的概念,那么就可以使用instanceof進行檢測,這樣可以在不同子類的對象之間進行相等的比較。

編寫一個完美的equals方法的建議:

1 顯式參數命名為otherObject,稍后需要將它轉換成另一個叫做other的變量

2 檢測this 與 otherObject是否引用同一個對象:

if(this == otherObject) return true;

3 檢測otherObject是否為null,如果是null ,返回false

if(otherObjecr == null) return false;

4 比較this 與 otherObject是否屬于同一個類。

如果equals的語義在每個子類中所改變,就使用getClass檢測

if(getClass != otherObject.getClass()) return false;

如果所有的子類都擁有統一的語義,就使用instanceof檢測

if(!otherObject instanceof ClassName) return false;

5 將otherObject轉換為相應的類類型變量

ClassName other = (ClassName)otherObjecrt;

6 現在開始對所有需要比較的域進行比較了。使用==比較基本類型域,使用equals比較對象域。

如果在子類重新定義equals,就要調用super.equlas(other);

hashCode方法

散列碼(hashCode)是由對象導出的一個整數值。

hashCode定義在Object類中,因此每個對象都有一個默認的散列碼,其值為對象的存儲位置。

如果重新定義equals方法,就必須重新定義hashCode方法,以便用戶可以將對象插入到散列表中

toString方法

3、泛型數組列表

訪問數組列表對象

ArrayList

不必指出數組的大小

使用add將任意多的元素添加到數組

使用size()替代length計算元素的數目

使用a.get(i)替代a[i]訪問元素

4、對象包裝器與自動裝箱

基本類型 轉換為 對象

5、參數數量可變的方法

省略號...是Java代碼的一部分,它表明這個方法可以接收任意數量的對象

6、枚舉類

Enum

7、反射

反射機制:

在運行中分析類的能力

在運行中查看對象

實現通用的數組操作代碼

利用Method對象

Class類

Class.forName().newInstance();

捕獲異常

try catch

利用反射分析類的能力

Field Method Constructor

三個類都有

getName返回項目的名稱

getModifiers 返回一個整型數值,描述修飾符

Field getType 返回描述域所屬類型的Class對象

getFileds

getDeclaredFileds

在運行時使用反射分析對象

setAccessible

使用反射編寫泛型數組代碼

CopyOf

調用任意方法

Method invoke

8、繼承設計的技巧

1、將公共操作和域放在超類

2、不要使用受保護的域

3、使用繼承實現 is-a 關系

4、除非所有集成的方法都有意義,否則不要使用繼承

5、在覆蓋方法時,不要改變預期的行為

6、使用多態,而非類型信息

7、不要過多的使用反射

原文:http://www.cnblogs.com/loveincode/p/7188320.html

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

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

相關文章

kaka 1.0.0 重磅發布,服務于后端的事件領域模型框架。

百度智能云 云生態狂歡季 熱門云產品1折起>>> kaka 1.0.0正式發布了,從三個月前的kaka-notice-lib 1.0.0的發布,經過多次研磨,終于迎來了本次重大更新。 kaka是一款服務于java后端的事件領域模型框架,主要目的為解耦業…

java配置文件工具類,java項目加載配置文件的工具類

java項目加載配置文件的工具類package com.loadproperties;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class ConfigUtil {private static InputStream input;private volatile Properties configuration new Properties();/…

如何把WAV格式音頻轉換為MP3格式

WAV為微軟公司(Microsoft)開發的一種聲音文件格式,它符合RIFF(Resource Interchange File Format)文件規范,用于保存Windows平臺的音頻信息資源,被Windows平臺及其應用程序所廣泛支持,因此在聲音文件質量和CD相差無幾&…

php 異步處理類,php異步處理類

該類可以請求HTTP和HTTPS協議,還可以處理301、302重定向以及GZIP壓縮等。[PHP]代碼//使用方法require(asynHandle.class.php);$obj new asynHandle();$result $obj->Request(http://baidu.com);$result2 $obj->Get(https://mail.google.com/);echo "{…

惡意軟件盯上了加密貨幣,兩家以色列公司受到攻擊

近日,網絡安全公司Palo Alto Networks威脅研究部門Unit 42發博稱,已確認Cardinal RAT自2017年4月起對兩家從事外匯和加密交易軟件開發的以色列金融科技公司發起過攻擊。 Cardinal RAT是可遠程訪問特洛伊木馬(RAT),攻擊…

php 自定義打印模板下載,PHP – 創建自定義模板系統?

我已經在這里搜索過,令人驚訝的是我找不到答案.我發現了一個類似的線程,但沒有真正的解決方案.復雜的部分是循環,如果我不需要循環我可以只是做一個常規替換.所以,我有一個帶有一些標記的.html文件,如下所示:{{startloop}}{{imgname}}{{endLoop}}我想要做的是用其他…

騰訊財報中“最大秘密”:2018云收入91億元,交首份TO B答卷

騰訊財報中“最大秘密”云業務收入又一次被公開了:2018年,騰訊云收入91億元,增長100%。 3月21日,騰訊發布2018年Q4及全年財報,2018全年收入3126.94億元同比增長32%,凈利潤(Non-GAAP)774.69億元。而被列進“…

根據坐標如何在matlab中l連成曲線,matlab中,如何將兩條曲線畫在一個坐標系里,plot(x1,x2,y1,y2)還是怎樣...

matlab中,如何將兩條曲線畫在一個坐標系里,plot(x1,x2,y1,y2)還是怎樣以下文字資料是由(歷史新知網www.lishixinzhi.com)小編為大家搜集整理后發布的內容,讓我們趕快一起來看一下吧!matlab中,如何將兩條曲線畫在一個坐…

Android 物聯網 傳感器

前幾天做了一個嵌入式課設。將傳感器收集到的數據傳到手機制作的APP里。 項目中涉及到的主要的java代碼和xml布局文件上傳到了github,https://github.com/123JACK123jack/Android轉載于:https://www.cnblogs.com/libin123/p/10578601.html

java已被弱化簽名,高效Java第四十條建議:謹慎設計方法簽名

作用有助于設計易于學習和使用的API。如何做——謹慎地選擇方法的名稱1.選擇易于理解的,并且與同一個包中的其他名稱風格一致的名稱。2.選擇與大眾認可的名稱相一致的名稱。如何做——不要過于追求提供便利的方法每個方法都應該盡其所能。方法太多會使類難以學習、使…

curl有php內存緩存,PHP CURL內存泄露的解決方法

PHP CURL內存泄露的解決方法curl配置平淡無奇,長時間運行發現一個嚴重問題,內存泄露!不論用單線程和多線程都無法避免!是curl訪問https站點的時候有bug!內存泄露可以通過linux的top命令發現,使用php函數mem…

MySQL學習【第五篇SQL語句上】

一.mysql命令 1.連接服務端命令 1.mysql -uroot -p123 -h127.0.0.1 2.mysql -uroot -p123 -S /tmp/mysql.sock 3.mysql -uroot -p123 -hlocalhost 4.mysql -uroot -p123 2.mysql登陸后的一些命令 1.\h或者help   查看幫助 2.\G       格式化查看數據(以k…

phpexcel.php linux,phpexcel在linux系統報錯如何解決

最近有個tp3.2的項目遷移到linux系統上了,突然有天發現原本在win server 2008上運行沒問題的excel導出功能在新的系統上不能使用了。報錯如下:說是1762行有問題,找到這個文件的代碼看看:/*** Get an instance of this class** acc…

優雅的redux異步中間件 redux-effect

不吹不黑,redux蠻好用。只是有時略顯繁瑣,叫我定義每一個action、action type、使用時還要在組件上綁定一遍,臣妾做不到呀!下面分享一種個人比較傾向的極簡寫法,仍有待完善,望討論。 github: github.com/li…

oracle 中累加函數,Oracle 分析函數分組累加!

用戶號碼 登陸時間13000000002010-01-0113000000012010-01-0113000000022010-01-0213000000012010-01-0213000000032010-01-0313000000022010-01-0313000000042010-01-0413000000032010-01-0413000000042010-01-0213000000062011-01-0413000000012011-01-04剔除重復登陸的用戶,…

asp.net core系列 48 Identity 身份模型自定義

一.概述 ASP.NET Core Identity提供了一個框架,用于管理和存儲在 ASP.NET Core 應用中的用戶帳戶。 Identity添加到項目時單個用戶帳戶選擇作為身份驗證機制。 默認情況下,Identity可以使用的 Entity Framework (EF) Core 數據模型。 本文介紹如何自定義…

oracle中創建游標,oracle 存儲過程創建游標

Oracle與Sql Server差異點詳解1、create函數或存儲過程異同點Oracle 創建函數或存儲過程一般是 create or replace ……SQL SERVER 則是在創建之前加一條語句,先判斷是否已經存在,如果存在刪除已有的函數或存儲過程。函數語句:if exists (sel…

hosts文件不起作用

突然發現電腦的hosts文件不起作用了。之前用的狠正常,近期也沒有修改過。首先排除什么格式、DNS、注冊表之類的問題。最終解決辦法(權限問題:有問題的hosts文件圖標上有個鎖):1.C:\Windows\System32\drivers\etc下復制…

oracle面臨的挑戰,未來數據庫管理員面臨的三大挑戰

原標題:未來數據庫管理員面臨的三大挑戰前言今天的數據庫管理員面臨著三大挑戰:工作重心向以應用程序為中心轉移、支持多個數據庫平臺的需求、在云端以及在本地管理數據庫性能的責任不斷擴大。為了在今天和未來都能站穩腳跟,數據庫管理員需要…

Reducer拆分

看到Redux官網上Reducer拆分后,最后生成的state的組合有點懵,主要是對combineReducers()這個工具類不了解,其實該方法是消除了一些樣板代碼。 如todoApp事例: import { combineReducers } from reduxconst todoApp combineReduce…