最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java面向?qū)ο笾惖睦^承介紹

 更新時間:2022年02月14日 09:32:14   作者:鳳文Studying  
大家好,本篇文章主要講的是Java面向?qū)ο笾惖睦^承介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下

繼承的作用

如果沒有繼承機制是怎么樣的?

有以下兩個類,分別是Student、Teacher,它們的實現(xiàn)類如下:

/**
 * 老師類 封裝了姓名、年齡
 * 
 * @author Administrator
 *
 */
public class Teacher {
	private String name;
	private int 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;
	}
}

public class Student {
	private String name;
	private int 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;
	}
}

我們發(fā)現(xiàn),這兩個類中的屬性和方法都是一樣的,或者說這兩個類都有相同的某些特性。

使用繼承機制后的示例?

先寫一個Person父類:

public class Person {
	private String name;
	private int 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;
	}
}

兩個類繼承Person

public class Teacher extends Person {

}
public class Student extends Person {

}

再寫個測試類看一下:

public class Test {
	public static void main(String[] args) {
		Student s = new Student();
		s.setName("學生");
		Teacher t = new Teacher();
		t.setName("老師");
		System.out.println(s.getName() + " " + t.getName());
	}
}

在這里插入圖片描述

類的繼承是什么?

通過上面的演示,我們發(fā)現(xiàn)繼承了Person類后,就算在Student、Teacher類中不寫對應的方法,也能使用父類的方法,這說明了子類繼承了父類的屬性和方法。其中Person叫做父類,Student、Teacher這樣的由Person衍生的類叫做子類。繼承的關(guān)鍵字是extends。

繼承的作用:減少重復的、冗余的相同屬性和方法。

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

子類和父類的繼承機制

繼承關(guān)系是兩個類,一個為子類(派生類),一個是(父類)。子類繼承父類,使用關(guān)鍵字extends表示(extends的意思是擴展,所以子類是對父類的擴展,就是說,我們還可以在子類中添加獨屬于它的屬性和方法)。Java中的類只有單繼承,沒有多繼承(一個兒子只能有一個爸爸,但是爸爸可以有多個兒子)

Java單繼承

Java不支持多繼承,只允許一個類直接繼承另一個類;
子類只能有一個父類,extends 關(guān)鍵字后面只能有一個類名

public class Animal {

}
public class Person {

}

我們讓Student繼承Animal和Person:

在這里插入圖片描述

發(fā)現(xiàn)不允許多繼承。這里提一下,雖然不能多繼承,但是可以實現(xiàn)多個接口。

雖然不能多繼承,但不代表不能多重繼承(爸爸的爸爸是爺爺):

public class Person extends Animal{

}
public class Student extends Person {

}

學生是人類,人類是動物,所以學生也是動物。

Java繼承的頂級父類:Object

Object類是Java中所有類的始祖,Java中的每一個類都是由它擴展而來,但是并不明確寫出要繼承它,根據(jù)繼承的特性,所有的Java類都擁有其方法。

這里介紹Object中的常用方法:hashCode()toString()、equals(Object obj),這也是所有類都有的方法。

hashCode()方法: 返回對象存儲地址。

	public static void main(String[] args) {
		System.out.println(new Person().hashCode());
		System.out.println(new Person().hashCode());
	}

在這里插入圖片描述

這個地址對于每個對象都是唯一的,如果兩對象的hashCode值一樣,說明它們是同一對象。

toString()方法:該方法用來返回對象的字符串表示形式。

	public static void main(String[] args) {
		System.out.println(new Person().toString());
		System.out.println(new Person().toString());
	}

默認的toString()方法是類名+@+hashCode()相關(guān)的唯一標識。

看源碼如下:

在這里插入圖片描述

現(xiàn)在我們重寫一下toString()方法:

public class Person {
	private String name;
	private int age;

	public Person() {
		this.name = "未命名";
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
}

運行結(jié)果:

在這里插入圖片描述

equals(Object obj): 該方法用于判斷兩個對象是否相同,如果沒有被重寫,其與==等價。

	public static void main(String[] args) {
		Person p1 = new Person();
		Person p2 = new Person();
		System.out.println(p1.equals(p2));
	}

在這里插入圖片描述

equals方法源碼如下:

在這里插入圖片描述

Object的equals方法比較的就是兩對象的地址。
String類的equals方法就被重寫了。

對象的類型轉(zhuǎn)換

對象向上轉(zhuǎn)型

子類轉(zhuǎn)換成為父類,向上轉(zhuǎn)型
格式: 父類名稱 對象名稱 = new 子類名稱();
含義: 把創(chuàng)建的子類對象當做父類看待和使用

public class Person {
	public void run() {
		System.out.println("Person run");
	}
}
public class Student extends Person{
	public void study() {
		System.out.println("Student study");
	}
}
public class Test {
	public static void main(String[] args) {
		// 子類的對象 當作 父類的類型 使用,向上轉(zhuǎn)型
		Person stu = new Student();
		stu.run();
		// 父類不能調(diào)用子類特有的方法
//		stu.study();

	}
}

對象向下轉(zhuǎn)型

父類轉(zhuǎn)換為子類,向下轉(zhuǎn)型
子類 引用 = (子類) 父類對象
強制類型轉(zhuǎn)換

