1. 程式人生 > 其它 >修飾符及介面和內部類

修飾符及介面和內部類

java有3類修飾符:static finaly abstract

static

在類中,使用static修飾的成員變數,就是靜態變數,反之為非靜態變數。

final

  1. final修飾的類不能被繼承,沒有子類

    例如:我們是無法寫一個類去繼承String類,
    然後對String型別擴充套件的,因為API中已經被String類定義為final
    的了
    2. 用final修飾的方法可以被繼承,但是不能被子類的重寫。

    1. 用final修飾的變量表示常量,只能被賦一次值.其實使用final修飾的變數也就成了常量了,因為值不會再變
      了。

abstract

abstract修飾符可以用來修飾方法也可以修飾類
* 如果修飾方法,那麼該方法就是抽象方法;
* 如果修飾類,那麼該類就是抽象類。
* 抽象類和抽象方法的關係
* 抽象類中可以沒有抽象方法,但是有抽象方法的類一定要宣告為抽象類。
* 宣告類的同時,加上abstract修飾符就是抽象類
宣告方法的時候,加上abstract修飾符,並且去掉方法的大口號,同時結尾加上分號,該方法就是抽象方法

抽象類,不能使用new關鍵字來建立物件,它是用來讓子類繼承的。
抽象方法,只有方法的宣告,沒有方法的實現,它是用來讓子類實現的。
注:子類繼承抽象類後,需要實現抽象類中沒有實現的抽象方法,否則這個子類也要宣告為抽象類。

為什麼需要介面?介面和抽象類的區別

介面就是比“抽象類”還“抽象”的“抽象類”,可以更加規範的對子類進行約束。全面地專業地實現了:規範和具體實現的分離。
抽象類還提供某些具體實現,介面不提供任何實現,介面中所有方法都是抽象方法。介面是完全面
向規範的,規定了一批類具有的公共方法規範。
從介面的實現者角度看,介面定義了可以向外部提供的服務。
從介面的呼叫者角度看,介面定義了實現者能提供那些服務。
介面是兩個模組之間通訊的標準,通訊的規範。如果能把你要設計的系統之間模組之間的介面定義
好,就相當於完成了系統的設計大綱,剩下的就是添磚加瓦的具體實現了。大家在工作以後,做系
統時往往就是使用“面向介面”的思想來設計系統。

介面的本質

介面就是規範,定義的是一組規則,體現了現實世界中“如果你是…則必須能…”的思想。如果你是天
使,則必須能飛。如果你是汽車,則必須能跑。如果你好人,則必須幹掉壞人;如果你是壞人,則
必須欺負好人。
介面的本質是契約,就像我們人間的法律一樣。制定好後大家都遵守。
OO的精髓,是對物件的抽象,最能體現這一點的就是介面。為什麼我們討論設計 模式都只針對具
備了抽象能力的語言(比如c++、java、c#等),就是因為設計模式所研究的,實際上就是如何合
理的去抽象。

介面和抽象類的區別

抽象類也是類,除了可以寫抽象方法以及不能直接new物件之外,其他的和普通類沒有什麼不一樣的。接
口已經另一種型別了,和類是有本質的區別的,所以不能用類的標準去衡量介面。
宣告類的關鍵字是class,宣告介面的關鍵字是interface。
抽象類是用來被繼承的,java中的類是單繼承。
類A繼承了抽象類B,那麼類A的物件就屬於B型別了,可以使用多型
一個父類的引用,可以指向這個父類的任意子類物件
注:繼承的關鍵字是extends
介面是用來被類實現的,java中的介面可以被多實現。
類A實現介面B、C、D、E..,那麼類A的物件就屬於B、C、D、E等型別了,可以使用多型
一個介面的引用,可以指向這個介面的任意實現類物件
注:實現的關鍵字是implements



介面中的方法都是抽象方法

   public interface Action{
public abstract void run();
//預設就是public abstract修飾的
void test();
public void go();
}
 ### 介面中的變數都是靜態常量
      注:可以直接使用介面名訪問其屬性。因為是public static修飾的
注:宣告的同時就必須賦值.(因為介面中不能編寫靜態程式碼塊)
public interface Action{
public static final String NAME = "tom";
//預設就是public static final修飾的
int AGE = 20;
}
main:
System.out.println(Action.NAME);
System.out.println(Action.AGE);

  ###  一個類可以實現多個介面
      public class Student implements A,B,C,D{
//Student需要實現介面A B C D中所有的抽象方法
//否則Student類就要宣告為抽象類,因為有抽象方法沒實現
}
main:
A s1 = new Student();
B s2 = new Student();
C s3 = new Student();
D s4 = new Student();
### 一個介面可以繼承多個父介面

###  介面的作用

介面的最主要的作用是達到統一訪問,就是在建立物件的時候用介面建立
【介面名】 【物件名】= new 【實現介面的類】
這樣你像用哪個類的物件就可以new哪個物件了,不需要改原來的程式碼。
假如我們兩個類中都有個function()的方法,如果我用介面,那樣我new a();就是用a的方法,new
b()就是用b的方法
這個就叫統一訪問,因為你實現這個介面的類的方法名相同,但是實現內容不同

 ###  內部類就是在一個類中在編寫另外一個類

  ### 內部類分為四種:
  1. 成員內部類
  2. 靜態內部類
  3. 區域性內部類
  4. 匿名內部類

後面介面,內部類詳細的情況請看狂神說的java講解 第6節面向物件

努力拼搏吧,不要害怕,不要去規劃,不要迷茫。但你一定要在路上一直的走下去,儘管可能停滯不前,但也要走。