當前位置:首頁 » 編程語言 » 對象繼承java

對象繼承java

發布時間: 2022-09-21 23:09:55

java中的繼承關系,基調用對象的方法是怎樣的順序

如果父類引用指向子類對象(Fu test = new Zi()):
對於非靜態方法,編譯的時候調用的是父類方法,執行的時候是調用的子類方法;
對於靜態方法,編譯和運行的時候調用的都是父類方法。
不信可以寫個程序跑一下

❷ java繼承調用

1、首先創建一個父類

//A.java
publicclassA{
privateinti;
protectedintj;

publicvoidfunc(){

}
}

2、子類則可以使用父類的方法

//B.java
publicclassBextendsA{

}

詳情JDK8教程可參考java基礎技術網站52diandi.com

❸ java中子類繼承父類,子類聲明並實例化對象,這個對象怎麼調用父類方法的 如圖 詳細一點謝謝

//子類 沒有定義 構造 函數時,默認繼承父類的構造方法:輸出結果為 Class A...
// 子類 定義了 構造 函數時,就不會繼承父類的構造方法:輸出結果是 Class B...
<?php
class A{
public function __construct(){
echo "Class A...<br/>";
}
}
class B extends A{
}
new B();
?>
/*輸出結果是:Class A...*/

❹ JAVA中什麼是繼承

繼承在本職上是特殊一般的關系,即常說的is-a關系。子類繼承父類,表明子類是一種特殊的父類,並且具有父類所不具有的 一些屬性或方法。

1.Java繼承的語法格式:

Java繼承的關鍵字是:extends

public class 子類名 extends 父類名{...}

如: public class UNStudent extends Student {...} 註:1.子類又稱超類,拓展類 ;父類又稱基類。

2.Java中類的繼承只能是單繼承(單根繼承),即一個類只能繼承一個父類,但是一個類可以由多個類來繼承它。

3.Java會給每一個沒有設置父類的類,自動添加一個父類就是Object 。

(4)對象繼承java擴展閱讀:

一、子類繼承父類的結果

1.子類繼承父類後,繼承到了父類所有的屬性和方法。註:是所有。

2.子類可調用的方法也要看情況而定:

子類和父類在同一個包下時 「子類和子類的對象」可以調用父類的默認的,受保護的,公有的屬性以及方法。

子類和父類在不同的包下時,在子類中可以調用受保護的,公有的屬性以及方法,而子類的對象可以調用受保護的,公有的屬性以及方法。

二、方法的重寫

1.當子類和父類都有某種方法,而子類的方法更加要求細致,或者實現功能不同,就需要方法的重寫。

2.重寫條件

①必須要存在繼承關系;只有繼承之間的關系才能有方法的重寫

②方法的返回值類型,方法名,參數個數,參數類型,參數順序,必須要完全一致;

如:父類中方法 public void play (int n ; String s){方法體1...}

重寫後的子類方法public void play(int n ; String s){方法體2...}

3.子類重寫方法時的訪問修飾符可以大於或者等於父類方法的訪問修飾符。

4.重寫後的方法會被優先調用。

三、自動轉型

自動轉型的實現要求有繼承關系

格式如下:父類名 對象名 = new 子類構造方法;

如:Student stu = new UNStudent;

而強制轉型格式如下:子類名 對象名 = (子類名)父類對象名

如:UNStudent un = (Student)stu;

自動轉型可以拓寬方法的作用訪問域

在使用自動轉型後,子類自己定義的方法是不能在自動轉型後執行;

原因是因為Java的編譯機制,它會優先判斷父類中是否存在該方法,如果存在則通過編譯,如果不存在則報錯。

第二種自動轉型:轉型後只需要不同類的不同對象調用想吐的方法,很方便!

/**訪問修飾符 返回值數據類型 方法名(父類類型 參數名,...){

調用方法。

}

父類名 對象名 = new 子類名;

子類名 對象名 = new 子類名;

方法名(對象名);

*/

比如拿到駕駛證為A2的人,可以駕駛重型貨車,當然也可以駕駛大型貨車,中型貨車,小型貨車,小客車,小轎車,摩托車... 可以選擇第二種自動轉型的方法,便於調用同一個方法。

自動轉型好處:1.減少冗餘代碼;2.在方法設置參數時,擴大訪問范圍。

四、多態

多態是由方法重載,繼承,方法重寫,自動轉型等技術的組合。

五、為什麼需要繼承?

1.提高代碼的重用性。

2.提高程序的擴展性。

JAVA繼承總結

❺ JAVA繼承實例

