1. JAVA當中對象的上轉型問題
向上轉型,是指父類引用執行子類對象,上述示例中
sp=sc;sp是父類引用,sc是子類對象,因為 子類 is a 父類的關系,因此可以直接賦值
但向上轉型有特殊之處,就是轉型後的父類對象可以訪問父類所有非私有成員和子類重寫父類後的成員,但無法訪問子類的特有成員
因此 sp.out()可以,因為調用的是父類公共成員
sc.out(3)也可以,因為sc是子類引用指向子類對象,可以訪問自己的成員
sp.out(2)卻不可以,因為帶參數的out方法是子類特有成員,父類中沒有,因此無法使用父類引用調用子類特有成員
2. 向上轉型的對象他是屬於父類的對象還是子類的對象大神們幫幫忙
向上轉型是字子類對象當作父類來用,本質生說它是子類的對象,但是是父類的引用。所以只能看見父類的成員變數,而子類自己的成員變數就看不到。如果必須訪問子類的成員變數,就要強制轉換。 方法就要看子類中是不是重寫了父類的方法,如果重寫了,而且是父類的引用指向子類對象,那麼在運行期間,new的哪個對象就執行哪個對象的方法。 方法和成員變數不同就是因為java的核心機制,多態。希望以上回答對你有幫助
記得採納啊
3. java中 上轉型對象 如何訪問操作被子類隱藏的父類方法和變數
向上轉型是指父類引用指向子類對象,子類提升為了父類,所以被隱藏的是子類特有方法才對,父類方法如何被子類隱藏?
子類覆蓋了父類方法倒是會發生,如果父類的方法被覆寫了,調用父類的方法,用super,如果方法沒有被覆寫直接用就可以;如果父類要訪問子類特有方法再向下轉型就行了
4. java中的上轉型對象
題主可能誤會了其中的變數關系
上轉型對象默認是使用父類中的成員和方法
只有當父類中的被重寫後則使用子類中的成員變數或方法
如
A:
成員有int n和double m;
方法有f():列印子類繼承
B:
成員有double n和double m;
B繼承A
此時主類中申請一個上轉型對象
A a = new B()
a.m是原父類中的
a.f()是原父類中的
而a.n由於被子類改寫了
但是上轉型對象依然可以操作被隱藏的成員
a.n還是自身原來的int類型的 可以賦個int值
附加:如果在B的類體中嵌一個新的方法cry()或者fly()時,上轉型對象a是無法調用的,是哭不出來也飛不出來的
我們可以看出
1.上轉型變數是有子類new出來的 父類引用的
2.它可以繼續操作父類中的成員,即使它被子類重寫過
3.它不可以操作子類新增的方法
總結就是上轉型變數是以A為主體的
該繼承的還是繼承
該有的成員變數被重寫還是繼續使用自己原本的成員
唯一的就是不能操作子類里新增的量了
5. JAVA里什麼是上轉型對象
class Human{
public void drink(){System.out.println("Human");}
}
class YongMan extends Human{
public void drink(){System.out.println("YongMan");}}
}
public class Test{
public static void main(String arge[]){
Human e2=new YongMan();
e2.drink();
}
}
以上面這個程序為例子
Human e2=new YongMan();
這句其實是指父類對象e2是子類YongMan對象的上轉型對象
上轉型對象不能操作子類新增的成員變數(失掉了這部分屬性);不能使用子類新增的方法(失掉了一些功能)。
上轉型對象可以操作子類繼承或者隱藏的成員變數,也可以使用子類繼承的或者重寫的方法。上轉型對象操作子類繼承或重寫的方法,其作用等價於子類對象去調用這些方法。因此,如果子類重寫了父類的某個方法,則當對象的上轉型對象調用這個方法時一定是調用了這個重寫的方法
上面的YongMan 類中的drink()方法 重寫了父類的方法
所以最後的輸出結果是YongMan