A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ssd123mn 中级黑马   /  2016-7-15 21:51  /  1161 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Super {
public Integer getLenght() { return new Integer(4); }
}

public class Sub extends Super {
public Long getLenght() { return new Long(5); }
public static void main(String[] args) {
Super sooper = new Super();
Sub sub = new Sub();
System.out.println(sooper.getLenght().toString() + "," +
sub.getLenght().toString() );
}
}
此题有点异议

3 个回复

倒序浏览
Java程序想要运行,需要先经过编译,然后才是运行.  你写的程序不能通过编译,自然也就不能运行了
回复 使用道具 举报
你这程序通不过编译的,重写父类方法的时候你把返回值类型都改了,肯定不对
回复 使用道具 举报
补充一下原因:
你这样思考问题,子类Sub继承了父类Super,也就继承了父类非私有成员方法getLength(),而你的子类自己也有一个getLength()方法. 那么JVM在调用方法的时候,对象名.方法名(),子父类的方法名都相同,JVM怎么知道调用哪个方法
,这就是问题所在,所以就不能通过编译.
----------------------------------------------------
建议你了解一下方法的重写与重载.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马