深入理解Java重载和重写
什么是Java重载?
Java中的重载指的是在同一个类中可以定义具有相同名称但参数不同的多个方法。即同一个方法名可以用于多个不同的方法,通过参数的不同或类型的不同来区分它们。Java重载可以提高代码的可读性和重用性,方便用户根据自己的需要选择相应的方法。
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
}
在这个示例中,我们定义了一个名为add()
的方法,它分别接受两个整数和两个浮点数作为参数。这样,用户可以根据需要使用不同参数类型的方法。
什么是Java重写?
在Java中,重写是指子类重新定义了从父类继承来的方法,并赋予了方法自己的实现。在重写过程中,子类不仅使用了父类的方法名称,而且方法签名(参数类型和顺序)也必须与父类中被重写的方法完全一致,否则Java编译器会抛出错误信息。
public class Animal {
public void move() {
System.out.println("animal is moving");
}
}
public class Cat extends Animal {
@Override
public void move() {
System.out.println("cat is moving");
}
}
在这个示例中,我们定义了一个名为Animal
的类和一个名为Cat
的子类,Cat
类从Animal
类继承了move()
方法。在Cat
类中,我们通过使用@Override
注解来重写Animal
类中的move()
方法,并对该方法进行了自己的实现。
重载和重写的区别
重载和重写是不同的概念,它们的区别在于:
- 重载是指在同一个类中定义多个名称相同但参数不同的方法,以便用户根据需要选择相应的方法;重写是指子类重新定义了从父类继承来的方法,并赋予了方法自己的实现。
- 重载的方法签名必须不同,而重写的方法签名必须一致。
- 重载是静态绑定,即编译器根据参数类型和顺序来决定使用哪个方法;重写是动态绑定,即在运行时根据实际对象类型来决定使用哪个方法。
这就是重载和重写的区别。
示例1
public class Shape {
public void draw() {
System.out.println("shape is drawing");
}
}
public class Rectangle extends Shape {
@Override
public void draw() {
System.out.println("rectangle is drawing");
}
public void draw(int width, int height) {
System.out.println("rectangle is drawing with width " + width + ",height " + height);
}
}
在这个示例中,我们定义了一个名为Shape
的类和一个名为Rectangle
的子类,Rectangle
类重写了父类的draw()
方法,并定义了一个新的具有不同参数的draw()
方法。用户可以根据需要选择使用哪个方法。
示例2
public class Animal {
public void move() {
System.out.println("animal is moving");
}
}
public class Cat extends Animal {
@Override
public void move() {
System.out.println("cat is moving");
}
}
public class Test {
public static void main(String[] args) {
Animal animal = new Animal();
animal.move();
Cat cat = new Cat();
cat.move();
Animal animalCat = new Cat();
animalCat.move();
}
}
在这个示例中,我们定义了一个名为Animal
的类和一个名为Cat
的子类,Cat
类重写了父类的move()
方法。在Test
类的main()
方法中,我们创建了一个Animal
对象和一个Cat
对象,并调用它们的move()
方法,以及一个Animal
类型的变量,其指向一个Cat
对象。我们可以看到,在第三个调用中,animalCat.move()
方法动态地绑定到了子类Cat
的实现,这说明Java中的重写是动态绑定的。
以上就是Java重载和重写的完整攻略,希望能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解java重载和重写 - Python技术站