Java重写Override和重载Overload

时间:2021-11-17 09:22:03

转载请标明出处: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();
}
}

结果如图
Java重写Override和重载Overload

@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, "名字");
}
}

结果如图
Java重写Override和重载Overload

重载和重写的区别

区别点 重载方法 重写方法
方法名 相同 相同
返回值类型 可以修改 相同
参数 参数不同或参数顺序不同 相同
访问修饰符权限 没有要求 被重写的方法权限不得比父类严格
范围 同一类中 在继承中

访问权限比较

修饰符 当前类 同一包 子孙类 全可见
private
default
protected
public

其中什么都没写的就是default,有的也叫friendly