日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java什么是重用_深度解析:java必须掌握的知识点——类的重用

發(fā)布時(shí)間:2024/7/5 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java什么是重用_深度解析:java必须掌握的知识点——类的重用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

類繼承的概念和語(yǔ)法

類繼承的概念

根據(jù)已有類來定義新類,新類擁有已有類的所有功能。

Java只支持類的單繼承,每個(gè)子類只能有一一個(gè)直接超類(父類)。

超類是所有子類的公共屬性及方法的集合,子類則是超類的特殊化。

繼承機(jī)制可以提高程序的抽象程度,提高代碼的可重用性。

超類和子類

子類對(duì)象與超類對(duì)象存在“是一個(gè)…”或“是一種…”的關(guān)系。

子類對(duì)象

從外部來看,它應(yīng)該包括

與超類相同的接口

可以具有更多的方法和數(shù)據(jù)成員

其內(nèi)包含著超類的所有變量和方法

繼承的語(yǔ)法

[ClassModifier] class ClassName extends SuperClassName

{

//類體

}

類繼承舉例

設(shè)有三個(gè)類: Person(人), Employee(員工),Manager(管理人員)。很明顯:Person是范圍最廣的一個(gè),Employee次之,Manager的范圍最小,其類層次如圖:

有如下代碼:

Preson.java

public class Person {

public String name;

public String getName() {

return name;

}

}

Employee.java

public class Employee extends Person {

public int employeeNumber;

public int getEmployeeNumber() {

return employeeNumber;

}

}

Manager.java

public class Manager extends Employee {

public String responsibilities;

public String getResponsibilities() {

return responsibilities;

}

}

可以看出Employee(員工)是一種特殊的Person(人),所以Employee繼承于Person類。而Manager(管理人員)是一種特殊的Employee(員工),所以Manager繼承于Employee類。

下面為測(cè)試類:

public class Test {

public static void main(String args[]){

Employee li = new Employee();

li.name = "Li Ming";

li.employeeNumber = 123456;

System.out.println(li.getName());

System.out.println(li.getEmployeeNumber());

Manager he = new Manager();

he.name = "He Xia";

he.employeeNumber = 543469;

he.responsibilities = "Internet project" ;

System.out.println(he.getName());

System.out.println(he.getEmployeeNumber());

System.out.println(he.getResponsibilities());

}

}

類中定義了一個(gè)Employee類li,輸出li的名字和編號(hào)

一個(gè)Manager類he,輸出he的名字,編號(hào)和職責(zé)。

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

屬性的隱藏

有以下代碼:

class Parent {

Number aNumber;

}

class Child extends Parent

Float aNumber;

}

子類中聲明了與超類中相同的成員變量名

從超類繼承的變量將被隱藏

子類擁有了兩個(gè)相同名字的變量,一個(gè)繼承自超類,另-一個(gè)由自己聲明

當(dāng)子類執(zhí)行繼承自超類的操作時(shí),處理的是繼承自超類的變量,而當(dāng)子類執(zhí)行它自己聲明的方法時(shí),所操作的就是它自己聲明的變量

那么如果子類想要訪問被隱藏的屬性該怎么辦?

訪問被隱藏的超類屬性調(diào)用從超類繼承的方法,則操作的是從超類繼承的屬性

本類中聲明的方法使用"super.屬性”訪問從超類繼承的屬性

假設(shè)有兩個(gè)類A1和B1

class A1{

int x= 2;

public void setx(int i){

x=i;

}

void printa(){

System.out.println(x);

}

}

class B1 extends A1 {

int x=100;

void printb(){

super.x = super.x +10 ;

System.out.println("super.x=" +

super.x+" x=" + x);

}

}

之后運(yùn)行測(cè)試代碼:

public class Test {

public static void main(String args[]){

A1 a1=new A1();

a1.setx(4);

a1.printa();

B1 b1 = new B1();

b1.printb();

b1.printa();

b1.setx(6); // 將繼承x值設(shè)置為6

b1.printb();

b1.printa();

a1.printa();

}

}

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

方法覆蓋

如果子類不需使用從超類繼承來的方法的功能,則可以聲明自己的同名方法,稱為方法覆蓋

覆蓋方法的返回類型,方法名稱,參數(shù)的個(gè)數(shù)及類型必須和被覆蓋的方法一模一樣

只需在方法名前面使用不同的類名或不同類的對(duì)象名即可區(qū)分覆蓋方

法和被覆蓋方法

覆蓋方法的訪問權(quán)限可以比被覆蓋的寬松,但是不能更為嚴(yán)格

