真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java面向?qū)ο缶幊讨?lèi)的繼承詳解

本文實(shí)例講述了Java面向?qū)ο缶幊讨?lèi)的繼承。分享給大家供大家參考,具體如下:

創(chuàng)新互聯(lián)建站專(zhuān)注于中大型企業(yè)的成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站和網(wǎng)站改版、網(wǎng)站營(yíng)銷(xiāo)服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開(kāi)發(fā)的融合,累計(jì)客戶成百上千,服務(wù)滿意度達(dá)97%。幫助廣大客戶順利對(duì)接上互聯(lián)網(wǎng)浪潮,準(zhǔn)確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運(yùn)用,我們將一直專(zhuān)注品牌網(wǎng)站制作和互聯(lián)網(wǎng)程序開(kāi)發(fā),在前進(jìn)的路上,與客戶一起成長(zhǎng)!

繼承:特殊類(lèi)擁有一般類(lèi)的全部屬性與行為。

繼承好處:

1.提高了代碼的復(fù)用性

2.讓類(lèi)與類(lèi)之前產(chǎn)生了關(guān)系,有了這個(gè)關(guān)系才有多態(tài)的特性。繼承是類(lèi)和類(lèi)之前的關(guān)系。

注意事項(xiàng):

1.java只支持單繼承,不支持多繼承。因?yàn)槎嗬^承有安全隱患:當(dāng)多個(gè)父類(lèi)定義相同的函數(shù),但是功能不同時(shí),子類(lèi)不知道運(yùn)行哪一個(gè)。

2.子類(lèi)繼承父類(lèi)時(shí),繼承了父類(lèi)的所有方法和屬性,可直接使用。

3,java支持多層繼承,即:孫-子-父的關(guān)系

語(yǔ)法:

[類(lèi)修飾符] class 子類(lèi)名 extends 父類(lèi)名{
  語(yǔ)句;
}

例如:

class Pserson
{
  int age;
  String name;
  public void speak()
  {
    System.out.println("Hello World!");
  }
}
//繼承Person類(lèi),繼承了父類(lèi)所有方法和屬性
class Student extends Pserson
{
  public void study()
  {
    System.out.println("Good Study!");
  }
}
//繼承Person類(lèi),繼承了父類(lèi)所有方法和屬性
class Worker extends Pserson
{
  public void work()
  {
    System.out.println("Good work!");
  }
}

如何使用一個(gè)繼承體系中的功能(查閱api文檔):

查閱父類(lèi)的功能,創(chuàng)建子類(lèi)對(duì)象使用功能

在繼承過(guò)程中經(jīng)常遇到這三種場(chǎng)景:

1)同名變量

1.如果子類(lèi)出現(xiàn)非私有的同名成員變量時(shí),子類(lèi)訪問(wèn)本類(lèi)的變量,用this;子類(lèi)訪問(wèn)父類(lèi)中的同名變量,用super。
2.this代表本類(lèi)對(duì)象的引用
3.super代表父類(lèi)對(duì)象的引用(用法和this相同)

2)同名函數(shù)

1.如果子類(lèi)出現(xiàn)和父類(lèi)一模一樣的函數(shù)時(shí)(函數(shù)名和參數(shù)都相同),當(dāng)子類(lèi)對(duì)象調(diào)用該函數(shù),會(huì)運(yùn)行子類(lèi)函數(shù)內(nèi)容。,父類(lèi)的函數(shù)會(huì)被覆蓋(也叫重寫(xiě))。

2.重寫(xiě)定義:當(dāng)子類(lèi)繼承父類(lèi),沿襲了父類(lèi)的功能,到子類(lèi)中。但子類(lèi)雖具備該功能,但功能的內(nèi)容和父類(lèi)不一致,這時(shí),沒(méi)有必須要定義新功能,而是使用覆蓋特性,保留父類(lèi)的功能定義,并重寫(xiě)功能內(nèi)容。

3.重寫(xiě)(覆蓋)注意事項(xiàng):

<1>子類(lèi)覆蓋父類(lèi),必須保證子類(lèi)的權(quán)限大于等于父類(lèi)的權(quán)限,才能繼承,否則編譯失敗。(public>不寫(xiě)修辭關(guān)鍵詞>private)
<2>靜態(tài)只能覆蓋靜態(tài)
<3>重載:只看同名函數(shù)的參數(shù)列表 重寫(xiě):子父類(lèi)方法要一模一樣(函數(shù)名和參數(shù)列表)

