黑馬程序員-------繼承總結

------- android培訓java培訓、期待與您交流! ----------


一.代碼塊:
   1.代碼塊的種類:
1).局部代碼塊:定義在某個方法中;
2).成員(構造)代碼塊:定義在類體中,每次實例化此類對象時被調用;
3).靜態代碼塊:定義在類體中,第一次實例化此類對象時被調用;
   2.代碼塊的作用:
1).跟構造方法一樣,用於做一些初始化的操作;
   3.如果同時存在靜態代碼塊、構造代碼塊、構造方法:
靜態代碼塊--->構造代碼塊--->構造方法;

class Fu{
	{
		System.out.println("構造代碼塊");
	}
	Fu(){
		System.out.println("構造方法");
	}
	static {
		System.out.println("靜態構造方法");
	}
}

public class Demo {
	public static void main(String[] args) {
		Fu f=new Fu();
	}
}
結果爲

靜態構造方法
構造代碼塊
構造方法


二.繼承:
   1.可以將一些相同性質的類中,相同的成員,提取出來,形成一個"概念性的父類"
     子類繼承了父類,就擁有了父類允許繼承的成員。
   2.使用關鍵字:extends
   3.繼承的特點:
1).只能單繼承;
2).允許多級繼承;
   4.注意事項:
1).父類中的私有成員不能被繼承;
2).構造方法不能被繼承;
3).不要爲了部分功能而去繼承;
   5.具有 is a 的關係時,可以使用繼承;
   6.this和super的區別:
1.this指向的本類的對象,可以訪問成員變量、成員方法、構造方法
2.super指向的父類的對象,可以訪問父類的變量、成員方法、構造方法;

class Fu{
	int x=10;
	void show(){
	}
}
class Zi extends Fu{
	int x=20;
	void show(){
		System.out.println(this.x);
		System.out.println(super.x);
	}
}

public class Demo {
	public static void main(String[] args) {
		Zi z=new Zi();
		z.show();
	}
}
如上,this.x就是子類的20,super.x就是父類的10


   7.繼承中構造方法的注意事項:
1.如果父類中有"無參"構造方法時,實例化子類時,JVM會自動調用父類中"無參構造方法"
2.如果父類中沒有"無參構造方法"時,子類的構造方法中,必須顯示的使用super去調用父類中
          帶參的構造方法。
   8.類的實例化過程:
1.如果有父類,先處理父類:
2.如果有靜態成員,先處理靜態的;
3.總體過程:
父類靜態成員
子類靜態成員
父類普通成員變量
父類的構造代碼塊
父類的構造方法
子類的普通成員變量
子類的構造代碼塊
子類的構造方法

class Fu {
                static {
                        System.out.println("靜態代碼塊Fu");
                }

                {
                        System.out.println("構造代碼塊Fu");
                }

                public Fu() {
                        System.out.println("構造方法Fu");
                }
        }

        class Zi extends Fu {
                static {
                        System.out.println("靜態代碼塊Zi");
                }

                {
                        System.out.println("構造代碼塊Zi");
                }

                public Zi() {
                        System.out.println("構造方法Zi");
                }
        }
class Demo
{
        public static void main(String[] args){
                new Zi();
        }
}

執行結果爲

靜態代碼塊Fu
靜態代碼塊Zi
構造代碼塊Fu
構造方法Fu
構造代碼塊Zi
構造方法Zi



   9.子類成員覆蓋父類成員:
1.子類可以定義和父類相同的"成員變量":
this.num:本類的
super.num:父類的
2.子類可以定義和父類相同的方法:叫:方法重寫
返回值類型、方法名、形參列表都完全相同;
子類擁有跟父類相同,或更寬的訪問修飾符;
3.子類可以覆蓋父類的靜態方法;
三.fianl關鍵字:
1.類:表示"最終類",不能被繼承;
2.成員變量、局部變量:表示擁有最終的值,其值不能被更改;
3.成員方法:表示最終的方法,不能被重寫;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章