Java三大特性之繼承

轉載請標明出處:http://blog.csdn.net/wu_wxc/article/details/51455293
本文出自【吳孝城的CSDN博客】

extends:意思是擴展,但一般我們叫做繼承。

繼承可以定義爲一個類獲得另一個類的屬性(方法和字段)

子類繼承父類所有的成員(字段、方法、嵌套類),但不能使用父類private(私有)的方法和屬性
構造方法不是成員,所以不會被繼承,但可以被調用。
Java是單繼承,但可以多實現(implements),一般繼承基本類和抽象類用extends,實現接口用implements

extends的使用如下

class Super {
    .......
    .......
}

class Sub extends Super{
    .......
    .......
}

implements的使用如下

// 接口
interface People{
    .......
    .......
}
// 類
class Person {
    .......
    .......
}
// 實現People接口
class Student implements People{
    .......
    .......
}
// 繼承Person並實現People
class Worker extends Person implements People{
    .......
    .......
}

extends關鍵字的使用

package cn.wuxiaocheng;

// 父類
class People {
    public void say() {
        System.out.println("父類");
    }
}

// 子類,通過extends擴展處父類(Calculation)
class Student extends People {
    public void tell() {
        System.out.println("子類");
    }
}

public class TestExtends {

    public static void main(String[] args) {
        Student student = new Student();
        // 調用父類擴方法
        student.say();
        // 調用子類的方法
        student.tell();
    }

}

運行結果如下
這裏寫圖片描述

super關鍵字
如果子類中有和父類同名的成員,可以用它來區分。也是用來調用父類的構造方法的
如:

package cn.wuxiaocheng;

//父類
class Foo {
    int i = 10;

    public Foo() {
        System.out.println("Foo");
    }

}

// 子類
class Sub extends Foo {
    // 和父類同名的成員變量
    int i = 20;

    // 創建子類構造函數
    Sub() {
        // 調用父類無參數的構造方法,構造函數的調用必須是構造函數中的第一個語句
        super();
        // 用super調用和父類同名的成員變量
        System.out.println(super.i);
    }
}

public class SuperTest {

    public static void main(String[] args) {
        // 構造函數直接創建應會調用
        new Sub();
    }
}

結果如下
這裏寫圖片描述

接口

接口通常以interface來聲明,一個類通過實現接口,從而實現接口中的抽象方法
接口並不是類,類描述屬性和方法,接口則包含類要實現的方法

要注意的是
接口沒有構造方法
接口中所有的方法必須是抽象方法,沒寫abstract的話系統也會自動添加上
接口不能用於實例化對象

聲明接口不需要使用abstract
接口中的每一個方法也都是隱式的,聲明時同樣不需要使用abstract關鍵字
接口中的方法都是public公有的
接口可以多實現,
接口中定義的變量都是常量,public static final修飾,如果沒寫,系統也會自動添加上

接口文件通常會在文件名前面加”I”,用來區分
IAnimal.java

package cn.wuxiaocheng;

//定義一個接口,省略abstract
public interface IAnimal {
    public void say();
}

Dog.java
package cn.wuxiaocheng;

// 用implements關鍵字實現IAnimal接口
public class Dog implements IAnimal {

    // 實現接口必須裏面的方法
    @Override
    public void say() {
        System.out.println("狗叫是汪汪");
    }

}

Cat.java

package cn.wuxiaocheng;

//繼承抽象類必須實現抽象類中的抽象方法
public class Cat implements IAnimal {

    @Override
    public void say() {
        System.out.println("貓叫是喵");
    }

}

Test.java

package cn.wuxiaocheng;

public class Test {

    public static void main(String[] args) {

        // 接口的引用指向一個實現了接口的對象
        IAnimal iAnimal1 = new Dog();
        iAnimal1.say();

        IAnimal iAnimal2 = new Cat();
        iAnimal2.say();
    }

}

這裏寫圖片描述

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