為什麼需要強制轉換型別?
引用變數只能呼叫它編譯型別的方法,不能呼叫它執行型別的方法,所以就需要型別的強制轉換。
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型別 編寫程式時,如果想呼叫執行時型別的方法,只能進行強制型別轉換。不然通不過...