上课时在一次遇到(重写和重载)和数组地址的问题居然忘记了一些细节,小记一次笔记
1.重写与重载
class Animal{
public void eat(){
System.out.println("吃东西的方法");
}
}
class Dog extends Animal{
public void eat(){
System.out.println("吃骨头"); //重写父类的方法
}
public void eat(int a){
System.out.println("吃了"+a+"块骨头"); //eat方法的重载 增加参数
}
public String eat(String name){
return name+"在吃骨头"; //返回值类型可以不同
}
public String eat(String name,int a){ //参数个数不同的重载
return name+"吃了"+a+"块骨头";
}
public String eat(int a,String name){
return name+"吃了"+a+"块骨头"; //参数位置不同的重载
}
public class Polymorphism {
public static void main(String[] args) {
Animal dog=new Dog(); //父类的引用指向子类的实例 向上转型
dog.eat(); //只能调用重写的eat方法 其他的eat方法无法调用
Dog d=new Dog();
d.eat("派蒙",10); //调用重载方法(String name,int a)
d.eat(10,"派蒙"); //调用重载方法(int a,String name)
}
}
重写和重载的区别
重写 | 重载 |
---|---|
参数不能修改 | 参数必须修改 |
返回类型不能修改 | 返回值类型可以修改 |
异常 可以修改 | 异常可以减少或删除,一定不能抛出新的或者更广的异常 |
访问可以修改 | 一定不能做更严格的限制(可以降低限制) |
来自菜鸟https://www.runoob.com/java/java-override-overload.html
2.数组地址覆盖
public class MyArray{
public static void main(String[] args) {
int a[]={10,20,30,40};
int b[][]={{1,2,3},{4,5,6,7}}; //定义数组
b[0]=a; //获取a的地址
b[0][3]=b[1][3]; //b[0][3]=40 b[1][3]=7
System.out.println(b[0][3]); //这个值输出为7
System.out.println(a[3]);//此时的这个a为7 a[3]原地址变化了
String c=b[0].toString(); //取b[0]的地址
System.out.println("数组a的地址:"+a);
System.out.println("b[0]=a的后,b[0]的地址"+c);
//输出结果
//数组a的地址:[I@119d7047
//b[0]=a的后,b[0]的地址[I@119d7047
//相同的地址
}
}
总结数组赋值成为另一个数组的成分后会覆盖初始的数据