欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java_子类定义一个方法,与父类的方法名、参数列表相同,但返回值类型不同,程序是否异常?

程序员文章站 2022-06-09 13:31:36
...

会异常

题目代码化:

package overrideTets;

class Super {
	public int getLength() {
		return 4;
	}
}

public class Sub extends Super { 
	public long getLength() {
		return 5L;
	}
	
	public static void main (String[]args) {
		Super sooper = new Super (); Super	sub = new Sub();
		System.out.println(sooper.getLength()+ "," + sub.getLength() );
	}
}


分析
个人认为本质原因是因为JVM在调用的时候,并不能判断你的返回值是什么类型,所以不知道该调用哪个方法。

  • 我们都知道方法重写的条件是,在继承关系中,子类定义一个方法与父类中的方法名,参数列表,返回值都相同,权限不能缩小。那题目中所描述的条件就不构成方法重写,并且因为方法名参数列表相同,返回类型不同会报错,如图:
    Java_子类定义一个方法,与父类的方法名、参数列表相同,但返回值类型不同,程序是否异常?
    我们再来换一个想法也能推出报错的原因:
  • 子类中存在两个同名的方法:
    • 一个是从父类继承来的返回值类型为int的getLength方法
    • 一个是子类自己定义的返回值为long的getLength方法
  • 这时我们再来想一下重载的条件,在一个类中,两个方法方法名相同,参数列表不同,与返回值无关。
  • 那子类中这两个方法其实就很像方法重载范畴内的问题了,这两个方法参数列表相同,所以在编译的时候异常。