抽象類
概念
在面向?qū)ο蟮母拍钪校械膶ο蠖际峭ㄟ^類來描繪的,但是反過來,并不是所有的類都是用來描繪對象的,如果一個(gè)類中沒有包含足夠的信息來描繪一個(gè)具體的對象,這樣的類就是抽象類。
抽象類除了不能實(shí)例化對象之外,類的其它功能依然存在,成員變量、成員方法和構(gòu)造方法的訪問方式和普通類一樣。
由于抽象類不能實(shí)例化對象,所以抽象類必須被繼承,才能被使用。也是因?yàn)檫@個(gè)原因,通常在設(shè)計(jì)階段決定要不要設(shè)計(jì)抽象類。
父類包含了子類集合的常見的方法,但是由于父類本身是抽象的,所以不能使用這些方法。
在Java中抽象類表示的是一種繼承關(guān)系,一個(gè)類只能繼承一個(gè)抽象類,而一個(gè)類卻可以實(shí)現(xiàn)多個(gè)接口。
舉例
public class Main {
public static void main(String[] args) {
Animal a = new Cat("mimi");
a.printName();
a.say("喵喵");
}
}
abstract class Animal {
public String name;
public void printName() {
System.out.println(this.name);
}
public abstract void say(String str);
}
class Cat extends Animal {
public Cat(String name) {
this.name = name;
}
public void say(String str) {
System.out.println(str);
}
}
運(yùn)行結(jié)果:

接口
概念
接口(英文:Interface),在JAVA編程語言中是一個(gè)抽象類型,是抽象方法的集合,接口通常以interface來聲明。一個(gè)類通過繼承接口的方式,從而來繼承接口的抽象方法。
接口并不是類,編寫接口的方式和類很相似,但是它們屬于不同的概念。類描述對象的屬性和方法。接口則包含類要實(shí)現(xiàn)的方法。
除非實(shí)現(xiàn)接口的類是抽象類,否則該類要定義接口中的所有方法。
接口無法被實(shí)例化,但是可以被實(shí)現(xiàn)。一個(gè)實(shí)現(xiàn)接口的類,必須實(shí)現(xiàn)接口內(nèi)所描述的所有方法,否則就必須聲明為抽象類。另外,在 Java 中,接口類型可用來聲明一個(gè)變量,他們可以成為一個(gè)空指針,或是被綁定在一個(gè)以此接口實(shí)現(xiàn)的對象。
舉例
Animal.java
package com.company;
public interface Animal {
public static String name="xxx";
public void eat();
public void say(String str);
}
main.java
package com.company;
public class Main {
public static void main(String[] args) {
Cat a=new Cat();
a.eat();
a.say("喵喵");
}
}
class Cat implements Animal{
public void eat(){
System.out.println("貓吃魚");
}
public void say(String str){
System.out.println(str);
}
}
運(yùn)行結(jié)果:

多態(tài)
概念
多態(tài)是同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力。
當(dāng)使用多態(tài)方式調(diào)用方法時(shí),首先檢查父類中是否有該方法,如果沒有,則編譯錯(cuò)誤;如果有,再去調(diào)用子類的同名方法。
多態(tài)的好處:可以使程序有良好的擴(kuò)展,并可以對所有類的對象進(jìn)行通用處理。
舉例
public class Main {
public static void main(String[] args) {
show(new Cat());
show(new Dog());
}
public static void show(Animal a) {
a.eat();
if (a instanceof Cat) {
((Cat) a).work();
} else if (a instanceof Dog) {
((Dog) a).work();
}
}
}
class Animal {
public void eat() {
System.out.println("吃肉");
}
}
class Cat extends Animal {
public void eat() {
System.out.println("我是貓,吃魚");
}
public void work() {
System.out.println("我是貓,抓老鼠");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("我是狗,吃骨頭");
}
public void work() {
System.out.println("我是狗,看家");
}
}
運(yùn)行結(jié)果:
