目录
什么是重写?
方法重写(Override/Overwrite)
一般都是表示子类和父类之间的关系,在任意子类中定义了重名和同样的参数列表就构成方法重写
通俗理解:就是具体的实现类对于父类的该方法实现不满意,需要自己在写一个满足于自己要求的方法。
主要特征:
- 方法名相同,参数列表相同,但是具体的实现不同。
- 类重写方法的访问修饰符与父类被重写的访问修饰符一样大,或者比它大。
- 返回值比父类被重写的方法的返回值类型一样。
- 构造方法不能被重写。
重写的运用
1.继承
重写覆盖原来父类的方法
class Animal{
public void move(){
System.out.println("动物可以移动");
}
}
class Dog extends Animal{
public void move(){
System.out.println("狗可以跑和走");
}
}
2. 通过super关键字进行父类的重写函数的调用
public class Animal {
public void move(){
System.out.println("动物可以跑和走");
}
public class Cat extends Animal{
public void move(){
super.move();
System.out.println("猫可以跳、可以吃小鱼");
}
}
3. 在子类的重写方法上加 @Override
idea快捷键: alt+insert 选择 Override Methods
public class People {
double height;
double weight;
public People(double height, double weight) {
this.height = height;
this.weight = weight;
}
public void speakHello(){
}
}
public class ChinaPeople extends People{//继承People类
public ChinaPeople(double height, double weight) {
super(height, weight);
}
//重写了继承父类中的方法
@Override
public void speakHello(){
System.out.println("ChinaPeople 说 你好");
}
}
重写的作用
增强类的重用性和复用性,扩展性。
什么是重载?
方法重载(Overload)
在同一个类中, 具有相同方法名的一组方法, 但是参数列表不一样的这一组方法称为方法重载
参数列表:参数个数、对应位置的参数类型
通俗理解:重载就是在具有相同功能的一组方法,对于不同的情况写不同的方法,不需要给方法重新命名,用同一个方法名。
重载的运用
public class OverloadDemo {
//1. test()方法第一次重载,没有参数
void test() {
System.out.println("No parameters");
}
//2. test()方法第二次重载,一个整型参数
void test(int a) {
System.out.println("a: " + a);
}
//3. test()方法第三次重载,两个整型参数
void test(int a, int b) {
System.out.println("a and b: " + a + " " + b);
}
//4. test()方法第四次重载,一个双精度型参数
double test(double a) {
System.out.println("double a: " + a);
return a * a;//返回a*a的值
}
}
输入结果:
public class Overload {
public static void main(String args[]){
OverloadDemo ob=new OverloadDemo();
double result;
ob.test(); //定义的是test()方法
ob.test(10); //定义的是test(int a)方法
ob.test(10,20); //定义的是test(int a,int b)方法
result=ob.test(123.23); //定义的是test(double a)方法
System.out.println("result of ob.test(123.23): "+result); //输出result的值
}
}
运行结果: No parameters
a: 10
a and b: 10 20
double a: 123.23
result of ob.test(123.23): 15185.6329
jdk区分两个方法是否相同:
1.方法名是否一样
2.参数是否一样,参数对应位置参数类型是否一样
重写和重载的相同点
方法的重载和重写都是实现多态的方式
重写和重载的区别
1、重载发生在本类,重写发生在父类与子类之间;
2、重载的方法名必须相同,重写的方法名相同且返回值类型必须相同;
3、重载的参数列表不同,重写的参数列表必须相同。
概况:重载是定义相同的方法名,参数不同,重写是子类重写父类的方法;重载是在一个类中,重写是子类与父类之间;重载是编译时的多态性,重写是运行时的多态性。