java向上造型編譯器怎麼做的
1. java中 向上造型是什麼概念是向上轉型么 什麼情況下用
class A {}
class B {} extend A
B b1 = new B();
A a1 = new B();
b1 = a1;
這被稱作向上造型。
2. java向上造型的意義
那個你做的例子都有誤導性的,你用Person來試試,Person裡面有一個方法:eat(),你分別聲明三個類:man,woman,notmannotwoman來繼承這個類,並復寫裡面的方法,好了,現在我要在測試類裡面寫一個方法,只傳進一個參數,可以調用三個對象的復寫的eat(),你該怎麼辦? 現在,向上轉型就出來了,太他媽的聰明了,你myMethod(Person obj){ obj.eat()}, 你分別傳進三個對象:man,woman,notmannotwoan的,好了,你猜對了,調用的都是復寫之後的,各個類裡面的方法
3. java向上造型
正確的有 P0=P1 P0=P2 P4=P2 只要創建對象沒錯 就直接看引用,誰是爸爸誰在左邊等著兒子賦值就行了。
4. JAVA常用編譯器,教程
編譯器當然是 eclipse~~
http://www.eclipse.org/downloads/
再加上 Myeclipse
http://www.myeclipseide.com/Downloads%2Bindex-req-viewsdownload-sid-15.html
教程已經發到你郵箱了!
其實最好的教程就是多寫代碼!多出錯,自然以後知道的就更多!
5. java語言編譯器是怎樣編寫的,源代碼是什麼
編譯器本身就是一個應用程序,編譯器涉及到底層的一些操作,對執行要求比較高的地方使用匯編語言編寫的,主要的還是用C語言來編寫實現的,在Java的安裝路徑下的bin目錄下有很多的*.exe可執行文件,像jar.exe、javac.exe、java.exe等等,Java編譯器這東西它好像不是開源的,如果你對編譯器的實現感興趣的話,推薦你看一本《編譯原理》這本書,這本書對你了解編譯器的實現原理有很大的幫助的。
6. java向上造型有什麼作用為什麼要造型,有什麼效果
向上造型:父類的引用指向子類的對象。
向上造型可以大大提高程序的可擴展性。利於代碼維護。
面向對象的三大特性:封裝;繼承;多態。向上造型可以看做多態的一種體現。即允許一種類型有不同的實現(可以理解為事物存在的多種體現形態)。
典型應用:介面。
沒有什麼效果,只是是代碼精簡而已
7. 我想用JAVA做個簡易編譯器,說說思路,或者有沒有現成的代碼JAVAC的代碼有嗎
要寫編譯器?自己開發語言?很牛X,先贊一個!
自己寫編譯器,原理其實不難,就那麼點東西。找一個編譯原理看明白就OK了,詞法、語法、語義、語境。
這些東西用一些自動機,圖靈機,範式,正規之類的就可以搞定。分析嘛,什麼逆波蘭,樹形,一共也沒幾種的。
但最難做的是優化,還有機器代碼生成這二部分。
優化怎麼做?你的中間代碼放哪?先優化還是先生成中間代碼?
機器代碼怎麼搞?用匯編?還是直接和機器特性相關?
反正這二點我是暈,雖然原理還是那點東西,但真搞起來,我一點思路都沒有。。。
國內寫編譯器的有,但都不是很牛X。
想要寫好,還得多看E文資料。
加油吧。
8. java中,向上造型,必須要實現介面嗎
介面(interface )
如果一個抽象類中的所有方法都是抽象的,就可以將這個類用另外一種方式來定義,也就是介面定義。
介面是抽象方法和常量值的定義的集合,從本質上講,介面是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變數和方法的實現
可以使用extends來繼承介面的常量和抽象方法,但它與類中的extends不同,它可以繼承有多個父介面(多重繼承),各父介面間用逗號隔開。
介面中的所有常量必須是public static final,方法必須是public abstract,這是系統默認的,不管你在定義介面時,寫不寫修飾符都是一樣的
定義介面
修飾符 interface 介面名 [extends 父介面列表]
{
常量域聲明
抽象方法聲明
}
class cat implements Animal
{
public void shout ()
{
int(「喵喵」);
}
}
實現介面
implements
一個類可以實現若干個介面
非抽象類必須實現所有的抽象方法
interface prt
{
public void prtln();
}
class A implements prt{
int a = 3;
public void prtln()
{
//輸出a;
}
}
class B implements prt{
int b = 4;
public void prtln()
{
//輸出b;
}
}
public class MyInterfaceDemo
{
public static void dost(prt c)
{
tln();
}
public static void main(String[] args)
{
A a1 = new A();
B b1 = new B();
st(a1);
st(b1);
}
}
9. 用java做一個java的編譯器
Javac編譯器讀取Java源代碼,並將其編譯成位元組代碼,說的直白一點就是把java語言翻譯成計算機可以識別的二進制代碼。
java的編譯器有很多種,有sun公司的jdk,有oracle的jdk,還有其他一些公司的,多採用sun公司的jdk。
java同時需要集成開發環境,它集成了java的編譯器,讓我們不必通過命令行來編譯java類文件,通過它我們可以快速的開發我們需要的程序。目前用的比較多的集成開發環境有eclipse和myeclipse,eclipse有很多具有針對性的版本來應對不同的開發,而myeclipse則是相對來說功能比較全面,當然也需要購買,個人建議myeclipse。
10. java裡面的向上造型是什麼_抽象類和介面有什麼關系c++裡面的虛函數是java裡面的介面
向上造型一個泛型對象的引用
例如,假設我們有很多箱子,每個箱子里都裝有不同的水果,我們需要找到一種方法能夠通用的處理任何一箱水果。更通俗的說法,A是B的子類型,我們需要找到一種方法能夠將C<A>類型的實例賦給一個C<B>類型的聲明。
為了完成這種操作,我們需要使用帶有通配符的擴展聲明,就像下面的例子里那樣:
List<Apple>apples=newArrayList<Apple>();
List<?extendsFruit>fruits=apples;
「? extends」是泛型類型的子類型相關性成為現實:Apple是Fruit的子類型,List<Apple> 是 List<? extends Fruit> 的子類型。
JAVA中抽象類與介面是java語言中對抽象概念進行定義的兩種機制。
我們都知道在面向對象的領域一切都是對象,同時所有的對象都是通過類來描述的,但是並不是所有的類都是來描述對象的。如果一個類沒有足夠的信息來描述一個具體的對象,而需要其他具體的類來支撐它,那麼這樣的類我們稱它為抽象類。比如new Animal(),我們都知道這個是產生一個動物Animal對象,但是這個Animal具體長成什麼樣子我們並不知道,它沒有一個具體動物的概念,所以他就是一個抽象類,需要一個具體的動物,如狗、貓來對它進行特定的描述,我們才知道它長成啥樣。
介面是一種比抽象類更加抽象的「類」。這里給「類」加引號是我找不到更好的詞來表示,但是我們要明確一點就是,介面本身就不是類。 介面是用來建立類與類之間的協議,它所提供的只是一種形式,而沒有具體的實現。同時實現該介面的實現類必須要實現該介面的所有方法,通過使用implements關鍵字,他表示該類在遵循某個或某組特定的介面,同時也表示著「interface只是它的外貌,但是現在需要聲明它是如何工作的」。
區別如下:
在語法層次,java語言對於抽象類和介面分別給出了不同的定義。
抽象層次不同。抽象類是對類抽象,而介面是對行為的抽象。抽象類是對整個類整體進行抽象,包括屬性、行為,但是介面卻是對類局部(行為)進行抽象。
跨域不同。抽象類所跨域的是具有相似特點的類,而介面卻可以跨域不同的類。
設計層次不同。對於抽象類而言,它是自下而上來設計的,我們要先知道子類才能抽象出父類,而介面則不同,它根本就不需要知道子類的存在,只需要定義一個規則即可。
C++的虛函數和JAVA的interface
Java中的interface實現了函數多態性,並且實現了完全抽象的類。在這里還要提一下引用。因為interface實現了完全抽象的類,在介面中定義的方法完全看不到任何實現,而且也不能有任何的實現,介面中聲明的類必須在引用其的類中實現。而多態性的實現正是通過不同引用中的不同的方法實現。
C++中的虛函數也和Java中介面類似,C++中的虛函數同樣是將介面和實現分離,從而實現多態性。為了使用多態性,需要在基類中使用virtual來聲明虛函數。所以,虛函數是在基類中定義,在其子類中重寫實現,也可重寫基類的函數。在使用虛函數的的時候,需要定義基類的指針來使用虛函數,否則就失去了虛函數的意義。
其實兩者都是為了實現多態性而存在,都需要通過繼承來實現,只是Java中稱為引用,與C++中的繼承也是大同小異。