導航:首頁 > 編程語言 > JAVA虛基類

JAVA虛基類

發布時間:2022-04-05 05:42:46

java語言的虛函數是怎麼樣的

java中並沒有virtual關鍵字指示一個函數就是虛函數,java中的普通函數就相當於C++中的虛函數,抽象函數相當於C++中的純虛函數。


publicclassDemo2{
publicstaticvoidmain(String[]args){

Parentp=newChild();
p.print();
p.func1();
}
}

abstractclassParent{

//抽象函數
publicabstractvoidprint();

//普通函數
publicvoidfunc1(){
System.out.println("Parentfunc1");
}
}

classChildextendsParent{

//實現抽象函數
publicvoidprint(){
System.out.println("Child");
}

//覆蓋父類的func1函數
publicvoidfunc1(){
System.out.println("Childfunc1");
}
}

Ⅱ Java的特點有哪些

Java是一種優秀的程序設計語言,它具有令人賞心悅目的語法和易於理解的語義。不僅如此,Java還是一個由一系列計算機軟體和規范形成的技術體系,這個技術體系提供了完整的用於軟體開發和跨平台部署的支持環境,並廣泛應用於嵌入式系統、移動終端、企業伺服器、大型機等各種場合。順便說一下,JavaScript和Java沒有任何關系,最開始JavaScript叫liveScript,當時Java太火了,於是乎 liveScript更名為JavaScript借勢宣傳了一波。

隨便搜搜近幾年的編程類語言排行榜,Java絕對都是當之無愧的老大哥。那麼,Java究竟有什麼特性能獲得 廣大程序員的一致青睞呢? 在此列出java的11個特性:

1.簡單性

Java語法是C++語法的一個「純凈版本」。這里沒有頭文件,指針運算(甚至指針語法),結構,聯合,操作符重載,虛基類等等。不僅如此,Java開發環境遠遠超出大多數其他編程語言的開發環境。

2.面向對象

什麼是面向對象?用木匠打一個比方,一個「面向對象」的木匠始終關注的是所製作的椅子,第二位才是所使用的工具;而一個「非面向對象」木匠首先考慮的是所使用的工具。

在Java的世界裡,一切皆對象。

Java的面向對象特性與C++旗鼓相當,與C++不同的點在於多重繼承。在Java中,取而代之的是更簡單的介面概念。而且與C++想比,Java提供了更豐富非運行時自省功能。

3.分布式(微服務)

Java有豐富的常式庫,用於處理HTTP和FTP之類的TCP/IP協議。Java應用程序能夠通過URL打開和訪問網路上的對象,其便捷程度就好像訪問本地文件一樣。

4.健壯性

Java與C++最大的不同在於Java使用的指針模型可以消除重寫內存和損壞數據的可能性(對於曾經花費幾個小時來檢查由於指針bug而引起內存沖突的人來說,一定很喜歡Java的這一特性)。不僅如此,Java編譯器能夠檢測許多在其他語言中僅在運行時才能夠檢測出來的問題。

5.安全性

Java適用於網路/分式式環境。為了達到這個目標,在安全性方面投入了大量的精力。使用Java可以構建防病毒,防篡改的系統。

從一開始,Java就設計出能夠防範常見的各種攻擊:

(1)運行時堆棧溢出。蠕蟲和病毒常用的攻擊手段。(2)破壞自己進程空間之外的內存。(3)未經授權讀寫文件。

6.體系結構中立

編譯器生成一個體系結構中立的目標文件格式,這是一種編譯過的代碼,只要有Java運行時系統,這些編譯後的代碼就可以在許多處理器上運行。Java編譯器通過生成與特定計算機體系結構無關的位元組碼指令來實現這一特性。精心設計的位元組碼不僅可以很容易的在任何機器上解釋執行,而且還可以動態地翻譯成本地機器代碼。

7.可移植性

