转载请标明出处:http://blog.csdn.net/wu_wxc/article/details/51457528
本文出自【吴孝城的CSDN博客】
重写是子类对父类中允许访问的的方法的重新编写
重载是同一类中方法名相同,但返回值类型或参数有所不同的方法的重新加载
Override(重写)
package cn.wuxiaocheng;
class Animal {
public void eat() {
System.out.println("动物都需要吃东西");
}
}
class Dog extends Animal {
// 重写父类方法
@Override
public void eat() {
System.out.println("狗喜欢啃骨头");
}
}
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat();
}
}
结果如图
@Override表明这个方法是重写其父类方法,没有它不会报错,但是没有它时,下面重写的方法名写错时系统不会报修。
重写的注意事项
1、声明为final的方法不能被重写
2、声明为static的方法可以被再次声明,但不能被重写
3、子类和父类在同一包中时,子类可以重写父类中除了声明为private或final的其他所有方法
4、子类和父类不在同一包中时,子类只能重写父类中声明为public或protected的非fnial方法
5、构造方法不能被重写
Overload(重载)
package cn.wuxiaocheng;
class MyOverloading {
// 没有参数
public void people() {
System.out.println("没有参数");
}
// 参数为String
public void people(String name) {
System.out.println(name);
}
// 参数为int,返回int类型的值
public int people(int age) {
System.out.println(age);
return age;
}
// 参数为String, int
public void people(String name, int age) {
System.out.println("name:" + name + "," + "age:" + age);
}
// 参数为int, String
public void people(int age, String name) {
System.out.println("age:" + age + "name:" + name);
}
}
public class Test {
public static void main(String[] args) {
MyOverloading myOverloading = new MyOverloading();
myOverloading.people();
myOverloading.people("名字");
myOverloading.people(20);
myOverloading.people("名字", 20);
myOverloading.people(20, "名字");
}
}
结果如图
重载和重写的区别
| 区别点 | 重载方法 | 重写方法 |
|---|---|---|
| 方法名 | 相同 | 相同 |
| 返回值类型 | 可以修改 | 相同 |
| 参数 | 参数不同或参数顺序不同 | 相同 |
| 访问修饰符权限 | 没有要求 | 被重写的方法权限不得比父类严格 |
| 范围 | 同一类中 | 在继承中 |
访问权限比较
| 修饰符 | 当前类 | 同一包 | 子孙类 | 全可见 |
|---|---|---|---|---|
| private | √ | |||
| default | √ | √ | ||
| protected | √ | √ | √ | |
| public | √ | √ | √ | √ |
其中什么都没写的就是default,有的也叫friendly
本文详细介绍了Java中的重写Override和重载Overload的概念。重写是子类对父类允许访问的方法进行重新编写,而重载则是在同一类中存在方法名相同但返回值类型或参数不同的多个方法。文章提到了重写的一些注意事项,例如final和static方法的特殊情况,以及访问权限的限制。同时,对比了重写和重载的区别,并指出构造方法不能被重写。

978

被折叠的 条评论
为什么被折叠?



