1. 程式人生 > 其它 >面向物件-抽象類、介面、內部類

面向物件-抽象類、介面、內部類

1.抽象類

  java中一個沒有方法體的方法叫做抽象方法,而類中有抽象方法,該類只能定義為抽象類。

  a.抽象類特點

    1)抽象類和抽象方法都要用abstract關鍵字修飾。

      格式:

      abstract class 類名{}

      public abstract void 方法名();

    2)抽象類不一定有抽象方法,但抽象方法的類一定在抽象類。

    3)抽象類不能例項化

      抽象類多型,由具體的子類例項化。

    4)抽象類的子類

      要麼是抽象類要麼重寫抽象類中所有的抽象方法。

  b.老師教課案例

    老師案例 具體事物:19級老師,20級老師   共性:姓名,年齡,講課。

    abstract class Teacher{

      private String name;

      private int age;

      public Teacher(){}

      public Teacher(String name,int age){

        this.name = name;

        this.age = age;

      } 

      public void setName(String name){

        this.name = name;

      }

      public void setAge(int age){
        this.age = age;

      }

      public void getName(){

        return name;

      }

      public void getAge(){

        return age;

      }

      public abstract void teacher();

    }

    class NineteenTeacher extends Teacher{

      public NineteenTeacher(){}

      public NineteenTeacher(String name,int age){

       super(name,age);    

      }

      @override

      public void teacher(){

        System.out.println("這是19級老師教學語文。")

      }

    }

    class TwentyTeacher extends Teacher{

      public TwentyTeacher(){}

      public TwentyTeacher(String name,int age){

        super(name,age)    

      }

      @override

      public void teacher(){

        System.out.println("這是20級老師教學英語。")

      }

    }

  public class Test{   

    public static void main(String[] args){

      Teacher t1 = new NineteenTeacher(name:"小王",age:18);

      t1.teacher();

      Teacher t2 = new TwentyTeacher(name:"小劉",age:19);

      t2.teacher();

    }

  }

2.介面

  為了體現事物功能的擴充套件性,Java中就提供了介面來定義這些額外功能,並不給出具體實現。

  a.介面特點

    1)介面用關鍵字interface表示   

      格式:

      interface 介面名 {}

    2)類實現介面用implements表示   

      格式:

      class 類名 implements 介面名 {}

    3)介面不能例項化 

       按照多型的方式,由具體的子類例項化。其實這也是多型的一種,介面多型。

     4)介面的子類

      要麼是抽象類 要麼重寫介面中的所有抽象方法。

    注意:成員變數只能是常量切預設修飾符 public static final

3.引用資料型別的資料引數和返回值。

    a.資料引數

    類:當類作為方法形式引數的時候,實際上需要的是該類的物件。

    class Teacher{

      public void show(){

        System.out.println("我是老師。");

      }

    }

    class TeacherTest{

      public void fun(Teacher teacher){

        teacher.show();

      }

    }

    class Test2{   

      public static void main(String[] args){

        TeacherTest t3 = new TeacherTest();

        Teacher a = new Teacher();

        t3.show(a);

      }

    }

    抽象類:實際上需要的是該抽象類的子類的物件。

    介面:實際上需要的是該介面具體實現的類。

    b.返回值

    類:實際上需要返回一個該類的物件。

    class Student{

      public void show(){

        System.out.println("我是學生。");

      }

    }

    class StudentTest{

      public Student show2(){

        return new Student();

      }

    }

    class Test{

      public static void main(String[] args){

        StudentTest s1 =  new StudentTest();

        Student s2 =  s1.show2();

        s2.show();

      }

    }

    抽象類:返回的是一個該抽象類的一個具體子類的物件。

    介面:返回的是一個該介面的一個具體實現的類的物件。