亚洲一级免费看,特黄特色大片免费观看播放器,777毛片,久久久久国产一区二区三区四区,欧美三级一区二区,国产精品一区二区久久久久,人人澡人人草

java語(yǔ)言

Java 繼承

時(shí)間:2025-04-08 02:49:40 java語(yǔ)言 我要投稿

Java 繼承

  繼承是java面向?qū)ο缶幊碳夹g(shù)的一塊基石,因?yàn)樗试S創(chuàng)建分等級(jí)層次的類(lèi)。下面一起跟著小編一起了解一下吧!

  繼承就是子類(lèi)繼承父類(lèi)的特征和行為,使得子類(lèi)對(duì)象(實(shí)例)具有父類(lèi)的實(shí)例域和方法,或子類(lèi)從父類(lèi)繼承方法,使得子類(lèi)具有父類(lèi)相同的行為。

  生活中的繼承:

  兔子和羊?qū)儆谑巢輨?dòng)物類(lèi),獅子和豹屬于食肉動(dòng)物類(lèi)。

  食草動(dòng)物和食肉動(dòng)物又是屬于動(dòng)物類(lèi)。

  所以繼承需要符合的關(guān)系是:is-a,父類(lèi)更通用,子類(lèi)更具體。

  雖然食草動(dòng)物和食肉動(dòng)物都是屬于動(dòng)物,但是兩者的屬性和行為上有差別,所以子類(lèi)會(huì)具有父類(lèi)的一般特性也會(huì)具有自身的特性。

  類(lèi)的繼承格式

  在 Java 中通過(guò) extends 關(guān)鍵字可以申明一個(gè)類(lèi)是從另外一個(gè)類(lèi)繼承而來(lái)的,一般形式如下:

  類(lèi)的繼承格式

  class 父類(lèi) {

  }

  class 子類(lèi) extends 父類(lèi) {

  }

  為什么需要繼承

  接下來(lái)我們通過(guò)實(shí)例來(lái)說(shuō)明這個(gè)需求。

  開(kāi)發(fā)動(dòng)物類(lèi),其中動(dòng)物分別為企鵝以及老鼠,要求如下:

  企鵝:屬性(姓名,id),方法(吃,睡,自我介紹)

  老鼠:屬性(姓名,id),方法(吃,睡,自我介紹)

  企鵝類(lèi):

  public class Penguin {

  private String name;

  private int id;

  public Penguin(String myName, int myid) {

  name = myName;

  id = myid;

  }

  public void eat(){

  System.out.println(name+"正在吃");

  }

  public void sleep(){

  System.out.println(name+"正在睡");

  }

  public void introduction() {

  System.out.println("大家好!我是"   + id + "號(hào)" + name + ".");

  }

  }

  老鼠類(lèi):

  public class Mouse {

  private String name;

  private int id;

  public Mouse(String myName, int myid) {

  name = myName;

  id = myid;

  }

  public void eat(){

  System.out.println(name+"正在吃");

  }

  public void sleep(){

  System.out.println(name+"正在睡");

  }

  public void introduction() {

  System.out.println("大家好!我是"   + id + "號(hào)" + name + ".");

  }

  }

  從這兩段代碼可以看出來(lái),代碼存在重復(fù)了,導(dǎo)致后果就是代碼量大且臃腫,而且維護(hù)性不高(維護(hù)性主要是后期需要修改的時(shí)候,就需要修改很多的代碼,容易出錯(cuò)),所以要從根本上解決這兩段代碼的問(wèn)題,就需要繼承,將兩段代碼中相同的部分提取出來(lái)組成 一個(gè)父類(lèi):

  公共父類(lèi):

  public class Animal {

  private String name;

  private int id;

  public Animal(String myName, int myid) {

  name = myName;

  id = myid;

  }

  public void eat(){

  System.out.println(name+"正在吃");

  }

  public void sleep(){

  System.out.println(name+"正在睡");

  }

  public void introduction() {

  System.out.println("大家好!我是"   + id + "號(hào)" + name + ".");

  }

  }

  這個(gè)Animal類(lèi)就可以作為一個(gè)父類(lèi),然后企鵝類(lèi)和老鼠類(lèi)繼承這個(gè)類(lèi)之后,就具有父類(lèi)當(dāng)中的屬性和方法,子類(lèi)就不會(huì)存在重復(fù)的代碼,維護(hù)性也提高,代碼也更加簡(jiǎn)潔,提高代碼的復(fù)用性(復(fù)用性主要是可以多次使用,不用再多次寫(xiě)同樣的代碼) 繼承之后的代碼:

  企鵝類(lèi):

  public class Penguin extends Animal {

  public Penguin(String myName, int myid) {

  super(myName, myid);

  }

  }

  老鼠類(lèi):

  public class Mouse extends Animal {

  public Mouse(String myName, int myid) {

  super(myName, myid);

  }

  }

  繼承的特性

  子類(lèi)擁有父類(lèi)非private的屬性,方法。

  子類(lèi)可以擁有自己的屬性和方法,即子類(lèi)可以對(duì)父類(lèi)進(jìn)行擴(kuò)展。

  子類(lèi)可以用自己的方式實(shí)現(xiàn)父類(lèi)的方法。

  Java的繼承是單繼承,但是可以多重繼承,單繼承就是一個(gè)子類(lèi)只能繼承一個(gè)父類(lèi),多重繼承就是,例如A類(lèi)繼承B類(lèi),B類(lèi)繼承C類(lèi),所以按照關(guān)系就是C類(lèi)是B類(lèi)的父類(lèi),B類(lèi)是A類(lèi)的父類(lèi),這是java繼承區(qū)別于C++繼承的一個(gè)特性。

  提高了類(lèi)之間的耦合性(繼承的缺點(diǎn),耦合度高就會(huì)造成代碼之間的聯(lián)系)。

  繼承關(guān)鍵字

  繼承可以使用 extends 和 implements 這兩個(gè)關(guān)鍵字來(lái)實(shí)現(xiàn)繼承,而且所有的類(lèi)都是繼承于 java.lang.Object,當(dāng)一個(gè)類(lèi)沒(méi)有繼承的兩個(gè)關(guān)鍵字,則默認(rèn)繼承object(這個(gè)類(lèi)在 java.lang 包中,所以不需要 import)祖先類(lèi)。

  extends關(guān)鍵字

  在 Java 中,類(lèi)的繼承是單一繼承,也就是說(shuō),一個(gè)子類(lèi)只能擁有一個(gè)父類(lèi),所以 extends 只能繼承一個(gè)類(lèi)。

  extends 關(guān)鍵字

  public class Animal {

  private String name;

  private int id;

  public Animal(String myName, String myid) {

  //初始化屬性值

  }

  public void eat() { //吃東西方法的具體實(shí)現(xiàn) }

  public void sleep() { //睡覺(jué)方法的具體實(shí)現(xiàn) }

  }

  public class Penguin extends Animal{

  }

  implements關(guān)鍵字

  使用 implements 關(guān)鍵字可以變相的使java具有多繼承的特性,使用范圍為類(lèi)繼承接口的情況,可以同時(shí)繼承多個(gè)接口(接口跟接口之間采用逗號(hào)分隔)。

  implements 關(guān)鍵字

  public interface A {

  public void eat();

  public void sleep();

  }

  public interface B {

  public void show();

  }

  public class C implements A,B {

  }

  super 與 this 關(guān)鍵字

  super關(guān)鍵字:我們可以通過(guò)super關(guān)鍵字來(lái)實(shí)現(xiàn)對(duì)父類(lèi)成員的訪問(wèn),用來(lái)引用當(dāng)前對(duì)象的父類(lèi)。

  this關(guān)鍵字:指向自己的引用。

  實(shí)例

  public class SuperDemo {

  public static void main(String []args) {

  new SubClass().showMessage();

  }

  }

  class SuperClass {

  int i = 50;

  }

  class SubClass extends SuperClass {

  int i =100;

  public void showMessage() {

  System.out.printf("super.i = %d, this.i = %d ", super.i, this.i);

  }

  }

  輸出結(jié)果為:

  super.i = 50, this.i = 100

  final關(guān)鍵字

  final 關(guān)鍵字聲明類(lèi)可以把類(lèi)定義為不能繼承的,即最終類(lèi);或者用于修飾方法,該方法不能被子類(lèi)重寫(xiě):

  聲明類(lèi):

  final class 類(lèi)名 {//類(lèi)體}

  聲明方法:

  修飾符(public/private/default/protected) final 返回值類(lèi)型 方法名(){//方法體}

  注:實(shí)例變量也可以被定義為 final,被定義為 final 的變量不能被修改。被聲明為 final 類(lèi)的方法自動(dòng)地聲明為 final,但是實(shí)例變量并不是 final

  構(gòu)造器

  子類(lèi)不能繼承父類(lèi)的構(gòu)造器(構(gòu)造方法或者構(gòu)造函數(shù)),但是父類(lèi)的構(gòu)造器帶有參數(shù)的,則必須在子類(lèi)的構(gòu)造器中顯式地通過(guò)super關(guān)鍵字調(diào)用父類(lèi)的構(gòu)造器并配以適當(dāng)?shù)膮?shù)列表。

  如果父類(lèi)有無(wú)參構(gòu)造器,則在子類(lèi)的構(gòu)造器中用super調(diào)用父類(lèi)構(gòu)造器不是必須的,如果沒(méi)有使用super關(guān)鍵字,系統(tǒng)會(huì)自動(dòng)調(diào)用父類(lèi)的無(wú)參構(gòu)造器。

  實(shí)例

  class SuperClass {

  private int n;

  SuperClass(){

  System.out.println("SuperClass()");

  }

  SuperClass(int n) {

  System.out.println("SuperClass(int n)");

  this.n = n;

  }

  }

  class SubClass extends SuperClass{

  private int n;

  SubClass(){

  super(300);

  System.out.println("SubClass");

  }

  public SubClass(int n){

  System.out.println("SubClass(int n):"+n);

  this.n = n;

  }

  }

  public class TestSuperSub{

  public static void main (String args[]){

  SubClass sc = new SubClass();

  SubClass sc2 = new SubClass(200);

  }

  }

  輸出結(jié)果為:

  SuperClass(int n)

  SubClass

  SuperClass()

  SubClass(int n):200

【Java 繼承】相關(guān)文章:

java的繼承總結(jié)08-06

Java語(yǔ)言繼承的要點(diǎn)03-13

java繼承是什么06-11

java的繼承與組合的區(qū)別07-19

Java語(yǔ)言的繼承結(jié)構(gòu)06-21

java語(yǔ)言的接口與繼承02-26

Java中的繼承與組合01-28

Java語(yǔ)言接口與繼承的本質(zhì)06-28

java繼承抽象類(lèi)07-28