【构造方法传入参数】

握草 2017-12-17 10:18:11
如题,不明白或者说理解不透彻——在构造方法中传入其他类的对象参数的目的是什么?
比如:
class A{
B b;
A(B b){
this.b=b;
}
......
}

没错这样就把类B的对象封装在类A中了,但是具体的,这样传入了B类对象后该怎么使用呢?
请举出一个或者多个实例!
...全文
376 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
握草 2017-12-19
  • 打赏
  • 举报
回复
虽然大家没有解决问题,但是精神可嘉。分就给你了~~
ooo-ooo 2017-12-19
  • 打赏
  • 举报
回复
引用 5 楼 qq_40778536 的回复:
[quote=引用 2 楼 oliver_105397 的回复:] 一个常见的案例:部门和上级部门,部门和员工。这种体现从属关系的类,或者其他包含关系(如学生~班级~学院~学校)、关联关系(课程~选课~学生)等。 当你要描述一个部门的时候,如果它含有上级部门,那么在设计部门类的时候一般会这样设计:

//部门类
class Depot {
    private Long id;
    private Depot depot; //上级部门
    public void Depot(){}
    public void Depot(Long id, Depot depot) {
        //省略
    }
    //省略getter和setter
}
//员工类(简单的写法,如果逻辑要更分明的话会写成EmpDepot,让Emp和Depot关联起来)
class Emp {
    private Long id;
    private Depot depot; //所属部门
    public void Emp() {}
    public void Emp(Long id, Depot depot) {
        //省略
    }
    //省略getter和setter
}
public void Depot(){}
public void Depot(long id, Depot depot){}
这算什么?构造方法是没有返回值的,而且为什么要在这里实例化对象的时候传入本类对象,要传也是和该类有相关关系的其他类的对象啊?![/quote] 你说的本类对象是单单从java方面来理解的,当你带上实体类的业务逻辑就会发现这是一个父子级的树状结构。
ooo-ooo 2017-12-19
  • 打赏
  • 举报
回复
引用 5 楼 qq_40778536 的回复:
[quote=引用 2 楼 oliver_105397 的回复:] 一个常见的案例:部门和上级部门,部门和员工。这种体现从属关系的类,或者其他包含关系(如学生~班级~学院~学校)、关联关系(课程~选课~学生)等。 当你要描述一个部门的时候,如果它含有上级部门,那么在设计部门类的时候一般会这样设计:

//部门类
class Depot {
    private Long id;
    private Depot depot; //上级部门
    public void Depot(){}
    public void Depot(Long id, Depot depot) {
        //省略
    }
    //省略getter和setter
}
//员工类(简单的写法,如果逻辑要更分明的话会写成EmpDepot,让Emp和Depot关联起来)
class Emp {
    private Long id;
    private Depot depot; //所属部门
    public void Emp() {}
    public void Emp(Long id, Depot depot) {
        //省略
    }
    //省略getter和setter
}
public void Depot(){}
public void Depot(long id, Depot depot){}
这算什么?构造方法是没有返回值的,而且为什么要在这里实例化对象的时候传入本类对象,要传也是和该类有相关关系的其他类的对象啊?![/quote] 这样就方便创建一个新的对象,如果用无参构造创建的话要先new一个空的Emp然后setDepot。但是有了全参或者主要参数的构造方法时,在创建一个Emp时就可以在new的时候直接把Depot写到构造方法中,省去一行代码,喜不喜欢这样用就看你的爱好了。
饺克力克 2017-12-18
  • 打赏
  • 举报
回复
除了简单对象之外的属性只能放在对象中,存放复杂属性。 例如汽车是一个类,汽车座椅也是一个类,汽车座椅有品牌、材质、颜色、生产时间、价格等等属性,不能用一个String存储,也不方便把所有属性全部放到汽车类中。 构造函数传入对象,就实例化了拥有这个复杂属性的一个实例对象,比如有这种座椅的汽车。
握草 2017-12-18
  • 打赏
  • 举报
回复
Thread (Runnable target){}
为了防止大家混淆,就以这个例子Thread类的构造方法要传入的Runnable接口的target参数是干什么用的?
握草 2017-12-18
  • 打赏
  • 举报
回复
引用 2 楼 oliver_105397 的回复:
一个常见的案例:部门和上级部门,部门和员工。这种体现从属关系的类,或者其他包含关系(如学生~班级~学院~学校)、关联关系(课程~选课~学生)等。 当你要描述一个部门的时候,如果它含有上级部门,那么在设计部门类的时候一般会这样设计:

//部门类
class Depot {
    private Long id;
    private Depot depot; //上级部门
    public void Depot(){}
    public void Depot(Long id, Depot depot) {
        //省略
    }
    //省略getter和setter
}
//员工类(简单的写法,如果逻辑要更分明的话会写成EmpDepot,让Emp和Depot关联起来)
class Emp {
    private Long id;
    private Depot depot; //所属部门
    public void Emp() {}
    public void Emp(Long id, Depot depot) {
        //省略
    }
    //省略getter和setter
}
public void Depot(){}
public void Depot(long id, Depot depot){}
这算什么?构造方法是没有返回值的,而且为什么要在这里实例化对象的时候传入本类对象,要传也是和该类有相关关系的其他类的对象啊?!
什么都不能 2017-12-18
  • 打赏
  • 举报
回复
我觉得这个问题首先要从OOD方面去描述了,首先,对象之间的关系是怎样的? 当然不管是从构造函数,还是用set方法注入都只是一种手段。
ooo-ooo 2017-12-18
  • 打赏
  • 举报
回复
引用 2 楼 oliver_105397 的回复:
一个常见的案例:部门和上级部门,部门和员工。这种体现从属关系的类,或者其他包含关系(如学生~班级~学院~学校)、关联关系(课程~选课~学生)等。 当你要描述一个部门的时候,如果它含有上级部门,那么在设计部门类的时候一般会这样设计:

//部门类
class Depot {
    private Long id;
    private Depot depot; //上级部门
    public void Depot(){}
    public void Depot(Long id, Depot depot) {
        //省略
    }
    //省略getter和setter
}
//员工类(简单的写法,如果逻辑要更分明的话会写成EmpDepot,让Emp和Depot关联起来)
class Emp {
    private Long id;
    private Depot depot; //所属部门
    public void Emp() {}
    public void Emp(Long id, Depot depot) {
        //省略
    }
    //省略getter和setter
}
当你拿到一个含有所有属性的Emp对象时,想拿到它的所属部门信息就可以这样做:Depot depot = Emp.getDepot(); 前提是你的数据库已经有这一条关联了的记录。
ooo-ooo 2017-12-18
  • 打赏
  • 举报
回复
一个常见的案例:部门和上级部门,部门和员工。这种体现从属关系的类,或者其他包含关系(如学生~班级~学院~学校)、关联关系(课程~选课~学生)等。 当你要描述一个部门的时候,如果它含有上级部门,那么在设计部门类的时候一般会这样设计:

//部门类
class Depot {
    private Long id;
    private Depot depot; //上级部门
    public void Depot(){}
    public void Depot(Long id, Depot depot) {
        //省略
    }
    //省略getter和setter
}
//员工类(简单的写法,如果逻辑要更分明的话会写成EmpDepot,让Emp和Depot关联起来)
class Emp {
    private Long id;
    private Depot depot; //所属部门
    public void Emp() {}
    public void Emp(Long id, Depot depot) {
        //省略
    }
    //省略getter和setter
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