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 }