轉載請標明出處: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();
}
}