1. 程式人生 > >Java 介面 多型概念 知識

Java 介面 多型概念 知識

一、介面
     概念:可以理解為時一個特殊的抽象類,當抽象類中的方法都是抽象的,那麼該類可以通過介面的形式來定義
     class:用於定義類
     interface 用於定義介面
    語法:訪問許可權修飾符  interface  介面名{
            //全域性常量
   //抽象方法
            }
   介面中成員修飾符是固定的
      成員變數:public static final
      成員函式:public abstract
     如果不寫 系統會預設加上public static final,public abstract,建議寫上
           implements :實現
  類與介面的關係:實現
  繼承:extends
特點:
1.介面是特殊的抽象類,特殊在  介面中所有子類都是常量,方法都是抽象的
2.介面允許多實現,彌補單繼承,因為介面中的抽象類沒有方法體 實現誰都行 不衝突
3.Java中允許單繼承  提高了程式的擴充套件性
4.介面與介面之間 也有關係  介面繼承可以繼承多個介面  因為是抽象的


介面可以用來多實現
類與介面之間是實現關係  而且類繼承一個類同時 可以實現多個介面
介面與介面之間可以有多繼承關係

介面的好處
  它是對外暴露的規則  提高了程式的擴充套件性
  封裝  保證了程式的安全性

  介面的本質
      從介面設計的角度而言  介面中定義了一套規則和標準
二、多型:
例項程式碼(介面與多型): 
class  Demo4

public static void main(String[] args) 
{
Compute x=new compute1();
        function(x);
Compute s=new compute2();
        function(s);
Compute y=new compute3();
        function(y);
Compute w=new compute4();
        function(w);


}
public static void function(Compute  c){
System.out.println(c.computer(10,5));


}
}


interface   Compute
{
public  abstract int computer(int n,int m); 



class compute1 implements Compute
{
  int n;
  int m;
  public void Sum(int n,int m){
      this.n=n;
 this.m=m;
  }
  public  int computer(int n,int m){
      return n+m;
  }
}
class compute2 implements Compute
{
  int n;
  int m;
  public  void jian(int n,int m){
      this.n=n;
 this.m=m;
  }
 public  int computer(int n,int m){
    return n*m;
  }
}
class compute3 implements Compute
{
  int n;
  int m;
  public void cheng(int n,int m){
      this.n=n;
 this.m=m;
  }
 public  int computer(int n,int m){
   return n-m;
  }
}
class compute4 implements Compute
{
int n;
  int m;
  public  void chu(int n,int m){
      this.n=n;
 this.m=m;
  }
 public  int computer(int n,int m){
  return n/m;
  }
}
    定義:某一類事物的多種存在形式
    多型的前提:
       1.父類引用指向子類物件
       2.必須是類與類之間有關係 要麼繼承 要麼實現
       3.子類存在重寫
       優點:提高程式的擴充套件性  
       缺點:但是隻能使用父類的引用訪問父類中的成員

物件的向上轉型與向下轉型
       Compute x=new compute1();   向上
       compute1  y=(compute1 )x;     向下
      注:多型轉的是父類引用  指向了自己的子類物件是  該應用可以被提升  也可以被強轉
          多型至始至終  都是子類物件在做著變化

instanceof   if(an  instanceof  cat){}   用來執行時指出物件是否是特定類的一個例項;
如果是屬於型別的例項 就返回TRUE  反之則返回false
instanceof 不常用
      1.當子類有限時
      2.當傳輸的型別需要進行其他操作

在多型狀態下:對成員方法的呼叫  編譯看左邊(父類)  執行看右邊(子類)
              對成員變數的呼叫  編譯看左邊   執行看左邊
              靜態成員         編譯看左邊(父類) 執行看左邊(父類)