第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Java中,class B extends A.?

Java中,class B extends A.?

SMILET 2019-05-28 10:06:26
Java中,class B extends A.
查看完整描述

4 回答

?
紫衣仙女

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊

class B extends A
繼承過后通常會(huì)定義一些父類沒有的成員或者方法。
A a = new B();
這樣是可以的,上傳。
a是一個(gè)父類對(duì)象的實(shí)例,因而不能訪問子類定義的新成員或方法。
==========================================================
假如這樣定義:
class A{
int i;
void f(){}
}
class B extends A{
int j;
void f(){}//重寫
void g(){}
}
然后:
B b = new B();
b就是子類對(duì)象的實(shí)例,不僅能夠訪問自己的屬性和方法,也能夠訪問父類的屬性和方法。諸如b.i,b.j,b.f(),b.g()都是合法的。此時(shí)b.f()是訪問的B中的f()
A a = new B();
a雖然是用的B的構(gòu)造函數(shù),但經(jīng)過upcast,成為父類對(duì)象的實(shí)例,不能訪問子類的屬性和方法。a.i,a.f()是合法的,而a.j,a.g()非法。此時(shí)訪問a.f()是訪問A中的f()

==========================================================
caiqiupeng的問題,樓主也可以參考一下。
A a = new B(); 這條語句,實(shí)際上有三個(gè)過程:
(1) A a;
將a聲明為父類對(duì)象,只是一個(gè)引用,未分配空間
(2) B temp = new B();
通過B類的構(gòu)造函數(shù)建立了一個(gè)B類對(duì)象的實(shí)例,也就是初始化
(3) a = (A)temp;
將子類對(duì)象temp轉(zhuǎn)換未父類對(duì)象并賦給a,這就是上傳(upcast),是安全的。
經(jīng)過以上3個(gè)過程,a就徹底成為了一個(gè)A類的實(shí)例。

子類往往比父類有更多的屬性和方法,上傳只是舍棄,是安全的;而下傳(downcast)有時(shí)會(huì)增加,通常是不安全的。
===========================================================
糾正一下自己的錯(cuò)誤:
upcast過后,a.f()對(duì)應(yīng)的應(yīng)該是B類的方法f()
調(diào)用構(gòu)造函數(shù)建立實(shí)例過后,對(duì)應(yīng)方法的入口已經(jīng)確定了。
如此以來,a雖被上傳為A類,但其中重寫的方法f()仍然是B的方法f()。也就是說,每個(gè)對(duì)象知道自己應(yīng)該調(diào)用哪個(gè)方法。
A a1 = new B();
A a2 = new C();
a1,a2兩個(gè)雖然都是A類對(duì)象,但各自的f()不同。這正是1樓說的多態(tài)性的體現(xiàn)。

這類問題在《Java編程思想》上都講的很清楚,偶很久沒看,糊涂了,不好意思。



查看完整回答
反對(duì) 回復(fù) 2019-06-01
?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊

多態(tài)性 子類B就可以調(diào)用父類A啊的構(gòu)造函數(shù)啊
但 父類A怎么可以調(diào)用子類B的構(gòu)造函數(shù)??? 應(yīng)該不可以吧

:「a是一個(gè)父類對(duì)象的實(shí)例,因而不能訪問子類定義的新成員或方法?!?br/>那么A a = new B(); 怎么可以父類調(diào)用子類的構(gòu)造函數(shù)呢?

查看完整回答
反對(duì) 回復(fù) 2019-06-01
?
FFIVE

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

實(shí)際上你的類的定義是class a<T> extends d{}
表示類a繼承類d。
而<>里面的表示的是泛型,
這里泛型T寫成了:b extends c 表示內(nèi)部的參數(shù)定義是類b,而b繼承于c

查看完整回答
反對(duì) 回復(fù) 2019-06-01
?
交互式愛情

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊

這是泛型啊,意思是a的泛型定義來自派生于c類的子類(包含c類),一般也不會(huì)指定準(zhǔn)確的b類型

比如
class A<T extends B>{}

class B{}

class C extends B{}

class D{}

我們創(chuàng)建A時(shí)可以定義
A<B> a = new A();
A<C> a = new A();
但不能定義
A<D> a = new A();

查看完整回答
反對(duì) 回復(fù) 2019-06-01
  • 4 回答
  • 0 關(guān)注
  • 2755 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)