当前位置: 技术问答>java相关
thinking in java and core java的重载问题认我好纳闷
来源: 互联网 发布时间:2017-04-08
本文导语: class Super { void f() { System.out.println("Super.f()"); } } public class Sub extends Super { void f() { System.out.println("Sub.f()"); } void f(int i) { System.out.println("Sub.f(int i)"+i); ...
class Super
{
void f()
{
System.out.println("Super.f()");
}
}
public class Sub extends Super
{
void f()
{
System.out.println("Sub.f()");
}
void f(int i)
{
System.out.println("Sub.f(int i)"+i);
}
public static void main(String[] args)
{
Sub sub=new Sub();
sub.f();
sub.f(10);
}
}
think in java and core java中的都提到了,子类可以重载父类的方法,
而java2 程序员学习指南上说重载必须在同一个类中,
1.我上面的Super.f()和Sub.f(int i )算重载吗?个人认为不算应说这是两个不同的方法?
2.编译时子类会检查f()的类型,在运行时会准确调用相应的方法,上面的
Sub sub=new Sub();改为 Super sub=new Sub();时,编译就有错,这个我想得通,因为编译时会在Super中检查开形式类型,而Super中不提供f(int i).
Sub sub=new Sub();和Super sub=new Sub();有何不同?
{
void f()
{
System.out.println("Super.f()");
}
}
public class Sub extends Super
{
void f()
{
System.out.println("Sub.f()");
}
void f(int i)
{
System.out.println("Sub.f(int i)"+i);
}
public static void main(String[] args)
{
Sub sub=new Sub();
sub.f();
sub.f(10);
}
}
think in java and core java中的都提到了,子类可以重载父类的方法,
而java2 程序员学习指南上说重载必须在同一个类中,
1.我上面的Super.f()和Sub.f(int i )算重载吗?个人认为不算应说这是两个不同的方法?
2.编译时子类会检查f()的类型,在运行时会准确调用相应的方法,上面的
Sub sub=new Sub();改为 Super sub=new Sub();时,编译就有错,这个我想得通,因为编译时会在Super中检查开形式类型,而Super中不提供f(int i).
Sub sub=new Sub();和Super sub=new Sub();有何不同?
|
f();叫覆盖(override)
f(int i);叫重载(overload)
覆盖是父子之间的相同方法
重载是针对同类中的同名方法(参数列表不同)
f(int i);叫重载(overload)
覆盖是父子之间的相同方法
重载是针对同类中的同名方法(参数列表不同)
|
可以算是重载
Super sub= new Sub();
是不会出错的,只要你不调用f(int i)
就不会有问题,派生类中实现的方法在基类中必须有定义
才可以使用你下面的那种运行是对象鉴定
Super sub= new Sub();
是不会出错的,只要你不调用f(int i)
就不会有问题,派生类中实现的方法在基类中必须有定义
才可以使用你下面的那种运行是对象鉴定
|
1、我也不知道是不是叫重载,反正你的意思我觉得是正确的
2、Super sub = new Sub() 此时你只可以用到Super的接口,当然如果你有在子类中重载了父类的方法,那就会调用子类的方法
2、Super sub = new Sub() 此时你只可以用到Super的接口,当然如果你有在子类中重载了父类的方法,那就会调用子类的方法
|
f();叫重载(override)
f(int i);叫过载(overload)
重载是针对父子关系的,而过载是针对平行关系使用的,过载只是参数列表的重定义,最常用到的过载的例子就是System.out.println。
f(int i);叫过载(overload)
重载是针对父子关系的,而过载是针对平行关系使用的,过载只是参数列表的重定义,最常用到的过载的例子就是System.out.println。
|
lsm1977说的对。
|
楼主的概念混淆是由于中文书籍中对override和overload的不同译法导致的,
override发生于继承,而overload发生于同一个类定义内
override发生于继承,而overload发生于同一个类定义内