1. 程式人生 > >JAVASE抽象方法,介面

JAVASE抽象方法,介面

一抽象類

1抽象類的產生

當編寫一個類時,我們往往會為該類定義一些方法,這些方法是用來描述該類的功能具體實現方式,那麼這些方法都有具體的方法體。

但是有的時候,某個父類只是知道子類應該包含怎麼樣的方法,但是無法準確知道子類如何實現這些方法。比如一個圖形類應該有一個求周長的方法,但是不同的圖形求周長的演算法不一樣。那該怎麼辦呢?

分析事物時,發現了共性內容,就出現向上抽取。會有這樣一種特殊情況,就是方法功能宣告相同,但方法功能主體不同。那麼這時也可以抽取,但只抽取方法宣告,不抽取方法主體。那麼此方法就是一個抽象方法。

2抽象方法定義的格式:

public abstract

返回值型別 方法名(引數);

抽象類定義的格式:

abstract class 類名 {

}

abstract class Animal{
	public abstract void cry();//叫聲  
}
class Cat extends Animal {
	public void cry() {
		System.out.println("喵喵");
	}
}
class Dog extends Animal{
	public void cry() {
		System.out.println("汪汪");
	}
}
public class Test4 {
	public static void main(String[] args) {
		Cat c=new Cat();
		c.cry();
		Dog d=new Dog();
		d.cry();
	}

}

輸出:
喵喵
汪汪
 

3抽象類的特點

a、抽象類和抽象方法都需要被abstract修飾。抽象方法一定要定義在抽象類中。

b、抽象類不可以直接建立物件,原因:呼叫抽象方法沒有意義。

c、只有覆蓋了抽象類中所有的抽象方法後,其子類才可以建立物件。否則該子類還是一個抽象類。

之所以繼承抽象類,更多的是在思想,是面對共性型別操作會更簡單

4抽象類的細節問題

a、抽象類一定是個父類?

是的,因為不斷抽取而來的。

b、抽象類中是否可以不定義抽象方法。

是可以的,那這個抽象類的存在到底有什麼意義呢?不讓該類建立物件,方法可以直接讓子類去使用

 

 

 

 

 

 

抽象類中可以沒有抽象方法,但是該類也不能被例項化,也就是說不能new,抽象方法必須在抽象類中。

抽象方法:用abstract修飾的方法(注:抽象方法只有方法宣告沒有方法體,抽象方法必須在抽象類中,抽象類不能被例項化,不管裡面有沒有抽象方法),但是抽象類中的構造方法和普通類的構造方法相同,沒有什麼特殊的,抽象類中的構造方法是供子類構造方法使用的),子類繼承該抽象類,會繼承父類的抽象方法,要重寫它的抽象方法(實現了方法的真正的功能)。如果子類值只重寫了部分父類的構造方法,子類還是抽象類(因為裡面含有抽象方法),必須用abstarct修飾(注:抽象類是不能建立物件的。

問題1沒有抽象方法的抽象類是否可以建立物件?

//不能。抽象類是不能例項化物件的
abstract class A{
	public void f() {
		System.out.println("f()");
	}
}
public class Test2 {

	public static void main(String[] args) {
		A a=new A();//報錯
	}

}