與C/C++不同,Java規范中沒有「依賴具體實現的地方」。基本數據類型的大小以及有關運算都做了明確的說明。例如,Java中的int永遠是32位的整數,二在C/C++中,int可能是16位整數,32位整數,也可能是編譯器提供商指定的其他大小。在Java中,數據類型具有固定的大小,這消除了代碼代碼移植時令人頭疼的主要問題。

8.解釋型

Java解釋器可以再任何移植了解解釋器的機器上執行Java位元組碼。由於鏈接是一個增量式且輕量級的過程。所以開發過程也變得更加快捷,更加具有探索性。

9.高能性

盡管對解釋後的位元組碼性能已經比較滿意,但是在某些場合下可能需要更加高效的性能。位元組碼可以(在運行時刻)動態的翻譯成對應運行這個應用的特定CPU的機器碼。

10.多線程

Java在當時很超前,他是第一個支持並發程序設計的主流語言,多線程可以帶來更好的交互影響和實時行為。並發程序設計絕非易事,但是Java在這方面表現出色,可以很好的管理這個工作。

11.動態性

Java與C/C++相比更具有動態性。它能夠適應不斷發展的環境。庫中可以自由的添加新方法和實例變數,而對客戶端沒有任何影響。在Java中找出運行時類型信息十分簡單。

Ⅲ Java 三種 node 的區別是什麼

JsonNode是一個虛基類,ObjectNode是其子類的具體實現用來存儲字典,ArrayNode也是其子類用來存儲數組類型。

Ⅳ JAVA的技術特點是什麼

JAVA的技術特點是什麼?

Java由美國SUN公司(被oracle公司收購)發明於1995年,是目前業界應用最廣泛、使用人數最多的語言,連續多年排名世界第一,可以稱之為「計算機語言界的英語」。

那麼Java這么高的評價它的特點有哪些,下面我來為題主解答:

一、跨平台/可移植性

這是Java的核心優勢。Java在設計時就很注重移植和跨平台性。比如:Java的int永遠都是32位。不像C++可能是16,32,可能是根據編譯器廠商規定的變化。這樣的話程序的移植就會非常麻煩。

Java首先利用文本編輯器編寫 Java源程序,源文件的後綴名為.java;再利用編譯器(javac)將源程序編譯成位元組碼文件,位元組碼文件的後綴名為.class; 最後利用虛擬機(解釋器,java)解釋執行。如下圖所示:

二、安全性

Java適合於網路/分布式環境,為了達到這個目標,在安全性方面投入了很大的精力,使Java可以很容易構建防病毒,防篡改的系統。比如Java取消了強大但又危險的指針。由於指針可進行移動運算,指針可隨便指向一個內存區域,而不管這個區域是否可用,這樣做是危險的。

三、面向對象

面向對象是一種程序設計技術,非常適合大型軟體的設計和開發。由於C++為了照顧大量C語言使用者而兼容了C,使得自身僅僅成為了帶類的C語言,多少影響了其面向對象的徹底性!Java則是完全的面向對象語言。

四、簡單性

Java就是C++語法的簡化版,我們也可以將Java稱之為「C++-」。跟我念「C加加減」,指的就是將C++的一些內容去掉;比如:頭文件,指針運算,結構,聯合,操作符重載,虛基類等等。同時,由於語法基於C語言,因此學習起來完全不費力。

五、高性能

Java最初發展階段,總是被人詬病「性能低」;客觀上,高級語言運行效率總是低於低級語言的,這個無法避免。Java語言本身發展中通過虛擬機的優化提升了幾十倍運行效率。比如,通過JIT(JUST IN TIME)即時編譯技術提高運行效率。 將一些「熱點」位元組碼編譯成本地機器碼,並將結果緩存起來,在需要的時候重新調用。這樣的話,使Java程序的執行效率大大提高,某些代碼甚至接近C++的效率。

因此,Java低性能的短腿,已經被完全解決了。業界發展上,我們也看到很多C++應用轉到Java開發,很多C++程序員轉型為Java程序員。

六、分布式

Java是為Internet的分布式環境設計的,因為它能夠處理TCP/IP協議。事實上,通過URL訪問一個網路資源和訪問本地文件是一樣簡單的。Java還支持遠程方法調用(RMI,Remote Method Invocation),使程序能夠通過網路調用方法。

