如果子类中的一个方法具有和它父类中的方法完全相同的方法签名,但返回类型不相同,这会存在问题吗?

**

如果子类中的一个方法具有和它父类中的方法完全相同的方法签名,但返回类型不相同,这会存在问题吗?

**
在学习java继承的过程中遇到了这个问题:
问题
遇到问题,实践是解决问题的一条捷径,将问题代码化:

public class Super {
	public int get8() {
		return 8;
	}
}
public class Sub extends Super{
	public double get8() {
		return 8.0;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Super eight = new Super();
		Super eight2 = new Sub();
		System.out.println(eight.get8()+","+eight2.get8());
	}
}

在eclipse中报错如下:
如果子类中的一个方法具有和它父类中的方法完全相同的方法签名,但返回类型不相同,这会存在问题吗?_第1张图片
个人分析应该是JVM在调用时并不能判断你返回的类型是哪一种,所以不知道应该调用哪种方法。

方法重写概念:

  • 方法的重写是指两个方法的返回值、方法名、参数的类型和个数相同(子类重写父类的方法)。

  • 方法的重写,不能发生在同类中,只能发生在子类中。

  • 若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。

  • 如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。

  • 方法重写的权限:子类中的权限大于或等于父类的权限,(修饰符高低:private < 默认修饰符

  • 特殊情况:子类不能重写父类被声明为private权限的方法
    (引用于百度知道)

所以要想如果子类中的一个方法具有和它父类中的方法完全相同的方法签名,返回类型必须相同。

你可能感兴趣的:(java编程学习,java,面向对象编程,编程语言)