class Fu
{
  //public void show()  當(dāng)父類(lèi)為show()時(shí),會(huì)和子類(lèi)函數(shù)一模一樣,父類(lèi)的show函數(shù)會(huì)被重寫(xiě)
  public void show(String name) //父類(lèi)的show函數(shù)和子類(lèi)不一樣(參數(shù)列表不一樣),因此父類(lèi)的show函數(shù)不會(huì)被重寫(xiě)
  {
    System.out.println(name);
  }
}
class Zi extends Fu
{
  public void show()
  {
    System.out.println("zi");
  }
}
class Jicheng
{
  public static void main(String[] args)
  {
    Zi z1=new Zi();
    z1.show("nihao");//會(huì)調(diào)用父類(lèi)的show函數(shù)
  }
}

3)構(gòu)造函數(shù)

1.在對(duì)子類(lèi)對(duì)象進(jìn)行初始化時(shí),父類(lèi)的構(gòu)造函數(shù)也會(huì)運(yùn)行,因?yàn)樽宇?lèi)的構(gòu)造函數(shù)的第一行默認(rèn)有一條隱式語(yǔ)句super()

2.super()會(huì)訪問(wèn)父類(lèi)中空參數(shù)的構(gòu)造函數(shù),而且子類(lèi)中所有的構(gòu)造函數(shù)第一行默認(rèn)都是super()

3.子類(lèi)一定要訪問(wèn)父類(lèi)構(gòu)造函數(shù)原因

<1>因?yàn)楦割?lèi)中的數(shù)據(jù)子類(lèi)可以直接獲取,所以子類(lèi)在創(chuàng)建是,先看看父類(lèi)如何對(duì)這些數(shù)據(jù)進(jìn)行初始化的,所以子類(lèi)在對(duì)象初始化時(shí),默認(rèn)先訪問(wèn)父類(lèi)的構(gòu)造函數(shù)。
<2>若要訪問(wèn)父類(lèi)制定的構(gòu)造函數(shù)或者父類(lèi)沒(méi)有空參數(shù)的構(gòu)造函數(shù)時(shí),可以通過(guò)手動(dòng)定義super語(yǔ)句的方式來(lái)制定。
<3>當(dāng)然子類(lèi)的構(gòu)造函數(shù)第一行也可以手動(dòng)指定this語(yǔ)句來(lái)訪問(wèn)本類(lèi)的構(gòu)造函數(shù),但子類(lèi)中至少有一個(gè)構(gòu)造函數(shù)會(huì)訪問(wèn)父類(lèi)的構(gòu)造函數(shù)

class Fu
{
  String name;
  int age;
  Fu(){System.out.println("Hello Fu");}
  Fu(String name)
  {
    System.out.println(name);
  }
  Fu(String name,int age)
  {
    this.name=name;
    this.age=age;
    System.out.println("name: "+name+",age: "+age);
  }
}
class Zi extends Fu
{
  //Zi(){System.out.println("Hello Zi");}  默認(rèn)先會(huì)調(diào)用父類(lèi)的無(wú)參構(gòu)造函數(shù)
  Zi()
  {
    super("zhangsan",20);//手動(dòng)用super語(yǔ)句指定父類(lèi)的構(gòu)造函數(shù),來(lái)獲取父類(lèi)非私有的信息
    System.out.println(name+"::"+age);
  }
}
class Test
{
  public static void main(String[] args)
  {
    Zi z1=new Zi();
  }
}

構(gòu)造函數(shù)異常例子:

寫(xiě)出程序結(jié)果

class Super
{
  int i=0;
  public Super(String s)
  {
    i=1;
  }
}
class Demo extends Super
{
  public Demo(String s)
  {
    i=2;
  }
  public static void main(String[] args)
  {
    Demo d=new Demo("yes");
    System.out.println(d.i);
  }
}
//編譯失敗,因?yàn)楦割?lèi)中缺少空參數(shù)的構(gòu)造函數(shù)。
//或者子類(lèi)應(yīng)該通過(guò)super語(yǔ)句指定要調(diào)用的父類(lèi)中的構(gòu)造函數(shù)。

重寫(xiě)和重載例子:

class Demo
{
   int show(int a,int b){return 0;}
}

下面那些函數(shù)可以存在于Demo的子類(lèi)中。

A.public int show(int a,int b){return 0;}//可以,覆蓋。
B.private int show(int a,int b){return 0;}//不可以,權(quán)限不夠。
C.private int show(int a,long b){return 0;}//可以,和父類(lèi)不是一個(gè)函數(shù)。沒(méi)有覆蓋,相當(dāng)于重載。
D.public short show(int a,int b){return 0;}//不可以,因?yàn)樵摵瘮?shù)不可以和給定函數(shù)出現(xiàn)在同一類(lèi)中,或者子父類(lèi)中。
E.static int show(int a,int b){return 0;}//不可以,靜態(tài)只能覆蓋靜態(tài)。

因此子類(lèi)允許重寫(xiě)和重載。

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。


文章題目:Java面向?qū)ο缶幊讨?lèi)的繼承詳解
轉(zhuǎn)載源于:http://weahome.cn/article/joeosp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部