JavaSE---02类的补充
1 匿名类的创建
new 类名();
2 方法的重写与重载
2.1 重载
方法的重载指的是方法名一样,但是参数类型不一样
- 特点:
- 与访问限定修饰符无关
- 与返回值类型无关
- 只与形参的个数、类型、顺序有关
public void attack() {
System.out.println(" 1111111111111");
}
public void attack(String h1) {
System.out.println("222222222222222 ");
}
protected String attack(String h1, String h2) {
System.out.println("333333333333333333333 ");
return h1 + h2;
}
protected String attack(String h2,int h1 ) {
System.out.println("444444444444444444444");
return h1 + h2;
}
protected String attack(int h1, String h2) {
System.out.println("555555555555555555555");
return h1 + h2;
}
2.1 重写
子类可以继承父类的对象方法。在继承后,重复提供该方法,就叫做方法的重写,又叫覆盖 override
- 特点:
- 参数列表必须完全与被重写方法的相同
- 返回类型与被重写方法的返回类型可以不相同,但是必须是父类或者及其子类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)
- 访问权限不能比父类中被重写的方法的访问权限更低
- 父类的成员方法只能被它的子类重写
- 声明为 final 的方法不能被重写。
- 声明为 static 的方法不能被重写,但是能够被再次声明。
- 能重写那些方法请看访问修饰符的限定
- 被重写的方法如果能抛出异常,那么重写的方法可以抛出父类抛出的异常及其子类,也可以不写
想看例子去这里:链接
3 可变形参
数据类型 … 变量名
- 调用可变形参的方法时,参数可以是0个以及多个
- 可变形参的方法名不变,形参数据类型改变,可以形成重载
private static void xx(String... aa) {
System.out.println(aa.length);
}
private static void xx(int... bb) {
System.out.println(bb.length);
}
- 可变形参的方法名不变,形参数据类型为数组,不可以形成重载
private static void xx(String... aa) {
System.out.println(aa.length);
}
private static void xx(String[] bb) {
System.out.println(bb.length);
}
- 可变形参的声明,只能在末尾声明,并且最多只有一个可变形参
private static void xx(int a,int... bb) {
System.out.println(bb.length);
}
4 方法参数的值传递
Java里面,方法的参数传递只有一种:
值传递
;即将实际传递的参数值的副本传入方法内,而参数本身不受影响
- 形参是基本数据类型:将实参基本数据类型变量的"数据值"传递给形参
public static void main(String[] args) {
int i = 1;
int j = 2;
swap(i, j);
System.out.println("main:"+i + "=========" + j);
}
private static void swap(int i, int j) {
int temp;
temp = i;
i = j;
j = temp;
System.out.println("swap:"+i + "-------" + j);
}
基本数据类型传递的是"数据值"的拷贝,在swap方法里面交换之后,方法被销毁,不会影响main里面的i与j的值
- 形参是引用数据类型:将实参引用数据类型变量的"地址值"传递给形参
public class C {
private int a = 10;
private int b = 20;
public static void main(String[] args) {
C c = new C();
swap(c);
System.out.println("main:" + c.a + "-------" + c.b);
}
private static void swap(C c) {
int temp;
temp = c.a;
c.a = c.b;
c.b = temp;
System.out.println("swap:" + c.a + "-------" + c.b);
}
}
引用数据类型传递的是"地址值",是把堆里面的地址复制给形参,形参不会改地址值,但是会改变这个地址里面所存在的数据。