当前位置: 技术问答>java相关
请教一个菜鸟级的问题:这两个func()有什么不同?
来源: 互联网 发布时间:2015-06-13
本文导语: class A { int i=1; void func() { System.out.println("this in a "); } } public class B extends A { int i=2; viod func() { System.out.println("this in b "); } public static void main(String[] ...
class A
{
int i=1;
void func()
{
System.out.println("this in a ");
}
}
public class B extends A
{
int i=2;
viod func()
{
System.out.println("this in b ");
}
public static void main(String[] args)
{
B b=new B();
A a=new A();
b.func();
func();
}
}
第二个前面是一样的,只是后面一点不同:
class A
{
int i=1;
void func()
{
System.out.println("this in a ");
}
}
public class B1 extends A
{
int i=2;
viod func()
{
System.out.println("this in b ");
}
public static void main(String[] args)
{
B1 b=new B1();
A a=new A();
a=b;
b.func();
func();
}
}
这两个func()调用是什么?请指教!!!
{
int i=1;
void func()
{
System.out.println("this in a ");
}
}
public class B extends A
{
int i=2;
viod func()
{
System.out.println("this in b ");
}
public static void main(String[] args)
{
B b=new B();
A a=new A();
b.func();
func();
}
}
第二个前面是一样的,只是后面一点不同:
class A
{
int i=1;
void func()
{
System.out.println("this in a ");
}
}
public class B1 extends A
{
int i=2;
viod func()
{
System.out.println("this in b ");
}
public static void main(String[] args)
{
B1 b=new B1();
A a=new A();
a=b;
b.func();
func();
}
}
这两个func()调用是什么?请指教!!!
|
超类已经被重载,怎么再调用呢?使用a.func()调用结果就是this is in a
|
Java中多态的实现与C++中是不同的。C++分静态绑定和动态绑定,Java中则全是动态绑定。因此第二个例子中,如果:
A a=new B1();
a.func();
还是输出:this is in b
方法重载时默认不会调用父类的方法。要调用父类的方法,必须显示说明:
super.func();
A a=new B1();
a.func();
还是输出:this is in b
方法重载时默认不会调用父类的方法。要调用父类的方法,必须显示说明:
super.func();