Java學習(四)
阿新 • • 發佈:2018-02-03
div ++ 編譯 指針 c++ 所有 end xtend 利用
Java中類的操作與C++中基本相同,但舍棄了一些比較復雜但實際用處不多的操作,比如多繼承,在此用接口來表示。
1 package helloWorld; 2 3 public class Class { 4 private int n; 5 public Class() 6 { 7 this(1);//相當於public Class(1) {this.n=n;} 8 } 9 public Class(int n) 10 { 11 this.n=n; 12 } 13 14 voidprint() 15 { 16 System.out.println(n); 17 } 18 } 19 20 class ClassTemp extends Class 21 { 22 int m; 23 24 /* 25 * 類的初始化 26 */ 27 public ClassTemp(int n) 28 { 29 this.m=n; 30 } 31 32 /* 33 * 添加自定義函數 34 */ 35 public void run()36 { 37 System.out.println("Hello World!"); 38 } 39 40 /* 41 * 覆蓋 42 * @see helloWorld.Class#print() 43 */ 44 @Override 45 void print() 46 { 47 System.out.println(m); 48 } 49 }
類的繼承需要用extends來表示,函數的覆蓋需要在函數前用@Override來聲明(也可以不加)。子類繼承父類的所有字段Field、非私有方法Method。但是不繼承構造方法。
在類中存在重載,即函數同名時可以通過變量名來區分不同的函數。以下就是兩個不同的函數。
1 void print(String str) 2 { 3 System.out.println(str); 4 } 5 6 void print(String str1,String str2) 7 { 8 System.out.println(str1+str2); 9 }
在編譯器中,編譯器會自動生成如下名稱,用於預留空間給將要存儲的數據。在代碼中相同的函數名,實際上在編譯器中是不相同的。
$print_String
$print_String_String
在Java中還有一個與this指針相類似的關鍵字——super。super可以用於指向父類的字段、方法和構造函數,但不能指向子類。
super與this的異同:1.this指向本類中包含的關鍵字、 方法;而super只是指向父類的關鍵字、方法、構造函數。2.this指針很難區分子類與父類重名的情況,包括字段重名、方法重名;而super可以讓兩重名字段與方法相互賦值。
3.子類的構造方法通過super調用父類的構造方法來減少工作量。4.super訪問父類的關鍵字或方法時,其權限要為protected或public,否則不能訪問。5.this和super都不能與static字段共存。
此外,在使用this和super指針時,都需要將其放在方法中的第一行,否則會出錯。
以下是由上面更該的一些程序:
1 package helloWorld; 2 3 public class Class { 4 private int n; 5 protected int p; 6 public Class() 7 { 8 this(1);//相當於public Class(1) {this.n=n;} 9 } 10 public Class(int n) 11 { 12 this.n=n; 13 } 14 15 void print() 16 { 17 System.out.println(n); 18 } 19 } 20 21 class ClassTemp extends Class 22 { 23 int m; 24 int n; 25 26 /* 27 * 類的初始化 28 */ 29 public ClassTemp(int a,int b,int c ) 30 { 31 super(a);//利用super調用父類Class的構造函數 32 m=b; 33 this.n=c; 34 super.p=c;//訪問父類字段需要使用protected或public 35 } 36 37 /* 38 * 添加自定義函數 39 */ 40 public void run() 41 { 42 super.print();//利用super調用父類的函數 43 System.out.println("Hello World!"); 44 } 45 46 /* 47 * 重載 48 * @see helloWorld.Class#print() 49 */ 50 @Override 51 void print() 52 { 53 System.out.println(m); 54 } 55 56 }
Java學習(四)