1.重写和重构的区别
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。
equals方法比较两个字符串的内容是否相等;运算符“==”判断两个对象是否指向同一个引用,即是否为同一个对象。
2.重载和覆盖
方法的重载
- 是实现多态的一种方式
- 多个方法在同一个类中
- 多个方法具有相同方法名
- 多个方法的参数不相同 类型或者数量不同
- 方法含义相同但带有不同的参数 这些方法使相同的名字
特点
仅仅对应方法的定义 与方法的调用无关
重载针对同一个类的方法的名称和参数进行识别 与返回值无关 不能通过返回值来判定两个方法是否相互构成重载
在同一个类内具有相同名称的多个方法 多个同名方法如果参数不同 或者参数个数相但类型不同 这些同名的方法就有了不同的功能
参数的类型是关键 仅仅是参数的变量名不同是不可行的也就是说参数的列表必须不同 即参数个数不同 参数类型不同 参数的顺序不同
方法的覆盖
- 和重载相似
- 均是java多态的技巧之一
- 子类定义名称 参数个数与类型均与父类中完全相同的方法 用来重写父类同名方法的功能
通过使用super关键字去显示的调用父类的带参构造方法
在父类中自己提供一个无参构造方法
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了 父类的功能,又定义了子类特有的内容
1. 子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表
2. 子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型
3. 子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限
4. 子类不能重写父类中声明为private权限的方法
5. 子类方法抛出的异常不能大于父类被重写方法的异常
3、Override注解
用来检测当前的方法,是否是重写的方法,起到【校验】的作用
————————————————
方法重写的注意事项
注意事项
我们在重写方法的时候方法的权限修饰符其实可以和父类不同**(一般都相同)。但是子类中方法的权限不能比父类低。(权限修饰符 : private < 默认(什么都不写) < protected < public)**
我们在重写方法的时候方法的返回值类型其实可以不同** (一般都相同)** 。但是要求子类中方法的返回值类型必须是父类方法返回值类型的子类。
我们可以用 @Override 注解来校验是不是方法重写。
私有的方法不能被重写,因为私有的不会被继承
————————————————
私有方法不能被重写(父类私有成员子类是不能继承的)
子类方法访问权限不能更低(public >protected> 默认 > 私有)
发生在父子关系中,子类覆盖父类方法时,这种方法就叫做重写,要求方法名,参数,都必须一
样,返回值可以类型相同或者是子类,子类权限的修饰符不能比父类小
注意:
子类与父类中同名同参数的方法必须同时声明为非static的(即为重写),或者同时声明为
static的(不是重写)。因为static方法是属于类的,子类无法覆盖父类的方法
面试题:说说overload和override的区别。
答:
方法重载:在同一个类中,方法名相同,参数列表不同,和返回值无关
方法重写:在子父类中,子类有一个和父类方法名相同,参数列表相同,返回值类型也相同的方法。这个就叫方法的重写
如果现在父类的一个方法定义成private访问权限,在子类中将此方法声明为default访问权限,那么这样还叫重写吗?
不是私有的无法继承
————————————————