方法覆蓋的應(yīng)用場(chǎng)合

子類中實(shí)現(xiàn)與超類相同的功能,但采用不同的算法或公式;

在名字相同的方法中,要做比超類更多的事情;

在子類中需要取消從超類繼承的方法。

方法覆蓋的注意事項(xiàng):

必須覆蓋的方法

派生類必須覆蓋基類中的抽象的方法,否則派生類自身也成為抽象類.

不能覆蓋的方法

基類中聲明為final的終結(jié)方法基類中聲明為static的靜態(tài)方法

調(diào)用被覆蓋的方法

super.overriddenMethodName();

Object類

所有類的直接或間接超類,處在類層次最高點(diǎn);

包含了所有Java類的公共屬性。

Object類的主要方法

public final Class getClass()

獲取當(dāng)前對(duì)象所屬的類信息,返回Class對(duì)象。

public String toStringO

返回表示當(dāng)前對(duì)象本身有關(guān)信息的字符串對(duì)象。

public boolean equals(Object obj)

比較兩個(gè)對(duì)象引用是否指向同一對(duì)象,是則返回true ,否則返回false。

protected Object clone()

復(fù)制當(dāng)前對(duì)象,并返回這個(gè)副本。

public int hashCode()

返回該對(duì)象的哈希代碼值。

protected void finalize() throws Throwable

在對(duì)象被回收時(shí)執(zhí)行,通常完成的資源釋放工作。

終結(jié)類與終結(jié)方法

用final修飾的類和方法;

終結(jié)類不能被繼承;

終結(jié)方法不能被子類覆蓋。

抽象類

類名前加修飾符abstract ;

可包含常規(guī)類能包含的任何成員,包括非抽象方法;

也可包含抽象方法:用abstract修飾,只有方法原型,沒有方法的實(shí)現(xiàn);

沒有具體實(shí)例對(duì)象的類,不能使用new方法進(jìn)行實(shí)例化,只能用作超類;

只有當(dāng)子類實(shí)現(xiàn)了抽象超類中的所有抽象方法,子類才不是抽象類,才能產(chǎn)生實(shí)例;

如果子類中仍有抽象方法未實(shí)現(xiàn),則子類也只能是抽象類。

抽象類聲明的語(yǔ)法形式

abstract class Number {

}

如果寫new Number()將會(huì)編譯錯(cuò)誤。

抽象方法

聲明的語(yǔ)法形式為:

public abstract (..);

僅有方法原型,而沒有方法體;

抽象方法的具體實(shí)現(xiàn)由子類在它們各自的類聲明中完成;

只有抽象類可以包含抽象方法。

抽象方法的優(yōu)點(diǎn)

隱藏具體的細(xì)節(jié)信息,所有的子類使用的都是相同的方法原型,其中包含了調(diào)用該方法時(shí)需要了解的全部信息;

強(qiáng)迫子類完成指定的行為,規(guī)定所有子類的"標(biāo)準(zhǔn)”行為。

類的組合

組合的語(yǔ)法

將已存在類的對(duì)象放到新類中即可

例如,可以說"廚房( kitchen)里有一個(gè)爐子( cooker )和一一個(gè)冰箱( refrigerator )”。所以,可簡(jiǎn)單的把對(duì)象myCooker和myRefrigerator放在類Kitchen中:

class Cooker{ 類的語(yǔ)句}

class Refrigerator{ 類的語(yǔ)句}

class Kitchen{

Cooker myCooker;

Refrigerator myRefrigerator;

}

例:組合舉例——線段類

一條線段包含兩個(gè)端點(diǎn)

public class Point //點(diǎn)類

{

private int x, y; //coordinate

public Point(int x, int y){ this.x = x; this.y = y;}

public int GetX() { return x; }

public int GetY( { return y; }

}

class Line //線段類

{

private Point p1,p2; // 兩端點(diǎn)

Line(Point a, Point b) {

p1 = new Point(a.GetX(),a.GetY());

p2 = new Point(b.GetX(),b.GetY());

}

public double Length() {

return Math.sqrt(Math.pow(p2.GetX(-p1.GetX0,2)

+ Math.pow(p2.GetY0)-p1.GetY0.2));

}

}

一個(gè)線段類包含兩個(gè)端點(diǎn),也就是組合了兩個(gè)點(diǎn)類。

總結(jié):看完有什么不懂的歡迎在下方留言評(píng)論,記得點(diǎn)個(gè)贊哦!

總結(jié)

以上是生活随笔為你收集整理的Java什么是重用_深度解析:java必须掌握的知识点——类的重用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。