abstractjava
⑴ java中abstract怎麼使用
abstract就是抽象
用來修飾類和方法
比如
public abstract class Text{
public void function(){............}
}
這個是抽象類,使用的時候不可以直接對Text實例化
就是說不能這樣用:Text t=new Text();//報錯
裡面的所有屬性需要通過繼橘鋒亂承獲得
要通過
public class TextA extends Text{
}
TextA a=new TextA();
a.function();
//////////////////////////////////////////
抽象方法就是:
public abstract class Text{
public abstract void function();//注意這里只是一個聲明,方法用抽象修飾,並無內容
}
要通過
public class TextA extends Text{
public void function(){....}//要通過具體實現後這個方圓檔法才可以用
}
TextA a=new TextA();
a.function();
結論:
有抽基羨象方法的類一定是抽象方法
抽象類裡面可以沒有抽象方法
抽象類只能繼承,不能實例化
⑵ 怎麼理解JAVA中的abstract類和abstract方法
這個問題網上有回答:
含有abstract修飾符的class即為抽象類,abstract 類不能創建的實例對象。含有abstract方法的類必須定義為abstract class,abstract class類中的方法不必是抽象的。abstract class類中定義抽象方法必須在具體(Concrete)子類中實現,所以,不能有抽象構造方法或抽象靜態方法。如果的子類沒有實現抽象父類中的所有抽象方法,那麼子類也必須定義為abstract類型。
介面(interface)可以說成是抽象類的一種特例,介面中的所有方法都必須是抽象的。介面中的方法定義默認為public abstract類型,介面中的成員變數類型默認為public static final。
下面比較一下兩者的語法區別:
1.抽象類可以有構造方法,介面中不能有構造方法。
2.抽象類中可以有普通成員變數,介面中沒有普通成員變數
3.抽象類中可以包含非抽象的普通方法,介面中的所有方法必須都是抽象的,不能有非抽象的普通方法。
4. 抽象類中的抽象方法的訪問類型可以是public,protected和(默認類型,雖然
eclipse下不報錯,但應該也不行),但介面中的抽象方法只能是public類型的,並且默認即為public abstract類型。
5. 抽象類中可以包含靜態方法,介面中不能包含靜態方法
6. 抽象類和介面中都可以包含靜態成員變數,抽象類中的靜態成員變數的訪問類型可以任意,但介面中定義的變數只能是public static final類型,並且默認即為public static final類型。
⑶ Java中的abstract方法和abstract類的問題
/*
抽象類:
目前存在的問題:
1.動物類的run方法描述的不正確。
2.沒有強制要子類一定要重寫run方法。
抽象類的應用場景:
我們在描述一類事物的時候,發現該種事物確實存在著某種行為,
但是這種行為目前是不具體的,那麼我們可以抽取這種行為的聲明,但是
不去實現該種行為,這時候這種行為我們稱作為抽象的行為,我們就需要使用抽象類。
抽象類的好處:強制要求子類一定要實現指定的方法。
抽象類要注意的細節:
1.如果一個函數沒有方法體,那麼該函數必須要使用abstract修飾,把該函數修飾成抽象的函數。。
2.如果一個類出現了抽象的函數,那麼該類也必須使用abstract修飾。
3.如果一個非抽象類繼承了抽象類,那麼必須要把抽象類的所有抽象方法全部實現。
4.抽象類可以存在非抽象方法,也可以存在抽象的方法.
5.抽象類可以不存在抽象方法的。
5.抽象類是不能創建對象的。
疑問:為什麼抽象類不能創建對象呢?
因為抽象類是存在抽象方法的,如果能讓抽象類創建對象的話,那麼使用抽象的對象
調用抽象方法是沒有任何意義的。
6.抽象類是存在構造函數的,其構造函數是提供給子類創建對象的時候初始化父類的屬性的。*/
//動物類--->抽象類
abstractclassAnimal{
Stringname;
Stringcolor;
publicAnimal(Stringname,Stringcolor){
this.name=name;
this.color=color;
}
//非抽象的方法
publicvoideat(){
System.out.println(name+"吃糧食");
}
//移動...
publicabstractvoidrun();
}//狗是屬於動物中一種
classDogextendsAnimal{
publicDog(Stringname,Stringcolor){
super(name,color);
}
publicvoidrun(){
System.out.println(name+"四條腿跑得很快...");
}
}
//魚是屬於動物中一種
classFishextendsAnimal{
publicFish(Stringname,Stringcolor){
super(name,color);
}
publicvoidrun(){
System.out.println(name+"搖搖尾巴游啊游!");
}
}
classDemo3{
publicstaticvoidmain(String[]args)
{
/*
Dogd=newDog("牧羊犬","棕色");
d.run();
//創建一個魚對象
Fishf=newFish("錦鯉","金黃色");
f.run();
*/
Animala=newAnimal();
}
}
⑷ java中抽象的方法(abstract)有什麼作用
抽象類、就是一個用abstract修飾輪脊的類,在這個類中、你可以定義一些不需要具體實現的方法、也就是沒有方法體的方法、這些方法叫做抽象方法、當一個類要繼承這個抽象類時、就必須要實現這些抽象方法、。當你在做一個比較復雜的項目時、一些簡單的方法就可以馬上寫出來、但一些復雜的方法、在不同枝搭的類中需要不同的實現、那麼這猛桐拿個時候就需要用到抽象類的。。。
⑸ JAVA中abstract
2是對的
抽象類中可以沒有抽象的方法,只是抽象類不能實例化。
但是一旦一個類中有抽象方法,所在class必定要是class,否則會有編譯錯誤
⑹ java中為什麼要引人abstract類和方法了
java引嘩知襲入抽象類的意義:
1,為子類提供一個公共的類型;
2,封裝子類中重復內容(成員變數和亂兄方法);
3,定義有抽象方法,子類雖然有不同的實現,但該方法的定義是一致的。
抽象方法:由abstract修飾的方法為抽象方法,抽象方法只有方法的定義,沒有方法的實現。
抽象類:一個類中如果包含抽象方法,個i類應該用abstract關鍵字聲明為抽猛唯象類。
抽象類不可以實例化,即使一個類中沒有抽象方法,也可以將其定義為抽象類,同樣,該類不可以實例化。抽象類和介面的區別:
抽象類:為了被子類繼承,為子類提供了同一的方法入口;
介面:定義了一個標准(特殊的抽象類)。
⑺ java中abstract方法的格式是什麼
抽象成員方法的定義格式為:
【方法修飾詞列表】 返回類型 方法名(方法的參數列表);
其中,方法修飾詞列表含有關鍵字abstract。
如果方法修飾詞列表還含有其他方法修飾詞,則在相鄰方法修飾詞之間通過空格隔開。
方法的參數列表可以不包含參數、也可以包含1個或多個參數。
例如:public abstract int p(int x,String s);
抽象方法的定義格式與不具有抽象屬性的成員方法的定義格式之間的區別:
①除了是否含有方法修飾詞abst之外,抽象成員方法的定義以分號結束,不含方法體。
②而不具有抽象屬性的成員方法的定義在成員方法聲明之後不能立即出現分號,必須含有方法體。
注意:如果一個類不具有抽象屬性,則不能再該類的類體中定義抽象成員方法
⑻ Java中abstract和interface的區別
1.abstract class 在 Java 語言中表示的是一種繼承關系,一個類只能使用一次繼承關系。但是,一個類卻可以實現多個interface。
2.在abstract class 中可以有自己的數據成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態的不能被修改的數據成員(也就是必須是static final的,不過在 interface中一般不定義數據成員),所有的成員方法都是abstract的。
3.abstract class和interface所反映出的設計理念不同。其實abstract class表示的是"is-a"關系,interface表示的是"like-a"關系。
4.實現抽象類和介面的類必須實現其中的所有方法。抽象類中可以有非抽象方法。介面中則不能有實現方法。
5.介面中定義的變數默認是public static final 型,且必須給其初值,所以實現類中不能重新定義,也不能改變其值。
6.抽象類中的變數默認是 friendly 型,其值可以在子類中重新定義,也可以重新賦值。
7.介面中的方法默認都是 public,abstract 類型的。
⑼ java在什麼情況下要使用抽象方法abstract
參考如下內容:
當父類的某些方法不確定時,可以用abstract關鍵字來修飾該方法[抽象方法],用abstract來修飾該類[抽象類]。
我們都知道,父類是將子類清鏈鎮所共同擁有的屬性答粗和方法進行抽取,這些屬性和方法中,有的是已經明確實現了的,有的還無法確定,那麼我們就可以將其定義成抽象,在後日子類進行喚逗重用,進行具體化。這樣,抽象類也就誕生了。
例如,定義了「動物」父類,其中「動物名稱」和「動物年齡」屬性已經明確了,但是「動物叫」的方法沒有明確,此時就可以將「動物叫」定義為抽象方法。
所以,抽象類是為了把相同的但不確定的東西的提取出來,為了以後的重用。定義成抽象類的目的,就是為了在子類中實現抽象類。
⑽ java中abstract怎麼使用啊,說的詳細點。舉幾個有代表的例子
使用abstract(抽象)修飾符,可以修飾類和方法。
1、abstract修飾類,會使這個類成為一個抽象類,這個類將不能生成對象實例,但可以做為對象變數聲明的類型,也就是編譯時類型,抽象類就像當於一類的半成品,需要子類繼承並覆蓋其中的抽象方法。
2、abstract修飾方法,會使這個方法變成抽象方法,也就是只有聲明(定義)而沒有實現,實現部分以";"代替。需要子類繼承實現(覆蓋)。
注意:有抽象方法的類一定是抽象類。但是抽象類中不一定都是抽象方法,也可以全是具體方法。
abstract修飾符在修飾類時必須放在類名前。
abstract修飾方法就是要求其子類覆蓋(實現)這個方法。調用時可以以多態方式調用子類覆蓋(實現)後的方法,也就是說抽象方法必須在其子類中實現,除非子類本身也是抽象類。
注意:父類是抽象類,其中有抽象方法,那麼子類繼承父類,並把父類中的所有抽象方法都實現(覆蓋)了,子類才有創建對象的實例的能力,否則子類也必須是抽象類。抽象類中可以有構造方法,是子類在構造子類對象時需要調用的父類(抽象類)的構造方法。
舉個簡單的例子下面有一個抽象類:
abstract class E{
public abstract void show();//public abstract 可以省略
}
然後其它類如果繼承它通常為了實現它裡面的方法:
class F extends E{
void show(){
//寫具體實現的代碼
}
}
最後再主方法裡面定義一個父類引用指向子類對象,就會發生多態現象,比如 :
E e=new F();
e.show();
實際調用了子類裡面的show()方法 。
(10)abstractjava擴展閱讀:
Java中的abstract方法和abstract類的問題:
當知道一個類的子類將不同的實現某個方法時,把該類聲明為抽象類很有用,可以共用相同的父類方法,不必再定義。
抽象類和抽象方法的關系:含有抽象方法的類一定是抽象類,抽象類里不一定含有抽象方法。
抽象類存在的意義是用來被繼承的。一個類繼承了一個抽象類,必須實現抽象類裡面所有的抽象方法,否則,此類也是抽象類。
1:用abstract修飾的類表示抽象類,抽象類位於繼承樹的抽象層,抽象類不能被實例化。
2:用abstract修飾的方法表示抽象方法,抽象方法沒有方法體。抽象方法用來描述系統具有什麼功能,但不提供具體的實現。
abstract的規則:
1:抽象類可以沒有抽象方法,但是有抽象方法的類必須定義為抽象類,如果一個子類繼承一個抽象類,子類沒有實現父類的所有抽象方法,那麼子類也要定義為抽象類,否則的話編譯會出錯的。
2:抽象類沒有構造方法,也沒有抽象靜態方法。但是可以有非抽象的構造方法。
3:抽象類不能被實例化,但是可以創建一個引用變數,類型是一個抽象類,並讓它引用非抽象類的子類的一個實例。
4:不能用final 修飾符修飾。