訪問權限上,非private時Java的默認訪問權限是包。而C++的默認訪問權限是private。Java中:訪問權限首先看類前的修飾符,當類的修飾符爲public時,java
則類能夠被全部的類所訪問(能夠import),當爲默認時,程序員
則只能爲包中的類所訪問。在此前提下,再看屬性和方法前的修飾符。類前修飾符爲public時,當屬性和方法前的修飾符爲public時,則該屬性能夠被全部類訪問;當屬性和方法前爲protected修飾時,對於類定義而言,能夠被同包中的類和全部子類訪問(子類和父類能夠不在同一個包中),也就是B+C範圍,但對於對象而言,只能被同一個包的類對象所訪問,也就是B的範圍;當爲默認時,只能被同包中的類所訪問(比protected訪問權限小);當爲private時,只能被本類內部所訪問 。數組
聲明訪問權限時,C++能夠用冒號統一聲明,而Java則不行,得一一列舉。函數
Java調用非靜態方法和非靜態數據成員時,是用對象引用調用的,每一個對象引用都須要先new一下,指向對象空間。而C++是用對象實例調用非靜態方法和非靜態數據成員的。ui
Java都是一個類爲單元,方法和主函數都寫在類裏面。C++則能夠先聲明一個類,再在外面具體實現,必須有main函數爲入口執行。this
Java調用方法和數據成員都是用訪問操做符(.)。而C++能夠用(.)和(->)。C++中有指針的概念,Java中沒有指針的概念。指針
修飾方法爲常量屬性時,C++是在方法後加const,如:double accumulate(int date) **const** { return accumulation + balance * (date - lastDate); }
。而Java是用final在方法前面添加。如:private **final** double accumulate(int date) { return accumulation + balance * (date - lastDate);}
。修飾數據成員爲常量屬性時,則都在前面添加相應的修飾。code
Java每一個包的文件名和主類的名字必須相同。而C++則不必定。對象
SavingsAccount accounts[] = { SavingsAccount(date, "S3755217", 0.015), SavingsAccount(date, "02342342", 0.015) };
而Java必須new出對象初始化對象數組。如:SavingsAccount accounts[] = { new SavingsAccount(date, "S3755217", 0.015), new SavingsAccount(date, "02342342", 0.015)};
class SavingsAccount : public Account{};
。而Java使用extends關鍵字實現繼承。如:public class SavingsAccount extends Account {}
。C++中分爲公有繼承,私有繼承和保護繼承。 而Java中,子類繼承了父類的全部屬性和方法, 但只有public、protected的屬性和方法在子類是可見的。子類在繼承父類的時候,首先應該知足父類可被訪問,例如當子類和父類不在同一個包當中時,父類修飾符必爲public;在父類能被訪問的前提下,凡是修飾符爲public或是protected的父類屬性成員或是方法能被子類所訪問;private的屬性成員或是方法則不能被訪問。blog
Java中super訪問當前類的直接父類。用法有兩點。1.子類的數據成員或成員方法與父類的數據成員或成員方法名字相同時,當要調用父類的同名方法或同名數據成員時則可用super來指明。即super.數據成員;super.成員方法。2.super(參數) , 表示調用父類構造方法。如:public CreditAccount(final Date date, final String id, double credit, double rate, double fee){ super(date,id); this.credit=credit; this.rate=rate; this.fee=fee; this.acc=new Accumulator(date,0);}
,再如:public void show(){ **super.show();** System.out.println("\tAvailable credit:" + getAvailableCredit());}.
C++中,幾個概念的區別:即重載,重寫(覆蓋),以及重定義(同名隱藏)。 重載:指在同一做用域中容許有多個同名函數,而這些函數的參數列表不一樣,包括參數個數不一樣,類型不一樣,次序不一樣,須要注意的是返回值相同與否並不影響是否重載。重寫(覆蓋)和重定義(同名隱藏)則有點像,區別就是在寫重寫的函數是不是虛函數,只有重寫了虛函數的才能算做是體現了C++多態性,不然即爲重定義,在以前的代碼中,咱們看到子類繼承了基類的函數,如果子類(派生類)沒有函數,依舊會調用基類的函數,如果子類已重定義,則調用本身的函數,這就叫作同名隱藏。 1. 1. 虛函數:是在基類中使用關鍵字 virtual 聲明的函數。在派生類中從新定義基類中定義的虛函數時,會告訴編譯器不要靜態連接到該函數。
咱們想要的是在程序中任意點能夠根據所調用的對象類型來選擇調用的函數,這種操做被稱爲動態連接,或後期綁定。
2.純虛函數:想要在基類中定義虛函數,以便在派生類中從新定義該函數更好地適用於對象,可是您在基類中又不能對虛函數給出有意義的實現,這個時候就會用到純虛函數。
Java中,多態是指一個程序中同名的不一樣方法共存的狀況。提供兩種多態的機制:重載(overloading)與覆蓋(overriding)。重載:方法名稱相同,參數類型或個數不一樣。注意:若方法名稱相同,參數相同,僅有返回類型不一樣,則編譯不能經過。
//重載 class Parent{ public int getScore(){ return 3; } public int getScore(int i){ return i; } }
覆蓋:子類對父類的同名方法(方法名稱相同,參數相同,返回類型相同)從新進行定義,即在子類中定義與父類中已定義的同名而內容不一樣的方法。
覆蓋與重載的區別:
覆蓋:方法名稱相同,參數相同,返回類型相同
重載:方法名稱相同,參數類型或個數不一樣
在Java中,覆蓋須要注意的地方:
子類的訪問修飾符權限應等於或大於父類
抽象類中若是存在抽象方法,則具體子類必須對抽象方法進行覆蓋
此係統中,C++本身實現了一個模板類Array,而Java能夠直接用ArratList的泛型類 。 ArrayList
至關於C++ 的vector
,用於存儲對象。與數組不一樣,數組一旦建立,長度固定,可是ArrayList
的長度是動態的,不受限制,能夠存儲任意多的對象,可是隻能存儲對象,不能存儲原生數據類型例如int
。
ArrayList <Account> accounts=new ArrayList(); accounts.add(new SavingsAccount(date, id, rate)); accounts.add(new CreditAccount(date, id, credit,rate,fee));
從鍵盤中輸入的區別, C++給咱們提供的cin()獲取鍵盤輸入值的現成函數,Java中三種方法(做者剛入門Java,認知有限):
從控制檯接收一個字符,而後將其打印出來
import java.io.*; public static void main(String [] args) throws IOException{ System.out.print("Enter a Char:"); char i = (char) System.in.read(); System.out.println("your char is :"+i); }
從控制檯接收一個字符串,而後將其打印出來。 在這個題目中,咱們須要用到BufferedReader類和InputStreamReader類
import java.io.*; public static void main(String [] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = null; System.out.println("Enter your value:"); str = br.readLine(); System.out.println("your value is :"+str); }
第三中方法,感受最爲方便適用性最大,就是用Scanner類
import java.util.Scanner; public static void main(String [] args) { Scanner sc = new Scanner(System.in); System.out.println("請輸入你的姓名:"); String name = sc.nextLine(); System.out.println("請輸入你的年齡:"); int age = sc.nextInt(); System.out.println("請輸入你的工資:"); float salary = sc.nextFloat(); System.out.println("你的信息以下:"); System.out.println("姓名:"+name+"\n"+"年齡:"+age+"\n"+"工資:"+salary); }
next()和nextLine()的區別:
在java中,next()方法是不接收空格的,在接收到有效數據前,全部的空格或者tab鍵等輸入被忽略,如有有效數據,則遇到這些鍵退出。nextLine()能夠接收空格或者tab鍵,其輸入應該以enter鍵結束。
在執行nextInit()函數以後,敲擊了enter回車鍵,回車符會被 nextLine()函數吸取,其實是執行了nextLine()函數吸取了輸入的回車符(並非沒有執行nextLine函數),前面講到和 nextLine()功能同樣的函數next(),他們的區別就在於:next()函數不會接收回車符和tab,或者空格鍵等,因此在使用 nextLine()函數的時候,要注意敲擊的回車符有個被其吸取,致使程序出現BUG