1.class A{
public void f(){
System.out.println("A");}
}
class B extends A{
public void f(){
System.out.println("B");}
}
class duotai{
public static void main(String args[]){
A p=new B();
p.f();
}
}编译正确
2. class A{
public void f(){
System.out.println("A");}
}
class B extends A{
public void m(){
System.out.println("B");}
}
class duotai{
public static void main(String args[]){
A p=new B();
p.m();
}
}这个编译错误
程序中的A p= new B();不是把A中的P引用指向了B的实例了么,为什么第一个可以调用B中的方法,而第二个不可以调用B中的方法,
public void f(){
System.out.println("A");}
}
class B extends A{
public void f(){
System.out.println("B");}
}
class duotai{
public static void main(String args[]){
A p=new B();
p.f();
}
}编译正确
2. class A{
public void f(){
System.out.println("A");}
}
class B extends A{
public void m(){
System.out.println("B");}
}
class duotai{
public static void main(String args[]){
A p=new B();
p.m();
}
}这个编译错误
程序中的A p= new B();不是把A中的P引用指向了B的实例了么,为什么第一个可以调用B中的方法,而第二个不可以调用B中的方法,
简单的说,p.f();这个其实就是调用了父类的方法,因为子类继承了父类的内容,但是子类中如果有重名的方法就把父类的给重写了。于是调用的就是子类的方法了。
你把例1中的public void f()改为私有的,也是会报错的。
B p=(B)A