1. 程式人生 > >抽象類和封裝類

抽象類和封裝類

抽象類(abstract class)

基本概念 包含抽象方法的類叫做抽象類。 抽象方法被abstract修飾,類也要由abstract修飾。 抽象類中可以有抽象方法,也可以有非抽象方法。 抽象類不能建立例項物件 不能new抽象類。 抽象類中可以沒有抽象方法,但是抽象方法一定在抽象類中。因為抽象類不能被例項化,抽象方法不能被實現。

抽象類和普通類的區別:

  • 抽象類不能被例項化。可以定義抽象型別的變數,但值必須為null,或者是其派生類的非抽象類的例項的引用
  • 抽象類被abstract所修飾
  • 允許抽象類包含抽象成員

抽象方法(abstract method)

基本概念 在抽象類內部不給予實現。當有一個類繼承了當前的抽象類後,需要實現。 抽象方法必須是public/protected/或者不加訪問修飾限定符(預設為public),不能被private修飾

抽象類的派生類:

  1. 如果是普通類必須實現抽象類的抽象方法
  2. 如果是抽象類,可以不實現基類的派生方法
abstract class Animal {//抽象類
    //抽象方法
    public abstract void bark();
    //非抽象方法
    public void fun() {
        System.out.println("abstract Animal fun()");
    }
}
//抽象類派生的普通類
class Dog extends Animal {

    public Dog() {
        System.out.println("Dog() init"
); } public void bark() { System.out.println("Dog:wangwang"); }//重寫抽象類的抽象方法,註釋掉會出錯 } public class Test { public static void main(String[] args) { //Animal animal = new Animal(); erro,抽象類無法進行例項化 Dog dog = new Dog(); dog.bark(); } } //輸出結果 Dog
() init Dog:wangwang

密封類(final class)

當一個類被final所修飾的時候稱為密封類。 作用:防止有意的派生。

注意:

  • 密封類不能用作基類,就算派生類被final所修飾也不行。
  • 密封類也不能是抽象類

密封方法(final method)

當例項方法宣告包含final修飾符時,稱該方法為密封方法 密封方法不能被重寫。

final class Person {//密封類
    private String name;
    private int age;
    public Person() {
        System.out.println("Person init()");
    }

class Student extends Person {//編譯報錯,不能從final類繼承
}