抽象類與接口的實際應用

3.7、抽象類與接口的實際應用{百分百的重點}

開發原則:

       在類的開發之中,一個類不會去繼承一個已經實現好的類,只會繼承抽象類或實現接口。
       即:以下的代碼是不應該出現在程序之中的:
class A{}

class B extends A{}

3.7.1、抽象類實際應用

       抽象類本身是不能直接實例化的。因爲其本身包含抽象方法。
       但是抽象類的時候符合繼承關係,只要有繼承關係,則肯定會存在對象的向上或向下轉型的問題,一但對象發生了向上轉型,則肯定一切的方法以被子類覆寫過的方法爲準。
abstract class A{

         public abstract void fun() ;

};

class B extends A{

         public void fun(){

                   System.out.println("Hello World!!!") ;

         }

};

public class Demo32{

         public static void main(String args[]){

                   A a = new B() ;

                   a.fun() ;

         }

};

       從以上代碼之中可以發現,抽象類可以實例化,但是需要通過對象的多態性,通過子類進行實例化操作。
       那麼能用抽象類做什麼呢?
違紀卡

姓名:

李興華
班級:

小班1006

時間:

1990-1-2

事由:

上課吃飯

       以後要是取數據的時候,直接從用戶填寫的地方取,因爲上面規定出了是一個模板。
       實際上抽象類就是提供了此種類型的代碼結構。
例如:人分爲工人和學生,工人和學生都有說話方法,但是說話的內容要由工人或學生決定,所以此時就可以使用抽象類完成此種功能。
abstract class Person{

         private String name ;

         private int age ;

         public Person(String name,int age){

                   this.name = name ;

                   this.age = age ;

         }

         public void say(){

                   System.out.println(this.getContent()) ;

         }

         public String getName(){

                   return this.name ;

         }

         public int getAge(){

                   return this.age ;

         }

         public abstract String getContent() ;

};

class Worker extends Person{

         private float salary ;

         public Worker(String name,int age,float salary){

                   super(name,age) ;

                   this.salary = salary ;

         }

         public String getContent(){

                   return "工人說 --> 姓名:"+this.getName()+",年齡:"+this.getAge()+",工資:"+this.salary ;

         }

};

class Student extends Person{

         private float score ;

         public Student(String name,int age,float score){

                   super(name,age) ;

                   this.score = score ;

         }

         public String getContent(){

                   return "學生說 --> 姓名:"+this.getName()+",年齡:"+this.getAge()+",成績:"+this.score ;

         }

};

public class Demo33{

         public static void main(String args[]){

                   Person p = null ;

                   // p = new Student("張三",20,99.0f) ;

                   p = new Worker("張三",20,999.0f) ;

                   p.say() ;

         }

};

練習:

       只要是學生進入到班級裏來,就一定要喊報告。
       只要是老師進入到班級裏來,也一定要說同學們好。
abstract class Person{

         private String name ;

         public Person(String name){

                   this.name = name ;

         }

         public void call(){

                   System.out.println(this.getContent()) ;

         }

         public String getName(){

                   return this.name ;

         }

         public abstract String getContent() ;

};

class Teacher extends Person{

         public Teacher(String name){

                   super(name) ;

         }

         public String getContent(){

                   return "同學們好,姓名:"+this.getName() ;

         }

};

class Student extends Person{

         public Student(String name){

                   super(name) ;

         }

         public String getContent(){

                   return "報告,姓名:"+this.getName() ;

         }

};

class Class_{

         public void comeIn(Person p){

                   p.call() ;

         }

};

public class Demo34{

         public static void main(String args[]){

                   Class_ c = new Class_() ;

                   c.comeIn(new Student("張三")) ;

                   c.comeIn(new Teacher("李四")) ;

         }

};

       以上的設計模式就稱爲模板設計。

3.7.2、接口的實際應用

總的使用原則:接口的作用就是將方法名稱暴露給遠程用戶。
       接口與抽象類一樣,如果要想正確的時候也需要通過子類進行實例化操作。
如下代碼所示:
interface A{

         public void print() ;

}

class B implements A{

         public void print(){

                   System.out.println("Hello World!!!") ;

         }

};

public class Demo35{

         public static void main(String args[]){

                   A a = new B() ;

                   a.print() ;

         }

};

接口的實際應用:定義標準。
       USB接口爲例:
interface USB{

         public void start() ;

         public void stop() ;

}

class MainBoard{

         public void plugIn(USB usb){

                   usb.start() ;

                   usb.stop() ;

         }

};

class Mp3 implements USB{

         public void start(){

                   System.out.println("MP3開始工作。") ;

         }

         public void stop(){

                   System.out.println("MP3停止工作。") ;

         }

};

class Print implements USB{

         public void start(){

                   System.out.println("打印機開始工作。") ;

         }

         public void stop(){

                   System.out.println("打印機停止工作。") ;

         }

};

public class Demo36{

         public static void main(String args[]){

                   MainBoard mb = new MainBoard() ;

                   mb.plugIn(new Mp3()) ;

                   mb.plugIn(new Print()) ;

         }

};

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