	public static void main(String[] args) {
		Person p = new Person();// 向下轉(zhuǎn)型
		Student stu = (Student) p;

		Student stu1 = (Student) new Person();// 還可以這樣寫

		stu.run();
		stu.study();
	}

需要注意可能會報java.lang.ClassCastException異常;
當應用程序代碼嘗試將某一對象轉(zhuǎn)換為某一子類時,如果該對象并非該子類的實例,JVM就會拋出ClassCastException異常。

在這里插入圖片描述

以下情況就不會報類型轉(zhuǎn)換的異常,因為原本就是Student類的,強轉(zhuǎn)回來依舊是Student類

	public static void main(String[] args) {
		Person p = new Student();
		Student stu = (Student) p;
		stu.run();
		stu.study();
	}

明顯地,類的類型轉(zhuǎn)換就跟基本數(shù)據(jù)類型的轉(zhuǎn)換寫法一致。

總結(jié)

到此這篇關(guān)于Java面向?qū)ο笾惖睦^承介紹的文章就介紹到這了,更多相關(guān)Java繼承內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot集成Spring Security的方法

    SpringBoot集成Spring Security的方法

    Spring security,是一個強大的和高度可定制的身份驗證和訪問控制框架。這篇文章主要介紹了SpringBoot集成Spring Security的操作方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • IDEA中使用Git的圖文教程

    IDEA中使用Git的圖文教程

    本文主要介紹了IDEA中使用Git的圖文教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • Java字符轉(zhuǎn)碼之UTF-8互轉(zhuǎn)GBK具體實現(xiàn)

    Java字符轉(zhuǎn)碼之UTF-8互轉(zhuǎn)GBK具體實現(xiàn)

    在Java程序中字符串默認的編碼方式是UTF-16編碼,因此需要將GBK編碼轉(zhuǎn)換為UTF-8編碼,主要是為了避免出現(xiàn)亂碼的情況,這篇文章主要給大家介紹了關(guān)于Java字符轉(zhuǎn)碼之UTF-8互轉(zhuǎn)GBK具體實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • JPA save()方法將字段更新為null的解決方案

    JPA save()方法將字段更新為null的解決方案

    這篇文章主要介紹了JPA save()方法將字段更新為null的解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • java按照模板導出pdf或word文件詳細代碼

    java按照模板導出pdf或word文件詳細代碼

    有時候業(yè)務中我們需要使用pdf模板生成一份pdf文件,下面這篇文章主要給大家介紹了關(guān)于java按照模板導出pdf或word文件的相關(guān)資料,文中給出了詳細的代碼示例,需要的朋友可以參考下
    2023-11-11
  • mybatis-plus @DS實現(xiàn)動態(tài)切換數(shù)據(jù)源原理

    mybatis-plus @DS實現(xiàn)動態(tài)切換數(shù)據(jù)源原理

    本文主要介紹了mybatis-plus @DS實現(xiàn)動態(tài)切換數(shù)據(jù)源原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • java算法入門之有效的括號刪除有序數(shù)組中的重復項實現(xiàn)strStr

    java算法入門之有效的括號刪除有序數(shù)組中的重復項實現(xiàn)strStr

    大家好,我是哪吒,一個熱愛編碼的Java工程師,本著"欲速則不達,欲達則欲速"的學習態(tài)度,在程序猿這條不歸路上不斷成長,所謂成長,不過是用時間慢慢擦亮你的眼睛,少時看重的,年長后卻視若鴻毛,少時看輕的,年長后卻視若泰山,成長之路,亦是漸漸放下執(zhí)念,內(nèi)心歸于平靜的旅程
    2021-08-08
  • Java后端面試題最新整理

    Java后端面試題最新整理

    在本篇文章里小編給大家整理了一篇關(guān)于Java后端面試題最新整理內(nèi)容,需要的朋友們可以參考下。
    2020-12-12
  • Java-JFrame窗體美化方式

    Java-JFrame窗體美化方式

    這篇文章主要介紹了Java-JFrame窗體美化方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • mybatis項目CRUD步驟實例詳解

    mybatis項目CRUD步驟實例詳解

    這篇文章主要介紹了mybatis項目CRUD步驟,包括pom.xml引入相應的依賴,在resources目錄下寫配置文件,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-09-09

最新評論

绥中县| 舒城县| 桓仁| 巫山县| 榆中县| 怀宁县| 广西| 托克托县| 驻马店市| 稻城县| 常山县| 榕江县| 鲁山县| 德兴市| 虞城县| 宁国市| 娄烦县| 屏边| 静宁县| 阜宁县| 靖宇县| 拉孜县| 桂阳县| 汾西县| 广平县| 嘉荫县| 琼中| 察哈| 宁蒗| 光山县| 黔东| 郓城县| 任丘市| 蒲江县| 尉犁县| 临泽县| 云霄县| 辉南县| 四川省| 台中市| 文山县|