抽象類和封裝類
阿新 • • 發佈:2018-12-19
抽象類(abstract class)
基本概念 包含抽象方法的類叫做抽象類。 抽象方法被abstract修飾,類也要由abstract修飾。 抽象類中可以有抽象方法,也可以有非抽象方法。 抽象類不能建立例項物件 不能new抽象類。 抽象類中可以沒有抽象方法,但是抽象方法一定在抽象類中。因為抽象類不能被例項化,抽象方法不能被實現。
抽象類和普通類的區別:
- 抽象類不能被例項化。可以定義抽象型別的變數,但值必須為null,或者是其派生類的非抽象類的例項的引用
- 抽象類被abstract所修飾
- 允許抽象類包含抽象成員
抽象方法(abstract method)
基本概念 在抽象類內部不給予實現。當有一個類繼承了當前的抽象類後,需要實現。 抽象方法必須是public/protected/或者不加訪問修飾限定符(預設為public),不能被private修飾
抽象類的派生類:
- 如果是普通類必須實現抽象類的抽象方法
- 如果是抽象類,可以不實現基類的派生方法
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類繼承
}