七、多線程

多線程的使用可以帶來更好的交互響應和實時行為。 Java多線程的簡單性是Java成為主流伺服器端開發語言的主要原因之一。

八、健壯性

Java是一種健壯的語言,吸收了C/C++ 語言的優點,但去掉了其影響程序健壯性的部分(如:指針、內存的申請與釋放等)。Java程序不可能造成計算機崩潰。即使Java程序也可能有錯誤。如果出現某種出乎意料之事,程序也不會崩潰,而是把該異常拋出,再通過異常處理機制加以處理。

以上幾種特性你了解到啦嗎? 記得給個贊!

當然這些還沒完,Java除啦這些特性還有一些其他的特點我也來給你講一講!!

1.java的風格類似C++,從某種意義上講,java是C++的一個變種。但是java摒棄了C、C++中的容易引發錯誤和難以理解的指針,結構,以及內存管理等;

2.java是一種強類型的語言,比C/C++檢查還要嚴格,java區分大小寫字母;

3.java禁止非法訪問內存,因為java沒有指針,內存的申請和釋放;

4.對於不同的操作系統,會有不同的java虛擬機,這也就決定了java的可移植性;

5.java提供了自動垃圾回收機制gc,有效避免了C、C++的內存泄漏問題;

記得給個贊!

Ⅳ C++中的虛函數和JAVA中的抽象方法有什麼區別

C++虛函數與JAVA中抽象函數比較
1:java中沒有虛函數的概念,但是有抽象函數的概念,用abstract關鍵字表示,java中抽象函數必須在抽象類中,而且抽象 函數不能有函數體,抽象類不能被實例化,只能由其子類實現抽象函數,如果某個抽象類的子類仍是抽象類,那麼該子類不需要實現其父類的抽象函數。
2:C++中的有虛函數的概念,用virtual 關鍵字來表示,每個類都會有一個虛函數表,該虛函數表首先會從父類中繼承得到父類的虛函數表, 如果子類中重寫了父類的虛函數(不管重寫後的函數是否為虛函數),要調用哪個虛函數,是根據當前實際的對象來判斷的(不管指針所屬類型是否為當前類,有可 能是父類型),指針當前指向的是哪種類型的對象,就調用哪個類型中類定義的虛函數。每個類只有一張虛擬函數表,所有的對象共用這張表。
C++的函數多態就是通過虛函數來實現的。
3:C++中,如果函數不是虛函數,則調用某個函數,是根據當前指針類型來判斷的,並不是根據指針所指向對象的類型。
4:Java中,如果函數不是抽象函數,而是一個普通函數,它是默認實現類似C++中虛函數功能的,也就是說,調用某個函數,是根據當前指針所指向對象的類型來判斷的,而不是根據指針類型判斷。正好與C++中的普通函數相反。即:JAVA里自動實現了虛函數。

