java學習第六天

 

抽象類
一、抽象使用abstract 關鍵字修飾
二、沒法生成具體的實例
三、能夠定義屬性(普通的,靜態,其餘)
四、能夠定義方法(普通的,靜態,抽象的)
五、有構造函數,可是不能本身用,只能被子類實現
六、能夠繼承其餘的類,可是隻能單繼承
七、抽象類重點關注的是類的抽象java

 

接口:
一、特殊的抽象類,裏面都是抽象方法, jdk1.8以後可使用虛方法
二、只能被普通類實現
三、能夠被其餘接口繼承,也能夠繼承其餘接口,且是多繼承
四、接口關注的是功能(方法的抽象)
五、接口的屬性 只能用 public  static  final修飾的常量數據庫

 

 

 

 

 

/*
 * 抽象類:
 * 一、使用 abstract 關鍵字進行修飾的類
 * 二、不能被實例化
 * 三、存在構造方法,由於子類須要實例化父類
 * 四、存在普通方法, 能夠存在靜態
 * 五、
 * 屬性 
 *  跟普通類用法如出一轍
 * 
 * 方法   -- 構造    普通   靜態  
 *  //abstract returnType abstractMethod([paramlist])
 *
 * 一、抽象方法
 *  1>使用 abstract 修飾的方法
 *  2>方法沒有方法體  就是沒有大括號
 *  3>子類必須重寫父類中的抽象方法,若是不重寫,那麼子類必須聲明爲抽象類
 *   若是子類沒有所有重寫父類抽象方法,那麼子類也必須是抽象類
 *    得出的結論:有抽象方法的類,這個類必須是抽象類,反之,抽象類,不必定有抽象方法。
 *
 * abstract  final
 *  fianl 修飾方法 /類是最終方法/類,不能被重寫或繼承,
 *  因此 final 不能跟abstract 同時出現
 *
 * abstract static
 *  static 修飾的方法是不能被子類重寫的,因此static 跟 abstract 是不能同時出現的
 *
 * abstract 能不能修飾 構造函數
 * abstract 修飾的方法必須得重寫,而構造函數不能被重寫,因此不能同時使用
 *
 *
 * 運用場景:抽象類  --- > 模板設計模式   ---> 數據庫操做
 *  子類繼承父類,要求必須實現某種功能,而實現的邏輯必須按照父類制定的格式
 *
 *
 *
 */
設計模式

//抽象類ide

public abstract class AbstraDemo {
 public String name;
 
 //能夠存在構造方法,由於子類須要實例化父類
 //Illegal modifier for the constructor in type AbstraDemo;
 //only public, protected & private are permitted
 AbstraDemo(){
  
 }
 
 //普通方法
 public void method(){
  
 }
函數

 //抽象方法
 public abstract void absMethod();
 
 public abstract void absMethod2();
 
 
 
 
 
 
 
 
 public static void main(String[] args) {
  //Cannot instantiate the type AbstraDemo
  //實例化,不能被實例化
  //AbstraDemo sAbstraDemo = new  AbstraDemo();
  
  //不叫實例化,匿名內部類
  /**
   * 等價於
   * Sub  extends AbstraDemo
   * sAbstraDemo = new Sub();
   */
  //AbstraDemo sAbstraDemo = new  AbstraDemo() {};
  
 }
}
測試

 

 

子類spa


public class GSubAbstra extends SubAbstra{設計

 @Override
 public void absMethod() {
  
 }
}對象

 

子類繼承

public abstract class SubAbstra extends AbstraDemo{

 @Override
 public void absMethod2() {
  
 }
}

 

---------------------------------------------------------------------

接口

//接口
//抽象       類中的公共的功能
//從本質上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,
//而沒有變量和方法的實現。
//接口是一個特殊的抽象類,只有抽象方法的抽象類  把 class  ---》 interface
//一、接口是類,它的修飾符跟類同樣,public 跟默認


