Java 類的特性1

Java 類的特性1

繼承

1.為什么要有繼承?

多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,那么多個類無需再定義這些屬性和行為,只要繼承那個類即可。

2.此處的多個類稱為子類,單獨的這個類稱為父類(基類或超類)。可以理解為:“子類 is-a 父類”

3.類繼承語法規則: class Subclass extends Superclass{}

4.作用:

  • 繼承的出現提高了代碼的復用性。
  • 繼承的出現讓類與類之間產生了關系,提供了多態的前提。
  • 不要僅為了獲取其他類中某個功能而去繼承

5.關于繼承的規則:子類不能直接訪問父類中私有的(private)的成員變量和方法、Java只支持單繼承,不允許多重繼承

方法的重寫(override)

1.定義:在子類中可以根據需要對從父類中繼承來的方法進行改造,也稱方法的重置、覆蓋。在程序執行時,子類的方法將覆蓋父類的方法。

2.要求:

  • 重寫方法必須和被重寫方法具有相同的方法名稱、參數列表和返回值類型

  • 重寫方法不能使用比被重寫方法更嚴格的訪問權限。

  • 重寫和被重寫的方法須同時為static的,或同時為非static

  • 子類方法拋出的異常不能大于父類被重寫方法的異常

    public class Person {public String name;public int age;public String getInfo() {return "Name: "+ name + "\n" +"age: "+ age;}
    }
    public class Student extends Person {public String school;public String getInfo() {       //重寫方法return  "Name: "+ name + "\nage: "+ age + "\nschool: "+ school;}public static void main(String args[]){Student s1=new Student();s1.name="Bob";s1.age=20;s1.school="school2";System.out.println(s1.getInfo());   //Name:Bob  age:20  school:school2}
    }

關鍵字–super

1.在Java類中使用super來調用父類中的指定操作:

  • super可用于訪問父類中定義的屬性
  • super可用于調用父類中定義的成員方法
  • super可用于在子類構造方法中調用父類的構造器

2.注意:

  • 尤其當子父類出現同名成員時,可以用super進行區分
  • super的追溯不僅限于直接父類
  • super和this的用法相像,this代表本類對象的引用,super代表父類的內存空間的標識

調用父類的構造器

  • 子類中所有的構造器默認都會訪問父類中空參數的構造器
  • 當父類中沒有空參數的構造器時,子類的構造器必須通過this(參數列表)或者super(參數列表)語句指定調用本類或者父類中相應的構造器,且必須放在構造器的第一行
  • 如果子類構造器中既未顯式調用父類或本類的構造器,且父類中又沒有無參的構造器,則編譯出錯

this和super的區別

No.區別點thissuper
1訪問屬性訪問本類中的屬性,如果本類沒有此屬性則從父類中繼續查找訪問父類中的屬性
2調用方法訪問本類中的方法直接訪問父類中的方法
3調用構造器調用本類構造器,必須放在構造器的首行調用父類構造器,必須放在子類構造器的首行
4特殊表示當前對象無此概念

多態性

兩種體現:

  • 方法的重載(overload)和重寫(overwrite)。
  • 對象的多態性——可以直接應用在抽象類和接口上。

1.對象的多態—在Java中,子類的對象可以替代父類的對象使用

  • 一個變量只能有一種確定的數據類型
  • 一個引用類型變量可能指向(引用)多種不同類型的對象

    Person p = new Student();

    Object o = new Person();//Object類型的變量o,指向Person類型的對象

    o =new Student(); //Object類型的變量o,指向Student類型的對象

子類可看做是特殊的父類,所以父類類型的引用可以指向子類的對象:向上轉型(upcasting)。

2.一個引用類型變量如果聲明為父類的類型,但實際引用的是子類對象,那么該變量就不能再訪問子類中添加的屬性和方法。

Student m = new Student();

m.school = “pku”; //合法,Student類有school成員變量

Person e = new Student();

e.school = “pku”; //非法,Person類沒有school成員變量

屬性是在編譯時確定的,編譯時e為Person類型,沒有school成員變量,因而編譯錯誤。

對象類型轉換 (Casting )

1、基本數據類型的Casting:

  • 自動類型轉換:小的數據類型可以自動轉換成大的數據類型

? 如long g=20; double d=12.0f

  • 強制類型轉換:可以把大的數據類型強制轉換(casting)成小的數據類型

? 如 float f=(float)12.0; int a=(int)1200L

2、對Java對象的強制類型轉換稱為造型

  • 從子類到父類的類型轉換可以自動進行
  • 從父類到子類的類型轉換必須通過造型(強制類型轉換)實現
  • 無繼承關系的引用類型間的轉換是非法的
  • 在造型前可以使用instanceof操作符測試一個對象的類型
public class ConversionTest{public static void main(String[] args) {double d = 13.4;long l = (long)d;System.out.println(l);int in = 5;//boolean b = (boolean)in;Object obj = "Hello";String objStr = (String)obj;System.out.println(objStr);Object objPri = new Integer(5);//所以下面代碼運行時引發ClassCastException異常String str = (String)objPri;}
}

Object 類

1、Object類是所有Java類的根父類

2、如果在類的聲明中未使用extends關鍵字指明其父類,則默認父類為Object類

publicclass Person {

}

等價于:

public class Person extendsObject {

}

3、例:method(Objectobj){…}//可以接收任何類作為其參數

? Person o=newPerson();

? method(o);

4、Object的主要方法

NO.方法名稱類型描述
1public Object()構造構造方法
2public boolean equals(Object obj)普通對象比較
3public int hashCode()普通取得Hash碼
4public String toString()普通對象打印時調用

==操作符與equals方法

1、= =:

  • 基本類型比較值:只要兩個變量的值相等,即為true.

    int a=5; if(a==6){…}

  • 引用類型比較引用(是否指向同一個對象):只有指向同一個對象時,==才返回true.

    Personp1=new Person();

    Person p2=new Person();

    if (p1==p2){…}

ps:用“==”進行比較時,符號兩邊的數據類型必須兼容(可自動轉換的基本數據類型除外),否則編譯出錯;

2、equals():所有類都繼承了Object,也就獲得了equals()方法。還可以重寫。

  • 只能比較引用類型,其作用與“==”相同,比較是否指向同一個對象。
  • 格式:obj1.equals(obj2)
  • 特例:當用equals()方法進行比較時,對類File、String、Date及包裝類(WrapperClass)來說,是比較類型及內容而不考慮引用的是否是同一個對象;
  • 原因:在這些類中重寫了Object類的equals()方法。

toString() 方法

1、toString()方法在Object類中定義,其返回值是String類型,返回類名和它的引用地址。

2、在進行String與其它類型數據的連接操作時,自動調用toString()方法

Date now=new Date();

System.out.println(“now=”+now); 相當于

System.out.println(“now=”+now.toString());

3、可以根據需要在用戶自定義類型中重寫toString()方法

如String類重寫了toString()方法,返回字符串的值。

s1=“hello”;

System.out.println(s1);//相當于System.out.println(s1.toString());

4、基本類型數據轉換為String類型時,調用了對應包裝類的toString()方法

inta=10; System.out.println(“a=”+a);

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

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

相關文章

linux --- 高級指令

高級指令 1、hostname 指令 作用: 操作(讀取|操作)服務器的主機名語法1: # hostname (輸出完整的主機名) 語法2: # hostname -f (輸出當前主機中的FQDN) FQDN:(Fully Qualified Domain Name)全限定域名:同時帶有主機名和域名的名稱。 2、id 指令 作…

Linux修改密碼后不能SSH遠程登錄了

1、把以下文件的屬性改成755,然后再修改密碼:/etc/passwd ,/etc/group , /etc/shadow , /etc/gshadow2、如果文件的屬性無法更改,請用lsattr 查看文件是否有 i 屬性,如有,則用chattr取消之,如:l…

Java 類的特性2

Java 類的特性2 類屬性、類方法的設計思想 類屬性作為該類各個對象之間共享的變量。在設計類時,分析哪些類屬性不因對象的不同而改變,將這些屬性設置為類屬性。相應的方法設置為類方法。如果方法與調用者無關,則這樣的方法通常被聲明為類方法&#xff…

docker --- 鏡像、容器

Docker使用國內的源 windows下使用 "everything"軟件 查找 daemon.json修改為如下: {"registry_mirrors": ["https://docker.mirrors.ustc.edu.cn"] }查看images(鏡像) docker images注: 看見的鏡像是已經下載好的,因此在沒有網絡的情況下也可…

Java 面向對象

Java 面向對象 面向對象的三大特征 封裝 (Encapsulation)繼承 (Inheritance)多態 (Polymorphism) 類的訪問機制: 在一個類中的訪問機制:類中的方法可以直接訪問類中的成員變量。(例外:static方法訪問非static,編譯…

交換機老化測試和性能測試方法收集

說明:這是一個做交換機朋友給的一個方法,只做老化測試,不做壓力滿載測試。 我所理解的:老化測試是指在一定的時間內工作負荷之后,看有沒有故障和不穩定的現象出現。 而對于壓力測試,需要通過專業的測試設備…

【webGL入門2】點線面的繪制

用js繪制webGL的點: THREE.Vector3 function ( x, y, z ) {    //用THREE聲明的變量都是全局變量。this.x x || 0;this.y y || 0;this.z z || 0;}; 注意:“||”(或)運算符,就是當xnull或者undefine時&#xff…

docker --- mysql的部署

MySQL部署 [1]查詢本地鏡像中是否含有 centos/mysql-57-centos7(我們用到的鏡像) docker images[2] 拉取鏡像 docker pull centos/mysql-57-centos7注: centos/mysql-57-centos7 是我們用到的鏡像 [3] 創建容器 docker run -id --nametensquare_mysql -p 33306:3306 -e M…

Java中的排序

Java中的排序 排序方法的選擇 1.若n較小(如n≤50),可采用直接插入或直接選擇排序。當記錄規模較小時,直接插入排序較好;否則因為直接選擇移動的記錄數少于直接插入,應選直接選擇排序為宜。 2.若文件初始狀態基本有序(指正序)&a…

Codeforces Round #493 (Div. 2) C. Convert to Ones 亂搞_構造_好題

題意: 給你一個長度為 nnn 的 010101串 ,你有兩種操作: 1.將一個子串翻轉,花費 XXX 2.將一個子串中的0變成1,1變成0,花費 YYY 求你將這個01串變成全是1的串的最少花費。 首先,我們可以將串按照0…

[T-ARA][??? ??][看著那個女人的話]

歌詞來源:http://music.163.com/#/song?id29343995 作曲 : ?? [作曲 : Ko-nan] 作詞 : ??/?? [作詞 : Ko-nan-/lo-Ko] baby i hate you [baby i hate you] but i love you [but i love you] cant live without you [cant live without you] baby i hate you …

node --- 連接mysql(docker環境) Sequelize庫

mysql 數據庫 [1] 首先配置 docker 環境 采用 docker-compose 方法 源碼: /test-mysql/docker-compose.yml version: 3.1 services:mysql:image: mysqlcommand: --default-authentication-pluginmysql_native_passwordrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: examp…

Java-接口練習

Java-接口練習 編寫2個接口:InterfaceA和InterfaceB;在接口InterfaceA中有個方法voidprintCapitalLetter();在接口InterfaceB中有個方法void printLowercaseLetter();然 后寫一個類Print實現接口InterfaceA和InterfaceB&#xff0…

類模板與運算符重載(一個簡單的例子)

類模板與運算符重載(一個簡單的例子) 標簽(空格分隔): C 算法競賽 下面是一段簡單的代碼,表示我們建立了一個類模板Vector,可以看做是對STL中vector的簡單實現。 為了讓這個Vector支持通過下標…

Java 試題一

Java 試題一 1、GC是什么? 為什么要有GC 答:GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方, 忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動 …

操作系統 --- [筆記]功能、組成

操作系統的作用 管理計算機硬件充當計算機用戶和計算機硬件的中介(操作系統控制硬件,協調各個用戶應用程序的硬件) 計算機系統的資源 CPU時間、內存空間、文件存儲空間、I/O設備等 操作系統的定義 如何定義一個操作系統: 計算機系統的根本目的是,執行用戶程序并且更容易解…

Java 試題二

Java 試題二 1、哪個選項和show函數重載 class Demo{ void show(int a,int b,float c){} } A.void show(int a,float c,int b){}//yes B,void show(int a,int b,float c){}//一模一樣。不可以出現在同一個類中。 C.int show(int a,float c,int b){return a;}//yes。 D.in…

Python之簡單驗證碼實現

def v_code(): ret for i in range(5): num random.randint(0,9) alf chr(random.randint(65,122)) s str(random.choice([num,alf])) ret s return retprint(v_code())轉載于:https://www.cnblogs.com/geeker-xjl/p/8809915.html

測繪軟件使用體會

進入石家莊鐵道大學已經兩年了,學習測繪工程專業也已經兩年了,大一的時候大多是對測繪不了解,到了大二的時候上半學期我就開始了解和使用一些測繪專業相關的軟件,在大二下半學期實習的時候更是深入的學習和使用測繪軟件&#xff0…

javascript --- event loop

栗子1 求下面函數的輸出 console.log(script start);setTimeout(() > {console.log(setTimeoout); }, 0);Promise.resolve().then(function(){console.log(promise1); }).then(function(){console.log(promise2); }) console.log(script end);說明: 在"promise2"…