欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java面向?qū)ο笾?lèi)的繼承介紹

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

繼承的作用

如果沒(méi)有繼承機(jī)制是怎么樣的?

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

/**
 * 老師類(lèi) 封裝了姓名、年齡
 * 
 * @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),這兩個(gè)類(lèi)中的屬性和方法都是一樣的,或者說(shuō)這兩個(gè)類(lèi)都有相同的某些特性。

使用繼承機(jī)制后的示例?

先寫(xiě)一個(gè)Person父類(lèi):

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;
	}
}

兩個(gè)類(lèi)繼承Person

public class Teacher extends Person {

}
public class Student extends Person {

}

再寫(xiě)個(gè)測(cè)試類(lèi)看一下:

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

在這里插入圖片描述

類(lèi)的繼承是什么?

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

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

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

子類(lèi)和父類(lèi)的繼承機(jī)制

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

Java單繼承

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

public class Animal {

}
public class Person {

}

我們讓Student繼承Animal和Person:

在這里插入圖片描述

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

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

public class Person extends Animal{

}
public class Student extends Person {

}

學(xué)生是人類(lèi),人類(lèi)是動(dòng)物,所以學(xué)生也是動(dòng)物。

Java繼承的頂級(jí)父類(lèi):Object

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

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

hashCode()方法: 返回對(duì)象存儲(chǔ)地址。

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

在這里插入圖片描述

這個(gè)地址對(duì)于每個(gè)對(duì)象都是唯一的,如果兩對(duì)象的hashCode值一樣,說(shuō)明它們是同一對(duì)象。

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

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

默認(rèn)的toString()方法是類(lèi)名+@+hashCode()相關(guān)的唯一標(biāo)識(shí)。

看源碼如下:

在這里插入圖片描述

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

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

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

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

運(yùn)行結(jié)果:

在這里插入圖片描述

equals(Object obj): 該方法用于判斷兩個(gè)對(duì)象是否相同,如果沒(méi)有被重寫(xiě),其與==等價(jià)。

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

在這里插入圖片描述

equals方法源碼如下:

在這里插入圖片描述

Object的equals方法比較的就是兩對(duì)象的地址。
String類(lèi)的equals方法就被重寫(xiě)了。

對(duì)象的類(lèi)型轉(zhuǎn)換

對(duì)象向上轉(zhuǎn)型

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

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) {
		// 子類(lèi)的對(duì)象 當(dāng)作 父類(lèi)的類(lèi)型 使用,向上轉(zhuǎn)型
		Person stu = new Student();
		stu.run();
		// 父類(lèi)不能調(diào)用子類(lèi)特有的方法
//		stu.study();

	}
}

對(duì)象向下轉(zhuǎn)型

父類(lèi)轉(zhuǎn)換為子類(lèi),向下轉(zhuǎn)型
子類(lèi) 引用 = (子類(lèi)) 父類(lèi)對(duì)象
強(qiáng)制類(lèi)型轉(zhuǎn)換

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

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

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

需要注意可能會(huì)報(bào)java.lang.ClassCastException異常;
當(dāng)應(yīng)用程序代碼嘗試將某一對(duì)象轉(zhuǎn)換為某一子類(lèi)時(shí),如果該對(duì)象并非該子類(lèi)的實(shí)例,JVM就會(huì)拋出ClassCastException異常。

在這里插入圖片描述

以下情況就不會(huì)報(bào)類(lèi)型轉(zhuǎn)換的異常,因?yàn)樵揪褪荢tudent類(lèi)的,強(qiáng)轉(zhuǎn)回來(lái)依舊是Student類(lèi)

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

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

總結(jié)

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

相關(guān)文章

  • Java 包和訪問(wèn)權(quán)限操作

    Java 包和訪問(wèn)權(quán)限操作

    這篇文章主要介紹了Java 包和訪問(wèn)權(quán)限操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • java解析JSON數(shù)據(jù)詳解

    java解析JSON數(shù)據(jù)詳解

    這篇文章主要介紹了java解析JSON數(shù)據(jù)詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Java單例模式實(shí)現(xiàn)的幾種方式

    Java單例模式實(shí)現(xiàn)的幾種方式

    這篇文章主要介紹了Java單例模式實(shí)現(xiàn)的幾種方式的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • Eclipse將Maven項(xiàng)目打成jar包的方法

    Eclipse將Maven項(xiàng)目打成jar包的方法

    這篇文章主要介紹了Eclipse將Maven項(xiàng)目打成jar包的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2007-09-09
  • 又又叕出BUG啦!理智分析Java NIO的ByteBuffer到底有多難用

    又又叕出BUG啦!理智分析Java NIO的ByteBuffer到底有多難用

    網(wǎng)絡(luò)數(shù)據(jù)的基本單位永遠(yuǎn)是byte,Java NIO提供ByteBuffer作為字節(jié)的容器,但該類(lèi)過(guò)于復(fù)雜,有點(diǎn)難用.本篇文章就帶大家簡(jiǎn)單了解一下 ,需要的朋友可以參考下
    2021-06-06
  • Idea 快速生成方法返回值的操作

    Idea 快速生成方法返回值的操作

    這篇文章主要介紹了Idea 快速生成方法返回值的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • java創(chuàng)建子類(lèi)對(duì)象設(shè)置并調(diào)用父類(lèi)的變量操作

    java創(chuàng)建子類(lèi)對(duì)象設(shè)置并調(diào)用父類(lèi)的變量操作

    這篇文章主要介紹了java創(chuàng)建子類(lèi)對(duì)象設(shè)置并調(diào)用父類(lèi)的變量操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • Springboot如何切換默認(rèn)的Tomcat容器

    Springboot如何切換默認(rèn)的Tomcat容器

    這篇文章主要介紹了Springboot如何切換默認(rèn)的Tomcat容器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java File類(lèi) mkdir 不能創(chuàng)建多層目錄的解決

    Java File類(lèi) mkdir 不能創(chuàng)建多層目錄的解決

    這篇文章主要介紹了Java File類(lèi) mkdir 不能創(chuàng)建多層目錄的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java Swing實(shí)現(xiàn)的定制TextField功能示例

    Java Swing實(shí)現(xiàn)的定制TextField功能示例

    這篇文章主要介紹了Java Swing實(shí)現(xiàn)的定制TextField功能,結(jié)合實(shí)例形式分析了java swing組件TextField相關(guān)屬性功能與設(shè)置操作技巧,需要的朋友可以參考下
    2018-01-01

最新評(píng)論