C++ Java
虛函數 -------- 普通函數
純虛函數 -------- 抽象函數
抽象類 -------- 抽象類
虛基類 -------- 介面
純虛函數: 主要特徵是不能被用來聲明對象,是抽象類,是用來確保程序結構與應用域的結構據具有直接映射關系的設計工具。帶有純虛函數的類稱為抽象類,抽象類能被子類 繼承使用,在子類中必須給出純虛函數的實現,如果子類未給出該純虛函數的實現,那麼該子類也是抽象類,只有在子類不存在純虛函數時,子類才可以用來聲明對 象!抽象類也能用於聲明指針或引用,或用於函數聲明中。具有抽象類特性的類還有構造函數和析構函數,全部是保護的類。如果沒有給出純虛函數的實現,則在它 所在的類的構造函數或析構函數中不能直接或間接的調用它。純虛函數的實現可以在類聲明外進行定義。
5. C++中一般都是把析構函數聲明為虛函數。因為虛函數可以實現動態綁定,也就是到底調用哪個函數是根據指針當前指向哪個對象來確定的,不是根據指針的類型來確定。如果C++中不把析構函數聲明為虛函數,那麼其有個子類,重寫了虛函數,那麼當父類指針指向一個子類對象時,當調用析構函數時,只調用父類的析構函數,而無法調用子類的析構函數,所以一般情況是把析構函數聲明為虛函數,實現動態綁定。當然如果一個類不包含虛函數,這經常預示不打算將它作為基類使用。當一個類不打算作為基類時,將析構函數聲明為虛擬通常是個壞主意。
標准 string 類型不包含虛函數,如果把String作為基類繼承得到子類會出問題。
總之:多態基類應該聲明虛析構函數。如果一個類有任何虛函數,它就應該有一個虛析構函數;如果不是設計用於做基類或不是設計用於多態,這樣的類就不應該聲明虛析構函數。
關於介面與抽象類:
c++中沒有介面的概念,與之對應的是純虛類,即只含有純虛函數的類,c++抽象類的概念是含有純虛函數成員的類。這是因為c++提供多繼承,而像java、c#這些只提供單繼承(避免多繼承的復雜性和低效性)的語言為了模擬多繼承功能就提供了介面概念,介面可以繼承多個。
abstract class是抽象類,至少包含一個純虛函數的類就叫做抽象類。
但是如果一個類,所有的成員都是純虛函數,那麼它和一般的抽象類在用法上是有區別的。至少microsoft給的com介面定義全部都是僅由純虛函數構成的類。因此把這樣的類定義叫做純虛類也不算錯。
純虛函數和虛函數的區別在於前者不包含定義,而後者包含函數體。
那麼純虛類就是不包含任何實現(包括成員函數定義和成員變數定義。前者代表演算法,後者代表結構)。不包含任何演算法和結構的類叫做純虛類,應該沒有問題。
在java裡面的確沒有純虛類的概念,因為java里沒有純虛函數這個概念。java管虛函數叫做abstract function,管抽象類叫做abstract class,直接說來,java根本沒有virtual這個關鍵字,都用abstract代替,因此java裡面根本就沒有pure這個概念。有那就是interface。在interface裡面定義的函數都不能有函數體,這個在java裡面叫做介面。那麼c++裡面與interface等同的概念就是純虛類了,c++用純虛類來模擬interface這個抽象概念,因此這里說的「純虛類」與java的abstract class不同,與c++的一般抽象類也不同。「純虛類」與c++一般抽象類的區別就好比java裡面interface 和 abstract class的區別。
抽象類只能作為基類來使用,其純虛函數的實現由派生類給出。如果派生類中沒有重新定義純虛函數,而只是繼承基類的純虛函數,則這個派生類仍然還是一個抽象類。如果派生類中給出了基類純虛函數的實現,則該派生類就不再是抽象類了,它是一個可以建立對象的具體的類。
抽象類是不能定義對象的。

Ⅵ java里有虛函數這個概念嗎

沒有,是C++特權,不過跟JAVA抽象類的方法或介面中的方法有一定的相似度,但是有深層次的意義即:動態聯編。也就是在程序的運行階段動態地選擇合適的成員函數

Ⅶ java與c++在虛函數方面的異同

java與C++的虛函數比較java與C++的虛函數比較

class base
{
private void print()
{
System.out.println("base");
}
public void doprint()
{
print();
}

}

class derive extends base
{
private void print()
{
System.out.println("derive");
}

}

class testVirtual
{
public static void main(String args[])
{
base b = new derive();
b.doprint();
}

}
運行結果:base

----------------------------------------------------------------------------

c++例子

class base
{
private:
virtual void print()
{
printf("base\n");
}

public:
void doprint()
{
print();
}
virtual ~base(){}
};

class derived : public base
{
virtual void print()
{
printf("derived\n");
}
};

int main(int argc, char* argv[])
{
derived d;
base& b = d;
b.doprint();
return 0;
}

運行結果:

derived

----------------------------------------------------------------
如果將上面JAVA中的private改為public, 則運行結果為derived

通過上面的例子, 應該可以看出C++與JAVA的虛函數異同點.

