上一篇文章:Java中的数学函数、实例成员与类成员
Java中的两种多态:重载(Overload)和重写(Override),重写是与继承 *有关的多态。
方法重载
方法重载 通俗讲就是在类体中定义了一些方法名相同的方法。虽然方法名相同,但是每个方法的参数个数或参数类型不同,以此来区分不同的方法,防止歧义。
class Compute { //Compute类
static int aplusb(int x, int y){ //定义一个类方法
return x + y;
}
static double aplusb(double x, int y){
return x + y;
}
static float aplusb(float x, int y){
return x + y;
}
}
public class Example {
public static void main(String args[]){
System.out.println(Compute.aplusb(3, 3)); //类方法可以通过类名直接调用
System.out.println(Compute.aplusb(3.0, 3));
System.out.println(Compute.aplusb(3.0F, 3));
}
}
class Compute {
float aplusb(int a, int b){ //实例方法
return a + b;
}
static double aplusb(double a, int b){ //类方法
return a + b;
}
}
class Example {
public static void main(String args[]){
System.out.println(Compute.aplusb(3.0, 3)); //类方法通过类名直接调用
//实例方法使用前必须先创建一个该类的对象
Compute com = new Compute(); //创建一个名为com的Compute类对象
System.out.println(com.aplusb(3, 3));
System.out.println(com.aplusb(3.0, 3)); //创建的对象既可以调用实例方法,也可以调用类方法
}
}
this关键字
用在实例方法中调用成员变量
在实例方法中使用成员变量 this.成员变量名
class A {
int num = 666;
void outPut(){
System.out.println("成员变量num: "+this.num);
}
}
public class Example {
public static void main(String args[]){
A a = new A();
a.outPut();
}
}
一般情况下,没有局部变量与成员变量重名,this都是省略的:
class A {
int num = 666;
void outPut(){
System.out.println("成员变量num: "+num);
}
}
public class Example {
public static void main(String args[]){
A a = new A();
a.outPut();
}
}
方法体内部的局部变量与成员变量重名时
//使用this关键字之前
class A {
int num = 666; //成员变量
void outPut(){ //定义了一个无返回值的方法
int num = 777; //局部变量num与成员变量num重名了
System.out.println("此时输出的num是局部变量num"+num);
}
}
public class Example {
public static void main(String args[]){
A a = new A(); //创建一个A类的对象a
a.outPut(); //调用方法
}
}
//使用this关键字之后
class A {
int num = 666; //成员变量
void outPut(){ //定义了一个无返回值的方法
int num = 777; //局部变量num与成员变量num重名了
System.out.println("此时输出的num是成员变量num"+this.num);
}
}
public class Example {
public static void main(String args[]){
A a = new A(); //创建一个A类的对象a
a.outPut(); //调用方法
}
}
用在构造方法中调用本类体中的方法
class Example {
Example(){
this.outPut(); //在构造方法中调用本类体当中的方法
}
void outPut(){
System.out.println("java编程真有趣");
}
public static void main(String args[]){
Example a = new Example();
}
}
为了简化,在这种情况下,this关键字也可以省去:
//在这种情况下,this关键字也可以省去
class Example {
Example(){
outPut(); //在构造方法中调用本类体当中的方法,省去this关键字
}
void outPut(){
System.out.println("java编程真有趣");
}
public static void main(String args[]){
Example a = new Example();
}
}
用在构造方法中调用本类体中其他的构造方法
class Example {
int a;
int b;
double c;
Example(int x, int y){
a = x;
b = y;
}
Example(int x, int y, double z){
this(x, y); //调用了上面的那个构造方法
c = z;
}
public static void main(String args[]){
Example a = new Example(666, 999, 1.314);
System.out.println(a.a);
System.out.println(a.b);
System.out.println(a.c);
}
}
这种写法是为了简化写法,等效于:
class Example {
int a;
int b;
double c;
Example(int x, int y){
a = x;
b = y;
}
Example(int x, int y, double z){
a = x;
b = y;
c = z;
}
public static void main(String args[]){
Example a = new Example(666, 999, 1.314);
System.out.println(a.a);
System.out.println(a.b);
System.out.println(a.c);
}
}