抽象類與抽象方法
抽象方法:由系統關鍵字abstract修飾的方法,叫抽象方法
抽象方法的特點:
1.抽象方法的實現沒有
2.會強制抽象方法所在的類的子類去重寫該方法
3.一定只能在抽象方法中
抽象類:由系統關鍵字abstract修飾的類叫做抽象類
抽象類的特點:
1.抽象類不能實例化對象
2.抽象類的子類一定要重寫抽象類中的抽象方法
3.抽象類中可以有成員變量和成員方法,既可以有抽象方法,也可以沒有,抽象方法中一定有構造方法的
抽象類是根據多態來用其子類創建對象的
abstract class People //抽象類
{
String name; //成員變量
public void sayHi() //成員方法
{
System.out.println("我叫"+name);
}
public abstract void eat(); //抽象方法,沒有方法的實現
}
class Student extends People
{
@Override //抽象方法的重寫
public void eat() {
System.out.println("吃食堂飯");
}
}
一般,當我們會把一些無法實現的方法,寫成抽象方法放入抽象類中,讓其子類來實現.
例如人吃什麼飯,這個問題我們不好寫實現,就定義爲抽象問題,但是其子類學生吃什麼飯這個問題就可以實現.
下面關於抽象類和抽象方法,我們思考一下,抽象關鍵詞abstract和哪一些關鍵字不能一起出現,原因是什麼?
1.首先是關鍵字final:因爲抽象方法是沒有實現的,會強制子類重寫方法,但是final修飾的方法是無法重寫的
2.關鍵字private,這是一個權限修飾符,因爲private修飾的方法外界是無法訪問的,因此子類是無法對其進行重寫的.
3.關鍵字static,因爲static修飾的方法,是可以直接用方法名調用的,但是抽象方法沒有方法的實現,是不能調用的.
接口
接口是由關鍵字interface修飾的叫做接口
接口的特點:
1.接口不能實例化一個對象,誰用接口就要去實現接口中的方法
2.接口中只能有抽象方法,不能有成員方法,並且接口中不能有成員變量,但是可以有常量,接口中是沒有構造方法的
interface Fly//接口
{
public abstract void fly();//需求,抽象方法
}
class Bird implements Fly
{
@Override
public void fly()
{
System.out.println("我能飛");
}
}
類,接口之間的相互關係
類與類之間的關係是繼承關係,並且只能單繼承或者多層繼承
類與接口之間的關係是實現關係,類實現接口,並且可以一個類實現多個接口,但是類中必須要重寫所有的抽象方法
接口與接口的關係
例如:
interface X1
{
public abstract void sayHi();
}
interface X2
{
public abstract void print();
}
interface X3 extends X2 //接口3繼承接口2,連抽象方法也一起繼承了,所以實現的時候,X2和X3的抽象方法都實現
{
public abstract void count();
}
class P implements X1 , X3
{
@Override
public void sayHi() {
System.out.println("你好");
}
@Override
public void print() {
System.out.println("打印");
}
@Override
public void count() {
System.out.println("數數");
}
}