------- 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.成員方法:表示最終的方法,不能被重寫;