網上還有人把這二者的總結用下面的對比描述了一下:
C++ Java
虛函數 -------- 普通函數
純虛函數 -------- 抽象函數
抽象類 -------- 抽象類
虛基類 -------- 介面

Ⅷ java語言的特點有哪些

1)簡單性
2)面向對象
3)分布式
4)健壯性
5)安全性
6)體系結構中立
7)可移植性
8)解釋型
9)高性能
10)多線程
11)動態性
1.簡單性:
Java語言是C++語言的一個「純凈」版本。沒有頭文件、指針運算、結構、聯合、操作符重載、虛基類等。
2.面向對象
面向對象即面向數據。Java的面向對象特性與C++旗鼓相當,Java與C++的主要不同點在於多繼承,在Java中,取而代之的是更簡單的介面概念。
3.分布式
Java有一個豐富的常式庫,用於處理像HTTP和FTP之類的TCP/IP協議。Java應用程序能夠通過URL打開和訪問網路上的對象,其便捷程度就像訪問本地文件一樣。
4.健壯性
Java編寫的程序具有多方面的可靠性。Java編譯器能夠檢測許多在其他語言中僅在運行時才能檢測出來的問題。
5.安全性
Java適用於網路/分布式環境。從一開始,Java程序能夠防範各種攻擊,其中包括:
運行時堆棧溢出。
破壞自己進程空間之外的內存。
未經授權讀寫文件。
6.體系結構中立
編譯器生成一個體系結構中立的目標文件格式,這是一種編譯過的代碼,只要有Java運行時系統,這些編譯後的代碼可以在許多處理器上運行。Java編譯器通過生成與特定的計算機體系結構無關的位元組碼指令來實現這一特性。
7.可移植性
例:Java中的int永遠為32位的整數,而C/C++中,int可能是16位整數、32位整數,也可能是編譯器提供商指定的其他大小。這樣的優點便消除了代碼移植的問題。
8.解釋型
Java解釋器可以在任何一隻了解釋器的機器上執行Java位元組碼。
9.高性能
位元組碼可以(在運行時刻)動態地翻譯成對應運行這個應用特定CPU的機器碼。
10.多線程
多線程可以帶來更好的交互響應和實時行為。如今大家非常關注並發性,我們不在追求更快的處理器,而是更多的處理器,Java是第一個支持並發的主流語言。
11.動態性
庫中可以自由地添加新方法和實例變數,而對客戶段沒有任何影響。

Ⅸ C++虛基類之問題!表達水平有限,請高手不吝賜教!

class A
{
public:
A(){cout<<"A"<<endl;}
int a;
};
class B:virtual public A
{
public:
B(){cout<<"B"<<endl;}
};
class C:virtual private A
{
public:
C(){cout<<"C"<<endl;}
};
class D:public B,private C
{
public:
D(){cout<<"D"<<endl;}
};
//////////////////////////////////////////////////
D d;
d.a = 1;
cout<<d.a<<endl;
一 ///////////////////////////////////
以這個代碼來看,只要D到A有public路徑,就可以訪問到A的變數(上例子路徑為D-B-A都是public)
若將這個路徑中的某一個改為,如B private A,(1),若無其他路徑,不能訪問A的變數(本例).(2)若有其他路徑(如果改為D public C,則路徑 D- C -A 通暢),可以訪問a.
二 ///////////////////
而調整class D:public B,private C為class D:private C, public B
則構造順序由ABCD,變為ACBD.
--->構造順序與訪問路徑無關

/////////////////////
若有錯誤,請指教

Ⅹ Java主要有那些特性

Java主要有哪些的特性?

Java由美國SUN公司(被oracle公司收購)發明於1995年,是目前業界應用最廣泛、使用人數最多的語言,連續多年排名世界第一,可以稱之為「計算機語言界的英語」。

那麼Java這么高的評價它的特點有哪些,下面我來為題主解答:

一、跨平台/可移植性

這是Java的核心優勢。Java在設計時就很注重移植和跨平台性。比如:Java的int永遠都是32位。不像C++可能是16,32,可能是根據編譯器廠商規定的變化。這樣的話程序的移植就會非常麻煩。

