当我调用s1.dub(7)或s2.dub(7)时,它不起作用 ,但用s2.dub(" 9")之类的字符串调用它可以工作并打印双字符串
有谁可以告诉我为什么?
这是代码
interface Inter {
int number();
}
abstract class Abs {
static int foo = 12;
int number() { return 5; }
abstract int ace();
}
final class Sub extends Super {
Sub(int bar) { foo = bar; }
public int number() { return 10; }
int ace() { return 13; }
int dub(int i) { return 2 * i; }
}
public class Super extends Abs implements Inter {
public int number() { return 11; }
public static void main(String args[]) {
Super s1 = new Super();
Super s2 = new Sub(16);
//System.out.println(s1.dub(7)); //doesn't work
//System.out.println(s2.dub(7)); //doesn't work
//System.out.println(s1.dub("7")); //works giving 77
//System.out.println(s2.dub("7")); //works giving 77
}
int twice(int x) { return 2 * x; }
public int thrice(int x) { return 3 * x; }
int ace() { return 1; }
String dub(String s) { return s + s; }
}
答案 0 :(得分:0)
非常简单..你上课超级定义了一种方法:
String dub(String s) { return s + s; }
在主方法中实例化Super:
Super s1 = new Super(); // this has a dub( String ) method
然后你尝试调用这个方法(dub)传递一个整数而不是字符串:
System.out.println(s1.dub(7)); // s1.dub(...) takes a String, not a number
编辑:此代码不应编译或运行,因为您要将两个实例分配给超类Super(未定义dub(int)方法)。
不确定您是如何获得例外的?
谢谢@ Jean-FrançoisSavard - 我完全错过了!
EDIT2:原始问题已被修改,不再表示抛出异常,这是有道理的,因为代码根本不应该编译。
EDIT3 :(最后一个,由于原始问题的变化)
System.out.println(s1.dub(7)); //- this will never work unless you change your class' definition
System.out.println(s2.dub(7)); //- will work if you also change the following line:
从:
Super s2 = new Sub(16);
为:
Sub s2 = new Sub(16);