Java基礎系列 - 抽象類,子類繼承


package com.company;

/**
 * 抽象類繼承
 * 用abstract修飾類就是抽象類
 * 用abstract修飾方法就是抽象方法(一般使用比較少)
 * 抽象類不能被實例化
 */
public class Main {
    public static void main(String[] args) {
        Animal an = new Cat();
        an.cry(); //輸出 “貓叫,喵喵喵”
        an = new Dog();
        an.cry();  //輸出 “狗叫,汪汪汪”

        Cat cat1 = new Cat();
        cat1.eat(); //輸出 “貓愛吃魚”
    }
}

/**
 * 定義一個動物抽象類
 */
abstract class Animal {
    private int age;
    private String name;

    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    abstract public void cry();
}

/**
 * 貓類(繼承動物類)
 */
class Cat extends Animal {
    /**
     * 實現抽象父類中的具體方法
     */
    @Override
    public void cry() {
        System.out.println("貓叫,喵喵喵");
    }

    /**
     * 子類自有方法
     */
    public void eat() {
        System.out.println("貓愛吃魚");
    }
}

/**
 * 狗類(繼承動物類)
 */
class Dog extends Animal {
    /**
     * 實現抽象父類中的具體方法
     */
    @Override
    public void cry() {
        System.out.println("狗叫,汪汪汪");
    }
}

 

抽象類:

抽象類就是不能使用new方法進行實例化的類(不能被實例化,可以有多個抽象方法),即沒有具體實例對象的類,抽象類有點類似於“模板”的作用,目的是根據其格式來創建和修改新的類,對象不能由抽象類直接創建,只可以通過抽象類派生出新的子類,再由其子類來創建對象,當一個類被聲明為抽象類時,要在這個類前面加上修飾符abstract,在抽象類中的成員方法可以包括一般方法和抽象方法

 

抽象類的關鍵字:abstract

abstract 關鍵字,和哪些關鍵字不能共存?

final:被final修飾的類不能有子類。而被abstract修飾的類一定是一個父類。
private: 抽象類中的私有的抽象方法,不被子類所知,就無法被復寫。
而抽象方法出現的就是需要被復寫。
static:如果static可以修飾抽象方法,那么連對象都省了,直接類名調用就可以了

 

java中抽象類的特點:

 

1. 如果一個類中有抽象方法,那么這個類一定是抽象類

 2. 抽象類中不一定有抽象方法

 3. 抽象類中可以存在抽象方法

 4. 抽象類中可以存在構造方法

 5. 抽象類中可以存在普通屬性、方法、靜態屬性和靜態方法

 6. 抽象類中的抽象方法需要有子類實現,如果子類不實現,則子類也需要定義為抽象的

7,抽象方法和抽象類都必須被abstract關鍵字修飾。

8,抽象類不可以用new創建對象。因為調用抽象方法沒意義

9:抽象類中的抽象方法要被使用,必須由子類復寫起所有的抽象方法

接口和抽象類的區別之處:

1. 接口中所有的方法隱含都是抽象的,而抽象類則可以同時包含抽象和非抽象的方法

2. 類可以實現很多個接口,但是只能繼承一個抽象類

3. 類可以不實現抽象類和接口聲明的所有方法,在這種情況下,類也必須得聲明成是抽象的

4. 抽象類可以在不提供接口方法實現的情況下實現接口

5. java接口中聲明的變量默認都是final的,抽象類可以包含非final變量

6. java接口中的成員函數默認都是public的,抽象類中的成員函數可以是private,protected或者是public的

7. 接口是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是如果它包含main方法的話是可以被調用的

 

8:抽象類中可以有普通方法,接口中不能。
9:抽象類可以有構造,接口不能
10:抽象類中可以有普通字段,而接口中不行
11:抽象類不能實現多繼承,接口可以
12:符合isa關系的選用抽象類,符合hasa關系的選用接口比抽象類抽象程度更高


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM