物件導向 物件的轉型

2022-08-28 21:36:32 字數 2968 閱讀 4278

為什麼需要強制轉換型別?

引用變數只能呼叫它編譯型別的方法,不能呼叫它執行型別的方法,所以就需要型別的強制轉換。

1、乙個父類的引用型別變數可以指向其子類的物件

2、乙個父類的引用不可以訪問其子類物件的新增加的成員(屬性和方法)

3、可以使用引用變數instanceof(類名 來判斷引用變數所指向的物件是否屬於該類的或該類的子類)

4、子類的物件可以當做父類的物件使用--向上轉型、 反之--向下轉型

class animal{

public string name;

animal(string name){

this.name=name;

class cat extends animal{

public string eyescolor;

cat(string n,string c){

super(n);

eyescolor=c;

class dog extends animal{

public string furcolor;

dog(string n,string c){

super(n);

furcolor=c;

class test{

public static void main(stringargs){

animal a=new animal("name");

dog d=new dog("wangwang","black");

a =new dog("bigyellow","yellow");向下轉型

system.out.println(a.furcolor);//乙個父類的引用不能訪問其子類物件新增加的成員(屬性和方法)

//可以使用引用變數 類名來判斷引用變數是否指向該類或該類子類

system.out.println(a instanceof animal);

system.out.println(a instanceof dog);

if(a instanceof cat){

cat d1=(cat)a;

修飾變數:

被他修飾的變數不可改變。一旦賦了初值,就不能被重新賦值。

修飾成員變數:

修飾區域性變數:

//final修飾區域性變數的初始化

finalintgg = 20;

finalinthh;

hh=50;

final修飾的是引用變數時,只是引用值不能改變。對應的物件內部的屬性仍然可變。

finaldog dog =newdog();

// dog = new dog();   //報錯

!dog.age = 77;   //仍然可以修改

dog指向物件的屬性

常量的命名:

一般不用駝峰寫法,而是全部大寫加下劃線分割。比如:

final int dog_age=18;

publicclasstest {

staticfinalinta;

//常量要進行初始化,如果採用系統預設值的話,就失去了存在的意義。

//因此必須顯式初始化,可以直接賦值或初始化塊中或建構函式中。

//但只能賦值一次!

finalintb;

finalintc;

finalintd=19;

static{

a=3;

c=50;

publictest() {

//todoauto-generated constructor stub

b=20;

publicstaticvoidmain(string args) {

//final修飾區域性變數的初始化

finalintgg = 20;

finalinthh;

hh=50;  

//final修飾引用變數時,只是引用值不能改變。對應的物件內部的屬性仍然可變。

finaldog dog =newdog();

// dog = new dog();   //報錯

!dog.age = 77;   //仍然可以修改

dog指向物件的屬性

修飾方法:

該方法不可被子類重寫。但是可以被過載!

在上面animal

、dog

、cat

中,animal

中的shout

方法中增加

final

。則dog

和cat

中shout

方法不能存在了!

如果父類方法是private final

,那麼對子類完全不可見;子類也就可以定義自己的同名的方法。這個不是重寫了,而是子類自己新定義的方法。

修飾類:

修飾的類不能有子類,不能被繼承。比如:math

、string

物件的上轉型物件

假設animal類是tiger類的父類,當用子類建立乙個物件,並把這個物件的引用放到父類的物件中時,比如 animal a a new tiger 或 animal a tiger b new tiger a b 這時,稱物件a是物件b的上轉型物件 好比說 老虎是動物 物件的上轉型物件的實體是子類負...

物件的轉型

1.向上轉型 什麼是向上轉型?向上轉型 將子類的物件賦值給父類的引用 乙個引用能夠呼叫哪些成員 變數和函式 取決於這個引用的型別是怎麼定義的 乙個引用呼叫的是哪乙個方法,取決於這個引用所指向的物件 向上轉型只要兩個類是繼承關係就一定會成功 2.向下轉型 什麼是向下轉型?向下轉型 將父類的物件賦值給子...

物件的轉型

父類引用指向子類物件,我們稱這個過程為向上轉型,屬於自動型別轉換。object obj newstring 小小吳 向上可以自動轉型 obj.charat 0 無法呼叫。編譯器認為obj是object型別而不是string型別 編寫程式時,如果想呼叫執行時型別的方法,只能進行強制型別轉換。不然通不過...