持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情 在面试里面,我们经常会遇到这样应该问题,什么是overload,什么是override。
那么大家第一反应是不是overload重载,override重写。那么接下来呢?
讲重写,重载的规则?
确实是。
overload叫方法重载
方法在java里面不能单独存在,我们需要把他放到类里面进行描述,而方法的重载指的是类的一组方法。方法名字一样,参数列表不一样。参数列表不一样体现在参数个数不一样,参数类型不一样,参数顺序不一样。 (一个从父类继承过来的方法,和本类方法也可以重载。) 比如:
public class Test{
public void test(int i){
System.out.println(i);
}
public void test(String s){
System.out.println(s);
}
在主方法调用上述test方法,传入字符,比如’a‘,会不会有方法执行:
答案是有方法执行,那么执行哪一个? 我们知道ascall码里面,a=97,那么在调用test方法时候字符a会被解析成为97,所以调用test(int i)方法
那如果是:
public void test(String s){
System.out.println(s);
}
public void test(Object o){
System.out.println(o)
}
我们输入参数null会不会有方法执行?会有方法执行
Objec是Java中的顶级父类,Java中所有的类都默认直接或者间接的继承object。Objec是Java中唯一没有父类的类,任何一个类的对象都可以用Object对象接住。
1.String是一个最终类,代表字符串的一个类,所有的字符串都是String的对象。
2.字符串是一个常量;字符串可以被共享。
3.字符串是存在方法区。
4.注意不同的方式创建的对象的个数。有几个对象,就看内存中有几个存储的是地址。
在类中方法赋值问题存在就近原则,所以我们才会引入this关键字。
什么是就近原则?
就近原则:它会导致在程序进行编译的时候,找到最近的名字相同的变量进行赋值,通过调试你会发现,这里它是自己给自己赋了一会值,对于当前的对象里面的值,还是默认值
那么这个方法调用string参数的。
方法重写
重写之前肯定有子类父类继承关系,当父类方法无法满足子类需要,才会重写
- 权限修饰符:子类 可以>= 父类
- 特性修饰符: 如果父类方法是static修饰,不能重写:静态元素不是对象是类 如果父类是final修饰,不能重写:final修饰不能改变 如果父类是abstract修饰, 必须 重写(添加执行体),否则子类也是抽象类
- 返回值: 子类可以<=父类
- 方法名字 子类=父类
- 参数列表: 子类=父类
- 异常: 如果父类是运行时异常,子类可以不添加异常 如果是编译异常,子类抛出异常个数和类型 可以<=父类
- 方法执行: 一般子类执行体和父类不一样