接口Fly

 public interface Fly {
 //常量定義
 //不能修飾 private   protected  由於默認 public  static final
 //接口中定義的屬性默認的是public 即便不寫修飾符,依然是public
 //接口中定義的屬性默認的是static  即便不寫static修飾符,依然是static
 //接口中定義的屬性默認的是final 即便不寫final修飾符,依然是final
 int intField= 1;
 //等價於:public  static final int intField= 1;
 
 
 //方法的定義
 //Illegal modifier for the interface method fly; 
 //only public, abstract, default, static and strictfp are permitted
 //jdk 1.8 之後的新特性  default   strictfp  static
 //接口中定義的方法默認的是public 即便不寫修飾符,依然是public
 //接口中定義的方法默認的是abstract 即便不寫修飾符,依然是abstract
 //接口中定義的方法不是靜態的
 public void fly();
 public void down();
 
 
 
}


接口 Turn

public interface Turn {
 public void turn();
}

 

 

子類
     子類經過 implements 實現接口

public class Kite implements Fly{

 @Override
 public void fly() {
  System.out.println("風箏起風了...");
 }

 @Override
 public void down() {
  System.out.println("風箏短線了...");
 }

}

 

子類

public class Plane implements Fly{
 @Override
 public void fly() {
  System.out.println("飛機起飛了....");
 }

 @Override
 public void down() {
  System.out.println("飛機墜毀了....");
 }
}

 

 

//具體類實現了接口,必須得重寫接口中抽象方法
//具體的類,能夠實現多個接口,使用 , 分開
//類是單繼承,接口是多繼承
 //一、 類只有一個直接父類
 //二、 類能夠實現多個接口
 //三、接口能夠實現多繼承


接口 FlyAndTurn

public interface  FlyAndTurn extends Fly, Turn{

}


子類
   
     public class Plane2 implements FlyAndTurn{

 @Override
 public void fly() {
 }

 @Override
 public void down() {
 }

 @Override
 public void turn() {
 }

}


------------------------------------------------------------------------
接口例子1

接口 Runner

public interface Runner {
 public void start();
 public void run();
 public void stop();
}


子類   Person

    public class Person implements Runner {

 @Override
 public void start() {
  System.out.println("Person.start()");
 }

 @Override
 public void run() {
  System.out.println("Person.run()");
 }

 @Override
 public void stop() {
  System.out.println("Person.stop()");
 }
}

 


子類   Car

    public class Car implements Runner {

 @Override
 public void start() {
  System.out.println("Car.start()");
 }

 @Override
 public void run() {
  System.out.println("Car.run()");
 }

 @Override
 public void stop() {
  System.out.println("Car.stop()");
 }
}

 


子類  Bird

    public class Bird implements Runner {

 @Override
 public void start() {
  System.out.println("Bird.start()");
 }

 @Override
 public void run() {
  System.out.println("Bird.run()");
 }

 @Override
 public void stop() {
  System.out.println("Bird.stop()");
 }

}


------------------------------------------------------
接口例子2

接口 interface

public interface Fly {
 void fly();
}

 

子類  Bird

public class Bird implements Fly{

 @Override
 public void fly() {
  System.out.println("Bird.fly()");
 }
}


子類   Plane

public class Plane implements Fly{
 @Override
 public void fly() {
  System.out.println("Plane.fly()");
 }
}


普通類 Sky

public class Sky {
 
 //接口的多態
 public void trace(Fly fly){
  if (fly instanceof Bird) {
  }
  fly.fly();
 }
 
}


測試類   Test

import com.qiangfei.demo1.Plan;

public class Test { public static void main(String[] args) {    //匿名內部類  /*Fly fly = new Fly() {   @Override   public void fly() {       }  };*/  //報錯:由於接口是抽象的,不能new 對象  //Fly fly = new Fly();    //向上轉型   -- 類比 類的繼承  Fly fly = new Bird();  //fly.fly();   //接口的多態表現形式    Plane  plane = new Plane();    Sky sky = new Sky();  sky.trace(fly);   //鳥飛過  sky.trace(plane);    //向下轉型  Bird bird = (Bird) fly;  bird.fly();  //java.lang.ClassCastException  plane = (Plane) fly;   }}

相關文章
相關標籤/搜索