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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐兴旺 中级黑马   /  2012-2-29 23:57  /  1487 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class A{     // 定义类A
public void fun1(){  // 定义fun1()方法
  System.out.println("A --> public void fun1(){}") ;
}
public void fun2(){
  this.fun1() ;  // 调用fun1()方法
}
};
class B extends A{
public void fun1(){  // 此方法被子类覆写了
  System.out.println("B --> public void fun1(){}") ;
}
public void fun3(){
  System.out.println("B --> public void fun3(){}") ;
}
};
public class PolDemo01{
public static void main(String asrgs[]){
  A a = new B() ;  // 实例化子类对象
  
  
  a.fun1() ;
  a.fun2();// 此方法被子类覆写过
  a.fun3();// 此处为什么不能调用fun3方法呢??(转型之后是父类对象,无法找到子类中定义的新方法,可是下面a又是B类的实例,这是为什么呀???)
  System.out.println((a instanceof B) ); // true  ,,为什么又是B类的实例呢?不是转化成父类对象了吗??
  System.out.println((a instanceof A) ); // true
}
}

1 个回复

倒序浏览
本帖最后由 H07000223 于 2012-3-1 00:17 编辑

A a=new B();它表示的不是子类转化成父类对象了。而是表示父类型的引用指向子类型的实例。

因为a是父类型的引用,而父类中没有fun3这个方法,自然不能调用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马