方法的参数是个对象是怎么回事 
例如 public void fun(A a){}
一出现这样类似的 我就迷糊了 谁能帮我解释一下  最好详细点 让我明白

解决方案 »

  1.   

    这个现象在多态中常见:
    class Human
    {
    public void speak()
    {
    System.out.println("我是人类");
    }
    }
    class Man extends Human
    {
    public void speak()
    {
    System.out.println("我是男人");
    }
    }
    class Woman extends Human
    {
    public void speak()
    {
    System.out.println("我是女人");
    }
    }
    public class MyMultipho { //如果子类的对象类型传递给h,那么就会自动转换
    public static void letMeSpeak(Human h)
    {
    h.speak();
    }
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Woman w=new Woman();
    Man m=new Man(); letMeSpeak(w);
    letMeSpeak(m);
           }
    }
    当然还有其它情况,你先把多态这块弄清楚把
      

  2.   

    interface Parent 

         String method(); 
    }
     class Child1 implements Parent 

         public String method() 
         { 
            return "Child1"; 
         } 

    class Child2 implements Parent 

         public String method() 
         {
            return "Child2"; 
         } 

    public class Test 

         public static void main(String[] args) 
         { 
           Parent parent = new Child1();
           System.out.println(parent.method());
           parent = new Child2(); System.out.println(parent.method()); 
         } 
    } 输出结果: Child1 Child2 只有多个子类从一个父类继承或实现一个接口。 在建立这些子类实例时,都用父类或接口做为变量类型,如上例中的parent。也就是说,用户对应的接口都是一个Parent。而由于new后面的子类不同,而产生调用同一个方法method返回不同结果的显现叫多态。就是同一个方法在使用不同子类时有不同的表现(在这里是不同的返回值)。 方法重载不叫多态。
      

  3.   

    你运行下就明白了,这是向上转型public static void letMeSpeak(Human h)
        {
            h.speak();
        }这里letMeSpeak方法中的参数是Human类型,而
    public static void main(String[] args) {
            // TODO Auto-generated method stub
            Woman w=new Woman();
            Man m=new Man();        letMeSpeak(w);
            letMeSpeak(m);
           }
    这里将Woman和Man类型传入letMeSpeak方法中,分别运行Woman和Man类中的speak()方法,也就是将子类向上转型为父类,多态的表现
      

  4.   

    我把我做的项目的小段代码给你看下:看不看的懂就不知道了!
    package dao;import supper.UserSupper;
    import java.util.Vector;
    import javax.swing.JOptionPane;
    import java.sql.SQLException;
    import java.sql.*;
    import bean.*;
    import java.util.Date;
    import java.util.ArrayList;
    import java.text.DateFormat;
    public class UserMainfo {
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet set = null;
        //添加物资信息
        public boolean addMainfo(mainfo m) {
            boolean bool = false;
            try {
                con = UserSupper.getCon();
                ps = con.prepareStatement("insert mainfo values(?,?,?,?,?,?,?,?)");
                ps.setString(1, m.getMid());
                ps.setString(2, m.getMname());
                ps.setInt(3, m.getMleixing());
                ps.setFloat(4, m.getPrice());
                ps.setInt(5, m.getNum());
                ps.setString(6,DateFormat.getDateInstance().format(m.getBuytime()));
                ps.setString(7, m.getzhuangtai());
                ps.setString(8, m.getBin());            int i =ps.executeUpdate();
               if (i>0) {
                   bool = true;
               }
                UserSupper.getClose(con, ps, set);
            } catch (SQLException ex) {
            }
            return bool;
        }    //所有物资信息
        public Vector getMinfo() {
            Vector vv = new Vector();
            try {
                con = UserSupper.getCon();
                ps = con.prepareStatement(
                        "select mainfo.id as '物资编号', mname as '物资名称', mlx.name as '物品类型',price as '单价',num as '数量',buytime as '购买时间',zhuangtai as '状态',bin as '备注' from mainfo join mlx on mainfo.mleixing=mlx.id");
                set = ps.executeQuery();
                while (set.next()) {
                    Vector v = new Vector();
                    v.add(set.getInt("物资编号"));
                    v.add(set.getString("物资名称"));
                    v.add(set.getString("物品类型"));
                    v.add(set.getFloat("单价"));
                    v.add(set.getInt("数量"));
                    v.add(set.getString("购买时间").substring(0,11));
                    v.add(set.getString("状态"));
                    v.add(set.getString("备注"));
                    vv.add(v);
    //                System.out.print(vv);
                }
                UserSupper.getClose(con, ps, set);
            } catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, "数据库异常", "消息",
                                              JOptionPane.INFORMATION_MESSAGE);
            }
            return vv;
        }
        //分类查询
        public Vector getLxMinfo(String m) {
        Vector vv = new Vector();
        try {
            con = UserSupper.getCon();
            ps = con.prepareStatement(
                    "select mainfo.id as '物资编号', mname as '物资名称', mlx.name as '物品类型',price as '单价',num as '数量',buytime as '购买时间',zhuangtai as '状态',bin as '备注' from mainfo join mlx on mainfo.mleixing=mlx.id where mlx.name= ?");
            ps.setString(1,m);
            set = ps.executeQuery();
            while (set.next()) {
                Vector v = new Vector();
                v.add(set.getInt("物资编号"));
                v.add(set.getString("物资名称"));
                v.add(set.getString("物品类型"));
                v.add(set.getFloat("单价"));
                v.add(set.getInt("数量"));
                v.add(set.getString("购买时间").substring(0,11));
                v.add(set.getString("状态"));
                v.add(set.getString("备注"));
                vv.add(v);
    //                System.out.print(vv);
            }
            UserSupper.getClose(con, ps, set);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "数据库异常", "消息",
                                          JOptionPane.INFORMATION_MESSAGE);
        }
        return vv;
    }
    //删除物资信息
    public boolean deleteMainfo(String m){
        boolean bool=false;
        try {
            con = UserSupper.getCon();
            ps = con.prepareStatement("delete from mainfo where id=?");
            ps.setString(1, m);
            int i = ps.executeUpdate();
            if (i > 0) {
                bool = true;
            }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "数据库异常", "消息",
                                          JOptionPane.INFORMATION_MESSAGE);
        }
        UserSupper.getClose(con,ps,set);
        return bool;
    }
    //修改物资信息
    public boolean updateMainfo(mainfo m){
        boolean bool=false;
        try {
            con = UserSupper.getCon();
            ps = con.prepareStatement("update mainfo set id=?,mname=?,mleixing=?,price=?,num=?,buytime=?,zhuangtai=?,bin=?");
            ps.setString(1, m.getMid());
            ps.setString(2, m.getMname());
            ps.setInt(3, m.getMleixing());
            ps.setFloat(4, m.getPrice());
            ps.setInt(5, m.getNum());
            ps.setString(6, m.getBuytime().toString());
            ps.setString(7, m.getzhuangtai());
            ps.setString(8, m.getBin());
            int i = ps.executeUpdate();
            if (i > 0) {
                bool = true;
            }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "数据库异常", "消息",
                                              JOptionPane.INFORMATION_MESSAGE);
        }
        UserSupper.getClose(con,ps,set);
        return bool;
    }
    }
      

  5.   

    就是个参数吗, 那我是不是可以public void fun(int x){}理解的一样
      

  6.   

        参数是个对象的情况和其他的参数类型并没有什么区别,它传入的是一个对象的引用,也就是说你可以通过这个引用去访问这个对象的成员变量(public)和成员方法(public),当然这样并不全面,你可以多去了解以下继承和多态方面的东西,这样更有利于理解。
         我从上面给你copy个列子说明以下吧:
         Java codeclass Human { 
            public void speak() { 
               System.out.println("我是人类"); 
            } 
        } 
       
        class Man extends Human { 
            public void speak(Human human) { 
                human.speak();
            } 
        } 
        程序输出:我是人类
      

  7.   

    public static void letMeSpeak(Human h) 
        { 
            h.speak(); 
        } 
    父类的引用来存放子类的对象
      

  8.   

    这两个又有些不同,一个是传值(int x),一个是传递引用的对象的地址值。
      

  9.   

    干嘛又扯到多态了???楼主,这个就和public void fun(int a){} 一个道理,
    不过public void fun(A a){} 传的是个A类型的对象进来而已..
    和我当初学的时候困惑一样,还没从8大基本类型那转过来 
      

  10.   

    给形参又拷贝了一份引用a,这个引用指向调用函数里创建的A类型对象。
    引用其实就像是一个对象的名字或者别名,访问对象时,
    我们不会直接是访问对象在内存中的数据,而是通过引用去访问。
    引用也是一种数据类型,类似于 C 语言中指针的东西,它指示了对象在内存中的地址。
      

  11.   

    JAVA中的参数是对象时就是传一个引用啊,当我们声明一个引用类型变量时,系统只为该变量分配了引用空间,并未创建
    一个具体的对象;所以可以理解参数对象就是传一个地址。