java抽象變數
『壹』 關於java抽象方法
下面是抽象方法聲明時採用的語法:abstract void f();
如果從一個抽象類繼承,而且想生成新類型的一個對象,就必須為基礎類中的所有抽象方法提供方法定義。如果不這樣做(完全可以選擇不做),則衍生類也會是抽象的,而且編譯器會強迫我們用abstract 關鍵字標志那個類的「抽象」本質。即使不包括任何abstract 方法,亦可將一個類聲明成「抽象類」。如果一個類沒必要擁有任何抽象方法,而且我們想禁止那個類的所有實例,這種能力就會顯得非常有用。
在面向對象的概念中,我們知道所有的對象都是通過類來描繪的,但是反過來卻不是這樣。並不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。
抽象類往往用來表徵我們在對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。比如:如果我們進行一個圖形編輯軟體的開發,就會發現問題領域存在著圓、三角形這樣一些具體概念,它們是不同的,但是它們又都屬於形狀這樣一個概念,形狀這個概念在問題領域是不存在的,它就是一個抽象概念。正是因為抽象的概念在問題領域沒有對應的具體概念,所以用以表徵抽象概念的抽象類是不能夠實例化的。在面向對象領域,抽象類主要用來進行類型隱藏。我們可以構造出一個固定的一組行為的抽象描述,但是這組行為卻能夠有任意個可能的具體實現方式。這個抽象描述就是抽象類,而這一組任意個可能的具體實現則表現為所有可能的派生類。模塊可以操作一個抽象體。由於模塊依賴於一個固定的抽象體,因此它可以是不允許修改的;同時,通過從這個抽象體派生,也可擴展此模塊的行為功能。熟悉OCP的讀者一定知道,為了能夠實現面向對象設計的一個最核心的原則OCP(Open-Closed Principle),抽象類是其中的關鍵所在。
『貳』 JAVA問題:抽象類 變數名=new 類名(): 父類 變數名=new 子類()為什麼這樣定義有什麼好處
GregorianCalendar是Calendar子類
子類可以拓展更多的函數,也可以覆寫父類的函數
這么定義的好處是cal1可以使用Calendar的所有函數的功能.或者是自身基類修改後的後的函數的功能.
同時它仍然是個Calendar類.
屬性的默認值什麼的仍然是Calendar的而不是GregorianCalendar類的.
這個方法可以用於拓展或者修改一些類比較方便.
比如你可以給基本數據類型的包裝類Integer做個子類增加自己的演算法或者是別的操作什麼的.
或者是直接修改原先內置的方法.
然後用這種方式定義的時候還不用轉換數據類型,直接就照常和別的整型運算就行了.
在不改變你變數類型的情況下就能增加了原先沒有的方法.
和Kotlin中的類的拓展有異曲同工之妙.
『叄』 JAVA可以抽象成員變數嗎
抽象成員變數?是抽象方法吧,這個可以,用關鍵字abstract,類也要用抽象類。
『肆』 java抽象類中可以聲明變數嗎能賦初值嗎
public class chouDemo {
public static void main(String[] args) {
father s=new son();
s.aaaa(3, "hello");//3和hello就是給形式參數賦值
}
}
abstract class father{
int i=12;
public void aaa(){
int a=1;//實例方法直接賦值
}
public abstract void aaaa(int y,String s);//抽象方法沒有方法體,也就是沒有成員變數
}
class son extends father{
public void aaaa(int y,String s){
int x=y;
String c=s;
}
}
『伍』 java 抽象怎麼理解
抽象是一種面向對象的編程實踐的核心原則, Java具有所有OOPs原則,抽象是一個Java語言的主要構建塊。
數據抽象的跨度從創建簡單的數據對象集合的實現復雜如HashMap或HashSet。
控制抽象是結構化編程背後主要驅動力。
『陸』 java API 文檔中的介面方法和抽象方法,有什麼區別
對於面向對象編程來說,抽象是它的一大特徵之一。可以通過兩種形式來體現OOP的抽象:介面和抽象類。這兩者有太多相似的地方,又有太多不同的地方。很多人在初學的時候會以為它們可以隨意互換使用,但是實際則不然。今天我們就一起來學習一下Java中的介面和抽象類。 抽象方法是一種特殊的方法:它只有聲明,而沒有具體的實現。抽象方法的聲明格式為: abstract void fun(); 抽象方法必須用abstract關鍵字進行修飾。如果一個類含有抽象方法,則稱這個類為抽象類,抽象類必須在類前用abstract關鍵字修飾。因為抽象類中含有無具體實現的方法,所以不能用抽象類創建對象。抽象類就是為了繼承而存在的,如果你定義了一個抽象類,卻不去繼承它,那麼等於白白創建了這個抽象類,因為你不能用它來做任何事情。對於一個父類,如果它的某個方法在父類中實現出來沒有任何意義,必須根據子類的實際需求來進行不同的實現,那麼就可以將這個方法聲明為abstract方法,此時這個類也就成為abstract類了。在軟體工程中,介面泛指供別人調用的方法或者函數。從這里,我們可以體會到Java語言設計者的初衷,它是對行為的抽象。介面中可以含有變數和方法。但是要注意,介面中的變數會被隱式地指定為public static final變數(並且只能是public static final變數,用private修飾會報編譯錯誤),而方法會被隱式地指定為public abstract方法且只能是public abstract方法(用其他關鍵字,比如private、protected、static、 final等修飾會報編譯錯誤),並且介面中所有的方法不能有具體的實現,也就是說,介面中的方法必須都是抽象方法。從這里可以隱約看出介面和抽象類的區別,介面是一種極度抽象的類型,它比抽象類更加「抽象」,並且一般情況下不在介面中定義變數。
『柒』 JAVA問題:我真不明白為什麼是這樣的:抽象類 變數名=new 類名():為什麼這樣定義有什麼好處
抽象類實際上是對一個基類的實例化
給你打個比方吧......人類是一個基類(屬性和方法有,名字,年齡,身高,打籃球等)...對這個基類實例化就相當於把某個東西抽象成基類..讓它也具有基類相同的屬性和方法..(
例如 :人類 張三=new 人類() 這樣張三就具有了人類的特性了)這樣做的好處是...代碼易於管理...對基類的實例化不會影響基類本身....最重要的是代碼的可重用性(比如還有另外一個人叫李四,把李四實例化後..李四也具有人類的特徵了,而張三跟李四互不幹擾)
例如創建一個button(按鈕)的實例可以這樣寫(我們都知道button的屬性有text,name,font,等屬性,JAVA中創建button請參考JAVA的窗體創建方法)
button b1 =new button()
這樣b1就具有了Button按鈕的屬性和方法了,使用對象的屬性可以寫成這樣
b1.text=「這是一個Button按鈕"
『捌』 java 抽象類中可以定義哪些成員變數和函數
都可以,抽象類中可以包含抽象方法,但是不是一定要包含。一個抽象類可以沒有抽象方法都行。如果一個類中包含了一個抽象方法,那麼這個類一定是抽象類。
抽象類中能包含的與普通類沒什麼根本區別。
1.如果一個類被定義為抽象類,且沒有包含任何抽象方法,(也就是說該抽象類已經都實現了這些方法),那麼子類在繼承這個抽象類的時候不必重寫這些方法。
2.相應的,如果一個類被定義為抽象類,包含抽象方法,那麼在子類中一定要實現這些抽象方法。否則,子類必須聲明為一個抽象類。
『玖』 JAVA中創建抽象類的對象變數,指向他的非抽象子類是什麽意思
你說的應該是這樣的一種情況:
人 a = new 張三();
這裡面「人」是一個抽象類,有些方法比如「吃飯」都已經實現了,而有些方法比如「獲取名字「、」獲取樣子」等沒有實現;「張三」是人的子類,是一個非抽象類,實現了所有方法。
這里的a可以說是抽象類人的變數,指向的是張三這個非抽象類。
我們可以用抽象類定義變數,但實例化的時候必須用非抽象類。就比如我們寫計劃的時候可以說今年安排多少「人」進修,每天多少「人」打掃衛生等,說的很抽象。但是具體執行的時候是必須指明到底安排的是誰。
先說到這,你要是還有什麼不明白的話就追問吧,給我發信也行。
============
我看你問到內存的東西了,我可以再給你解釋一下,我還是注意答案的質量的:)
看這條語句:A a = new AA();
先看A a,這只是在棧裡面創建一個4位元組的指針變數。
new AA;這條語句是在堆裡面開辟AA類型的空間,這個空間裡面存放的是AA所包含的以及繼承的所有非靜態變數,不包含方法代碼。(方法代碼在方法區,虛擬機第一次見到AA時就會載入進去,注意第一次就會,而且僅僅一次)
AA();這條語句是調用AA的構造方法AA()
= 是賦值,把開辟的堆空間首地址賦給指針a。
明白么:)??
『拾』 java抽象變數
這兩個 代碼的功能應該是一樣的
不過第一例子中 classB 繼承的是抽象類classA那麼它就必須實例話classA中的int min(int a,int b)抽象方法。如果不想實例話那麼classB 只能寫成抽象類 要不會報錯
而例子二中 繼承的是個普通的類就算是不寫min(int a,int b)方法也是對的 就這個區別
小弟學的不是很精只能說出這點來