Java 中类的操作与 C++ 中基本相同, 但舍弃了一些比较复杂但实际用处不多的操作, 比如多继承, 在此用接口来表示.
package helloWorld;
public class Class {
private int n;
public Class()
{this(1);// 相当于 public Class(1) {this.n=n;}
}
public Class(int n)
{
this.n=n;
}
void print()
{
System.out.println(n);
}
}
class ClassTemp extends Class
{
int m;
/*
* 类的初始化
*/
public ClassTemp(int n)
{
this.m=n;
}
/*
* 添加自定义函数
*/
public void run()
{
System.out.println("Hello World!");
}
/*
* 覆盖
* @see helloWorld.Class#print()
*/
@Override
void print()
{
System.out.println(m);
}
}
类的继承需要用 extends 来表示, 函数的覆盖需要在函数前用 @Override 来声明 (也可以不加). 子类继承父类的所有字段 Field, 非私有方法 Method. 但是不继承构造方法.
在类中存在重载, 即函数同名时可以通过变量名来区分不同的函数. 以下就是两个不同的函数.
void print(String str)
{
System.out.println(str);
}
void print(String str1,String str2)
{
System.out.println(str1+str2);
}
在编译器中, 编译器会自动生成如下名称, 用于预留空间给将要存储的数据. 在代码中相同的函数名, 实际上在编译器中是不相同的.
$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 指针时, 都需要将其放在方法中的第一行, 否则会出错.
以下是由上面更该的一些程序:
package helloWorld;
public class Class {
private int n;
protected int p;
public Class()
{
this(1);// 相当于 public Class(1) {this.n=n;}
}
public Class(int n)
{
this.n=n;
}
void print()
{
System.out.println(n);
}
}
class ClassTemp extends Class
{
int m;
int n;
/*
* 类的初始化
*/
public ClassTemp(int a,int b,int c )
{
super(a);// 利用 super 调用父类 Class 的构造函数
m=b;
this.n=c;
super.p=c;// 访问父类字段需要使用 protected 或 public
}
/*
* 添加自定义函数
*/
public void run()
{
super.print();// 利用 super 调用父类的函数
System.out.println("Hello World!");
}
/*
* 重载
* @see helloWorld.Class#print()
*/
@Override
void print()
{
System.out.println(m);
}
}
来源: http://www.bubuko.com/infodetail-2485480.html