方法的重载:
1. 方法重载的目的:为了让方法名相同而形参不同的构造方法同时存在,必须用到“方法重载”。
2. 方法重载的判断条件:参数个数不同或参数类型不同。返回值不是判断条件。
构造方法:
1. 方法名称与类名相同。
2. 无返回值,不用void修饰。
重载与重写的区别:
| 重载方法 | 重写方法 |
参数列表 | 必须修改 | 一定不能改 |
返回类型 | 可以任意修改 | 对于基本数据类型必须相同,对于对象引用类型必须能够兼容。 |
访问限制 | 可以修改 | 一定不能做更严格的限制,但可以降低访问限制 |
调用 | 参数类型决定选择哪个重载版本 | 对象类型决定调用什么样的方法。 |
本质区别:重载不是面向对象的,只是高级语言为了使用方便而提供的特性,而重写是完全属于面向对象的。
实例分析:
//方法的重载:参数类型,个数不同.返回值不能作为判断条件
public class Test1{
public static void main(String args[])
{
Test 1 a =new Test1();
a.kk();
a.kk(5);
}
void kk()
{
System.out.println("void kk1");
}
void kk(int i)
{
System.out.println("void kk2");
}
int kk(int x,double y)
{
System.out.println("void kk3");
return 5;
}
int kk(int x,int y)
{
System.out.println("void kk4");
return 3;
}
int kk(double x,int y)
{
System.out.println("void kk5");
return 3;
}
//构造方法的使用,构造器,一旦自己写了构造器,系统就不再用默认构造器。
public class Test1{
int sage;
String sname;
int sclass;
public Test1()//创建对象时调用,不准写返回值类型(void 也不行),名称必须跟类名相同
{
System.out.println("Test1");
}
public Test1(int sage)
{
this.sage=sage;//this代表类中的全局变量sage
System.out.println("name:"+sname+" class:"+sclass+" sage:"+sage);
}
public Test1(int sage,String sname)
{
this(sage);//this 代表上一个单参数构造器
this.sname=sname;
System.out.println("name:"+sname+" class:"+sclass+" sage:"+sage);
}
public Test1(String sname,int sage,int sclass)
{
this(sage,sname);//this代表上一个双参数的构造器
this.sclass=sclass;
System.out.println("name:"+sname+" class:"+sclass+" sage:"+sage);
}
public static void main(String args[])
{
// Test1 st=new Test1();
// Test1 st2=new Test1();
// new Test1(22);
Test1 st3=new Test1(20);
Test1 st4=new Test1(22,"yangzhanghui");
Test1 st5=new Test1("Yangzhanghui",22,1);
}
}