关于子类重写父类中方法后,该方法的①权限修饰符、②返回值类型、③抛出异常,这3个方面的设定要求。

tech2025-01-21  0

1.权限修饰符。 例如:父类:public class Animal{ public void eat(){ System.out.print(“动物的吃”); } } 子类 public class Person extends Animal{ private void eat(){ System.out.print(“人类的吃”); } } 在使用多态时: Animal a = new Person();a.eat是无法调用到子类的eat方法的。因为子类的eat()是私有的只能在本类使用,所以违背了多态的思想。反过来思考,为了让父类引用能正常调用子类的重写后的方法,那么这个方法子类的权限修饰符不能比父类小,否则影响父类的调用。 2.返回值类型的限制条件。 例如:父类:public class Animal{ public Animal eat(){ System.out.print(“动物返回Animal”); } } 子类 public class Person extends Animal{ public Person eat(){ System.out.print(“人类返回Person”); } } 在使用多态时: Animal a = new Person(); 编译a.eat()的返回结果数据类型默认为Animal,但实际上调用是子类的方法(返回值自然是Person类型),所以编译器会将子类的Person类型强行转型为Animal类型(向上转)。所以这里就要求子类重写的方法的返回值类型要小于父类中的方法,否则强转不了。 3.抛出异常的限制条件。 和上述2返回值类型相似,在运用到多态时,编译器会将子类的异常强行转为父类的异常数据类型,所以要求子类的异常数据类型也要小于父类抛出的异常的数据类型,否则强转失败。

最新回复(0)