在java中,方法的重写指的是子类重写了父类中同名同参数列表的方法。通过方法的重写,我们可以实现对父类方法的覆盖,使得子类可以根据自己的需要重新定义父类方法的行为。
一、重写的基本原则
Java中的方法重写有以下几个原则: 1. 方法名、参数列表必须一致,返回值也必须相同或者是其子类。 2. 重写方法访问修饰符不能比父类的窄,比如父类的访问修饰符为public的话,那么子类的就不能是protected或者default。 3. 重写方法抛出的异常不能大于父类方法的异常。如果父类方法不抛出异常,在重写时也不能抛出异常;如果父类方法抛出了异常,则子类重写时可以不抛出异常,或者抛出相同的异常或其子类异常。
二、示例代码
下面是一个重写的示例代码,其中Person为父类,Student为子类,Student重写了Person中的introduce方法。
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void introduce() {
System.out.println("我叫" + name + ",今年" + age + "岁。");
}
}
public class Student extends Person {
public Student(String name, int age) {
super(name, age);
}
@Override
public void introduce() {
System.out.println("我叫" + getName() + ",今年" + getAge() + "岁,我是一名学生。");
}
public static void main(String[] args) {
Person p = new Student("Tom", 20);
p.introduce();
}
}
这个例子中,Student类继承了Person类,重写了其中的introduce方法,输出学生的信息。
三、重写与多态
重写与多态是Java中的两个重要概念。多态是指同一种类型的对象,在不同的情况下会有不同的表现形式。而重写是多态的一种实现方式。 我们来看下面的代码:
public class Animal {
public void shout() {
System.out.println("动物发出叫声");
}
}
public class Dog extends Animal {
@Override
public void shout() {
System.out.println("汪汪汪");
}
}
public class Cat extends Animal {
@Override
public void shout() {
System.out.println("喵喵喵");
}
}
public class AnimalTest {
public static void main(String[] args) {
Animal animal1 = new Dog();
Animal animal2 = new Cat();
animal1.shout();
animal2.shout();
}
}
在AnimalTest类中,我们实例化了一个Dog和一个Cat对象,它们都是Animal类型的对象。在animal1和animal2调用shout()方法时,输出的结果分别为“汪汪汪”和“喵喵喵”。 这个例子中,我们可以看到方法的重写实现了多态,不同的子类重写了父类的方法,使得同样的方法调用在不同的情况下有了不同的效果,这就体现了Java中的多态性。
四、总结
方法的重写是实现多态的一种方式,它能够让子类根据自己的需要重新定义父类方法的行为。方法的重写需要遵循一定的规则和原则,同时它也与访问修饰符、异常等相关。我们应该熟练掌握方法的重写,掌握Java中的多态性,并在实际编程中灵活运用。