繼承是面向對象編程技術的一塊基石,因為它允許創建分等級層次的類。運用繼承,你能夠創建一個通用類,它定義了一系列相關項目的一般特性。該類可以被更具體的類繼承,每個具體的類都增加一些自己特有的東西。在Java 術語學中,被繼承的類叫超類(superclass ),繼承超類的類叫子類(subclass )。因此,子類是超類的一個專門用途的版本,它繼承了超類定義的所有實例變數和方法,並且為它自己增添了獨特的元素。

繼承一個類,只要用extends 關鍵字把一個類的定義合並到另一個中就可以了。為了理解怎樣繼承,讓我們從簡短的程序開始。下面的例子創建了一個超類A和一個名為B的子類。注意怎樣用關鍵字extends 來創建A的一個子類。

// A simple example of inheritance.
// Create a superclass.
class A {
int i, j;
void showij() {
System.out.println("i and j: " + i + " " + j);
}
}
class B extends A {
int k;
void showk() {
System.out.println("k: " + k);
}
void sum() {
System.out.println("i+j+k: " + (i+j+k));
}
}
class SimpleInheritance {
public static void main(String args[]) {
A superOb = new A();
B subOb = new B();
System.out.println("Contents of superOb: ");
superOb.showij();
System.out.println();
subOb.i = 7;
subOb.j = 8;
subOb.k = 9;
System.out.println("Contents of subOb: ");
subOb.showij();
subOb.showk();
System.out.println();
System.out.println("Sum of i, j and k in subOb:");
subOb.sum();
}
}

該程序的輸出如下:

Contents of superOb:
i and j: 10 20

Contents of subOb:
i and j: 7 8
k: 9

Sum of i, j and k in subOb:
i+j+k: 24

像你所看到的,子類B包括它的超類A中的所有成員。這是為什麼subOb 可以獲取i和j 以及調用showij( ) 方法的原因。同樣,sum( ) 內部,i和j可以被直接引用,就像它們是B的一部分。

盡管A是B的超類,它也是一個完全獨立的類。作為一個子類的超類並不意味著超類不能被自己使用。而且,一個子類可以是另一個類的超類。聲明一個繼承超類的類的通常形式如下:

class subclass-name extends superclass-name {
// body of class
}

你只能給你所創建的每個子類定義一個超類。Java 不支持多超類的繼承(這與C++ 不同,在C++中,你可以繼承多個基礎類)。你可以按照規定創建一個繼承的層次。該層次中,一個子類成為另一個子類的超類。然而,沒有類可以成為它自己的超類。

成員的訪問和繼承
盡管子類包括超類的所有成員,它不能訪問超類中被聲明成private 的成員。例如,考慮下面簡單的類層次結構:

/* In a class hierarchy, private members remain private to their class.

This program contains an error and will not compile.
*/

// Create a superclass.

class A {
int i;
private int j; // private to A
void setij(int x, int y) {
i = x; j = y;
}
}
// A"s j is not accessible here.
class B extends A {
int total; void sum() {
total = i + j; // ERROR, j is not accessible here
}
}
class Access {
public static void main(String args[]) {
B subOb = new B();
subOb.setij(10, 12);
subOb.sum();
System.out.println("Total is " + subOb.total);
}
}

該程序不會編譯,因為B中sum( ) 方法內部對j的引用是不合法的。既然j被聲明成private,它只能被它自己類中的其他成員訪問。子類沒權訪問它。

注意:一個被定義成private 的類成員為此類私有,它不能被該類外的所有代碼訪問,包括子類。

更實際的例子
讓我們看一個更實際的例子,該例子有助於闡述繼承的作用。新的類將包含一個盒子的寬度、高度、深度。

// This program uses inheritance to extend Box.

class Box {
double width; double height; double depth;
// construct clone of an object
Box(Box ob) { // pass object to constructor
width = ob.width;
height = ob.height;
depth = ob.depth;
}
// constructor used when all dimensions specified
Box(double w, double h, double d) {
width = w;
height = h;
depth = d;
}
// constructor used when no dimensions specified
Box() {
width = -1; // use -1 to indicate
height = -1; // an uninitialized
depth = -1; // box
}
// constructor used when cube is created
Box(double len) {
width = height = depth = len;
}
// compute and return volume double
volume() {
return width * height * depth;
}
}

BoxWeight extends Box {
double weight; // weight of box
// constructor for BoxWeight
BoxWeight(double w, double h, double d, double m) {
width = w;
height = h;
depth = d;
weight = m;
}
}
class DemoBoxWeight {
public static void main(String args[]) {
BoxWeight mybox1 = new BoxWeight(10, 20, 15, 34.3);
BoxWeight mybox2 = new BoxWeight(2, 3, 4, 0.076);
double vol;
vol = mybox1.volume();
System.out.println("Volume of mybox1 is " + vol);
System.out.println("Weight of mybox1 is " + mybox1.weight);
System.out.println();
vol = mybox2.volume();
System.out.println("Volume of mybox2 is " + vol);
System.out.println("Weight of mybox2 is " + mybox2.weight);
}
}

