刚才浏览帖子的时候看见一个朋友说:
(  Father是一个类,Son是Father的子类.
  Fahter t=new Son();
  那么t.变量  一定访问的是Father的变量
  那么t.方法  一定访问的是Son的方法
)
请问一下他说的对吗?在java中有这种用法吗?
请高手有时间的话举例给我解释一下.

解决方案 »

  1.   

    谁这么说的?
    那是可能因为你的子类里面没有任何自己的属性的原因
    再说了,如果你的Son类里面什么也没有,不管t.什么都是父类的
      

  2.   

    那如果Son类不有自己方法和属性呢?
    请你举个例子给我好吗?
    麻烦你了,高手.
      

  3.   

    低价转让如下培训录像DVD光盘~~~省钱!!!效率高!!!可重复学习!!!一、最新大型新东方J2EE培训视频录像(新东方高级JAVA培训讲师 20G)
          培训内容: 初级部分(280学时)+高级部分(400学时),共680学时。
      初级部分(280学时)
      1). JavaOO程序设计基础:J2sdk基础、Java 面向对象基础、Java API使用、数据结构及算法基础、Java高级类特性、异常处理; 
      2). J2SE平台程序设计:Java AWT图形界面程序开发,Swing图形程序设计,Socket网络应用程序设计,对象序列化,Java 常用数据结构,Applet,高级I/O流和文件编程,多线程程序设计;
      3). 项目开发:globle get 多线程下载系统 
      4). Java桌面系统项目开发:桌面项目,基于Socket的聊天室;数据库:SQL、ORACLE9i 数据库的管理基础; 
      5). Java Web应用编程:Java数据库编程:JDBC、JDBC-ODBC Java Web编程:JSP、Servlet、JavaBean、java应用编程服务器:Tomcat / … 集成开发环境(IDE):Jbuilder / Eclipse / … Java应用构建工具:Apache Ant / …; 
      6). 项目开发:移动公司计费账务管理系统            
      高级部分(400学时)
      1). Linux初步:Linux基本操作,LINUX下的Java程序开发,Linux系统的简单管理; 
      2). 数据库深入编程:PL/SQL;数据库和数据库设计库程序设计; 
      3). Struts、spring、hibernate:高级Java Web应用开发:业界通用的MVC设计模式,Struts架构、应用程序国际化、Struts Taglib; 
      4). 项目开发:大唐任务管理系统;
      5). J2ME程序设计:移动开发概述、J2ME界面程序设计、J2ME数据库程序设计、手机短信、多媒体短信(彩信)开发; 
      6). Java高级程序设计(J2EE):J2EE架构、EJB核心技术;J2EE主流开发工具JBuilder、应用服务器WebLogic ;Java和XML:XML, Web Service,异构系统整合、分布式应用;
      7). 软件系统架构设计:UML与系统建模和设计、Rational Rose、软件工程和软件过程模型、版本控制;
      8). 项目开发:中国移动电子运行维护系统;二、Oracle培训录像
       1.Oracle 9i DBA大型中文视频培训录像(全)(中国IT认证实验室 13.4G)
         *1Z0-007 Introduction to Oracle9i SQL 
         *1Z0-031 Oracle9i DBA Fundamentals I 
         *1Z0-032 Oracle9i DBA Fundamentals II 
         *1Z0-033 Oracle9i Performance Tuning
           另附全套PPT幻灯片培训讲稿。
        全程标准Oracle大学授课环境,资深Oracle认证讲师、中国电信深圳培训中心数据库讲师主讲。具有多年的Oracle DBA教学经验,授课风格自成一体,逻辑清晰、层次分明,讲解深入浅出、信息量大,实用性强,短时间内把您培养成高级数据库专家。
       2.Oracle 10G 数据库培训录像(中科院 共18讲)现在购买送
    1.孙鑫 XML网页编程开发详解 (内容大小2G)
    2.孙鑫J2EE培训录像(共76讲 含源代码及PPT幻灯片课件)
        本视频侧重于J2EE框架机制原理,内容分为spring,struts,hibernate,powerdesign四个部分的讲解(Spring共23讲,详细讲解了spring的使用。Struts共13讲,Struts通过一个完整视例讲解全部流程,以及标签库。Hibernate共24讲,深入讲解了hibernate的机制。PowerDesigner共6讲,讲解数据库建模的步骤及其工具的使用。)
    3.IT项目管理培训录像(项目经理提升必看)(共28集 Rmvb格式 1DVD)需要的速联系
    Q Q: 215782959
    TEL: 13584068353(短信佳)
    MSN: [email protected]
      

  4.   

    不一定,如果Sun重写了Father的方法,
    t.方法到调用的子类的,
    不然调用的都是父类的变量和方法
      

  5.   

    首先道歉,我刚才说错了,经过我写的一个小例子,明白了你的这个朋友的真是意思,他说的是同名变量,以及同名方法,不好意思啊,呵呵//Father.java
    class Father {
    public int i = 10;
    public void print() {
    System.out.println("Father 's i is " + i);
    }
    }
    //Son.java
    class Son extends Father {
    public int i = 11; 
    public void print(){
    System.out.println("Son'i is " + i);
    }
    }
    //Test.java===========================
    public class Test 
    { public static void main(String[] args) {

    Father t = new Son();
                      System.out.println("The i is Fathers,it is " + t.i);
    t.print();

    }
    }
    以上的情况结果是 10,Son'i is 11,证明了t是Son类的一个实例.这里的方法都是Son的(因为它重写了父类的方法),如果你用t.变量(属性),就证明这个属性不是private的,所以会被继承下来, 但是为什么他是10,(就是Father.i)我就不清楚了,我基础超烂,刚才说得不对,按这种说法,你的朋友是对的,至于为什么,我就不得而知了,我写了这个小例子,希望对你有帮助
      

  6.   

    有人说Father t 这样对t做了类型限制,所以只能访问Father类的属性.但是对于方法,就不一样了.我不知道这样理解会不会挨骂
    首先对于属性,会跟据你的类型在编译的时候就已经分配好了空间,而对于方法,只有当执行的时候才会动态的加载进来,所以t仍然是一个父类的引用,但是t可以指向子类的实例,尽管如此,他仍然是一个父类的引用,我晕,我也晕了.总之,你朋友说得没错.
      

  7.   

    子类继承父类的所有成员变量和非private的方法~
    java中的继承无非就这些东西~
      

  8.   

    关键是这个是特殊的或者说是不正常的继承关系如下:
    Fahter t=new Son();
    同时也希望你明天会关注这个贴子,
      

  9.   

    如果子类是复写父类的方法,那么调用的是子类的方法。
    如果子类没有复写父类的方法(public 或 protected),那么调用的是父类的方法。读取父类的变量要在方法里面加super
      

  10.   

    //Father.java
    class Father {
    public int i = 10;
    public void print() {
    System.out.println("Father 's i is " + i);
    }
    }
    //Son.java
    class Son extends Father {
    public int i = 11; 
    public void print(){
    System.out.println("Son'i is " + i);
    }
    }
    //Test.java===========================
    public class Test 
    {public static void main(String[] args) {Father t = new Son();
    Son s=new Son();
    System.out.println( t.i);
    System.out.println(s.i);
    t.print();}
    }
    调用一个对象的方法,如果这个方法被子类覆盖,那么执行的是子类的方法。
    访问一个对象的变量,这个没有覆盖不覆盖的说法,也就是说和覆盖没有关系,因为父类和子类都有一个i变量在不同的内存地址里,互不影响。你用t.i访问,这里t是父类的引用,所以它就去父类的内存地址访问i,你用s.i访问,这里s 是子类的引用,它就去子类的内存地址访问i。