1. 程式人生 > >Java學習(四)

Java學習(四)

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     void
print() 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學習(四)