該程序的輸出顯示如下:

Volume of mybox1 is 3000.0
Weight of mybox1 is 34.3

Volume of mybox2 is 24.0
Weight of mybox2 is 0.076

BoxWeight 繼承了Box 的所有特徵並為自己增添了一個weight 成員。沒有必要讓BoxWeight 重新創建Box 中的所有特徵。為滿足需要我們只要擴展Box就可以了。

繼承的一個主要優勢在於一旦你已經創建了一個超類,而該超類定義了適用於一組對象的屬性,它可用來創建任何數量的說明更多細節的子類。每一個子類能夠正好製作它自己的分類。例如,下面的類繼承了Box並增加了一個顏色屬性:

// Here, Box is extended to include color.
class ColorBox extends Box {
int color; // color of box
ColorBox(double w, double h, double d, int c) {
width = w;
height = h;
depth = d;
color = c;
}
}

記住,一旦你已經創建了一個定義了對象一般屬性的超類,該超類可以被繼承以生成特殊用途的類。每一個子類只增添它自己獨特的屬性。這是繼承的本質。

超類變數可以引用子類對象
超類的一個引用變數可以被任何從該超類派生的子類的引用賦值。你將發現繼承的這個方面在很多條件下是很有用的。例如,考慮下面的程序:

class RefDemo {
public static void main(String args[]) {
BoxWeight weightbox = new BoxWeight(3, 5, 7, 8.37);
Box plainbox = new Box(); double vol;
vol = weightbox.volume();
System.out.println("Volume of weightbox is " + vol);
System.out.println("Weight of weightbox is " + weightbox.weight);
System.out.println();
// assign BoxWeight reference to Box reference
plainbox = weightbox;
vol = plainbox.volume(); // OK, volume() defined in Box
System.out.println("Volume of plainbox is " + vol);
/* The following statement is invalid because plainbox does not define a weight member. */
// System.out.println("Weight of plainbox is " + plainbox.weight);
}
}

這里,weightbox 是BoxWeight 對象的一個引用,plainbox 是Box對象的一個引用。既然BoxWeight 是Box的一個子類,允許用一個weightbox 對象的引用給plainbox 賦值。

當一個子類對象的引用被賦給一個超類引用變數時,你只能訪問超類定義的對象的那一部分。這是為什麼plainbox 不能訪問weight 的原因,甚至是它引用了一個BoxWeight 對象也不行。仔細想一想,這是有道理的,因為超類不知道子類增加的屬性。這就是本程序中的最後一行被注釋掉的原因。Box的引用訪問weight 域是不可能的,因為它沒有定義。

❻ java的繼承

繼承破壞了封裝性,換句話說,子類依賴於父類的實現細節。 需要進一步說明,這與方法調用不同,方法調用也依賴被調用的方法,但是並不依賴細節,也就是說,只要方法整體實現沒有問題,方法調用就沒有問題,但是繼承很容易改變父類實現的細節(所以父類中能寫成final盡量寫成final),即使父類整體沒有問題,也有可能因為子類細節實現不當,而破壞父類的約束。這使得繼承具有脆弱性。 或者說,繼承讓子類很容易破壞影響父類的約束,父類約束的實現依賴子類的實現,並且,父類在他的後續版本中可以獲得新的方法,而這個會對子類造成影響,雖然子類的代碼沒有變化,當初子類實現的時候也不知道未來的變化,顯得很無辜。 Here, overriding is the root of evil..... 繼承使得到的API限制在原始想重用的實現上,導致可變更性變差,限制了你的類的性能。 繼承使得有了更多機會來暴露了類內部的細節,比如Properties p的例子,p.getProperty(String key),p.get(String key)。 繼承很容易傳播現有API內部的缺陷

http://www.dewen.org/q/6210

熱點內容
2019速騰買什麼配置好 發布:2025-01-11 01:35:07 瀏覽:828
博越存儲異常 發布:2025-01-11 01:24:31 瀏覽:917
我的世界還原中國伺服器版圖 發布:2025-01-11 01:18:45 瀏覽:383
pythonopenasfile 發布:2025-01-11 01:17:06 瀏覽:972
hbasejavaapi 發布:2025-01-11 01:11:09 瀏覽:746
我的世界pe版飢餓伺服器 發布:2025-01-11 01:09:39 瀏覽:485
異構資料庫數據同步 發布:2025-01-11 01:09:04 瀏覽:957
c語言三角波 發布:2025-01-11 01:02:11 瀏覽:78
php正則轉義 發布:2025-01-11 01:00:03 瀏覽:691
手拉的箱包上的密碼鎖一般是多少 發布:2025-01-11 00:59:55 瀏覽:8