Java首先利用文本編輯器編寫 Java源程序,源文件的後綴名為.java;再利用編譯器(javac)將源程序編譯成位元組碼文件,位元組碼文件的後綴名為.class; 最後利用虛擬機(解釋器,java)解釋執行。如下圖所示:

二、安全性

Java適合於網路/分布式環境,為了達到這個目標,在安全性方面投入了很大的精力,使Java可以很容易構建防病毒,防篡改的系統。比如Java取消了強大但又危險的指針。由於指針可進行移動運算,指針可隨便指向一個內存區域,而不管這個區域是否可用,這樣做是危險的。

三、面向對象

面向對象是一種程序設計技術,非常適合大型軟體的設計和開發。由於C++為了照顧大量C語言使用者而兼容了C,使得自身僅僅成為了帶類的C語言,多少影響了其面向對象的徹底性!Java則是完全的面向對象語言。

四、簡單性

Java就是C++語法的簡化版,我們也可以將Java稱之為「C++-」。跟我念「C加加減」,指的就是將C++的一些內容去掉;比如:頭文件,指針運算,結構,聯合,操作符重載,虛基類等等。同時,由於語法基於C語言,因此學習起來完全不費力。

五、高性能

Java最初發展階段,總是被人詬病「性能低」;客觀上,高級語言運行效率總是低於低級語言的,這個無法避免。Java語言本身發展中通過虛擬機的優化提升了幾十倍運行效率。比如,通過JIT(JUST IN TIME)即時編譯技術提高運行效率。 將一些「熱點」位元組碼編譯成本地機器碼,並將結果緩存起來,在需要的時候重新調用。這樣的話,使Java程序的執行效率大大提高,某些代碼甚至接近C++的效率。

因此,Java低性能的短腿,已經被完全解決了。業界發展上,我們也看到很多C++應用轉到Java開發,很多C++程序員轉型為Java程序員。

六、分布式

Java是為Internet的分布式環境設計的,因為它能夠處理TCP/IP協議。事實上,通過URL訪問一個網路資源和訪問本地文件是一樣簡單的。Java還支持遠程方法調用(RMI,Remote Method Invocation),使程序能夠通過網路調用方法。

七、多線程

多線程的使用可以帶來更好的交互響應和實時行為。 Java多線程的簡單性是Java成為主流伺服器端開發語言的主要原因之一。

八、健壯性

Java是一種健壯的語言,吸收了C/C++ 語言的優點,但去掉了其影響程序健壯性的部分(如:指針、內存的申請與釋放等)。Java程序不可能造成計算機崩潰。即使Java程序也可能有錯誤。如果出現某種出乎意料之事,程序也不會崩潰,而是把該異常拋出,再通過異常處理機制加以處理。

以上幾種特性你了解到啦嗎? 記得給個贊!

閱讀全文

與JAVA虛基類相關的資料

熱點內容
優信二手車解壓後過戶 瀏覽:61
Windows常用c編譯器 瀏覽:778
關於改善國家網路安全的行政命令 瀏覽:833
安卓如何下載網易荒野pc服 瀏覽:654
javainetaddress 瀏覽:104
蘋果4s固件下載完了怎麼解壓 瀏覽:1002
命令zpa 瀏覽:285
python編譯器小程序 瀏覽:944
在app上看視頻怎麼光線調暗 瀏覽:540
可以中文解壓的解壓軟體 瀏覽:592
安卓卸載組件應用怎麼安裝 瀏覽:912
使用面向對象編程的方式 瀏覽:339
程序員項目經理的年終總結範文 瀏覽:929
內衣的加密設計用來幹嘛的 瀏覽:432
淮安數據加密 瀏覽:292
魔高一丈指標源碼 瀏覽:982
松下php研究所 瀏覽:168
c回調java 瀏覽:399
夢幻端游長安地圖互通源碼 瀏覽:745
電腦本地文件如何上傳伺服器 瀏覽:313