class Item {     // 父栏目
private int iid ;
private String name ;
private String note ;
private Subitem subitems [] ; //一个父栏目下有多个子栏目
private Product products [] ; //一个栏目下包含多个商品
public Item(int iid,String name,String note) {
this.iid = iid ;
this.name = name ;
this.note = note ;
}
public void setSubitems(Subitem subitems[]) {
this.subitems = subitems ;
}
public void setProducts(Product[] products) {
this.products = products ;
}
public Product[] getProducts() {
return this.products ;
}
public Subitem [] getSubitems() {
return this.subitems ;
}
public String getInfo() {
return "栏目编号:" + this.iid + ",名称:" + this.name + ",描述:" + this.note ;
}
}
class Subitem { // 子栏目
private int sid ;
private String name ;
private String note ;
private Item item ; // 一个子栏目对应一个父栏目
private Product products [] ; //一个子栏目下包含多个商品
public Subitem(int sid,String name,String note) {
this.sid = sid ;
this.name = name ;
this.note = note ;
}
public void setItem(Item item) {
this.item = item ;
}
public Item getItem() {
return this.item ;
}
public void setProducts(Product products[]) {
this.products = products ;
}
public Product[] getProducts() {
return this.products ;
}
public String getInfo() {
return "子栏目编号:" + this.sid + ",名称:" + this.name + ",描述:" + this.note ;
}
}
class Product { // 商品
private int pid ;
private String name ;
private double price ;
private Item item ;
private Subitem subitem ;
public Product(int pid,String name,double price) {
this.pid = pid ;
this.name = name ;
this.price = price ;
}
public void setItem(Item item) {
this.item = item ;
}
public Item getItem() {
return this.item ;
}
public void setSubitem(Subitem subitem) {
this.subitem = subitem ;
}
public Subitem getSubitem() {
return this.subitem ;
}
public String getInfo() {
return "商品编号:" + this.pid + ",名称:" + this.name + ",价格:" + this.price ;
}
}
public class TestISP {
public static void main(String args[]){
//准备出单独的类对象
Item item = new Item(1,"文具","-") ;
Subitem suba = new Subitem(1001,"笔","-") ;
Subitem subb = new Subitem(1002,"尺","-") ;
Subitem subc = new Subitem(1003,"刀","-") ;
Product proa = new Product(90001,"中性笔",2.0) ;
Product prob = new Product(90002,"钢笔",10.0) ;
Product proc = new Product(90003,"毛笔",8.0) ;
Product prod = new Product(90004,"直尺",2.0) ;
Product proe = new Product(90005,"三角尺",1.5) ;
Product prof = new Product(90006,"美工刀",5.0) ;
Product prog = new Product(90007,"剪刀",6.0) ;
//设置类之间的引用关系
suba.setItem(item) ;
subb.setItem(item) ;
subc.setItem(item) ;
item.setSubitems(new Subitem[]{suba,subb,subc}) ;
proa.setSubitem(suba) ;
proa.setItem(item) ;
prob.setSubitem(suba) ;
prob.setItem(item) ;
proc.setSubitem(suba) ;
proc.setItem(item) ;
prod.setSubitem(subb) ;
prod.setItem(item) ;
proe.setSubitem(subb) ;
proe.setItem(item) ;
prof.setSubitem(subc) ;
prof.setItem(item) ;
prog.setSubitem(subc) ;
prog.setItem(item) ;
suba.setProducts(new Product[] {proa,prob,proc}) ;
subb.setProducts(new Product[] {prod,proe}) ;
subc.setProducts(new Product[] {prof,prog}) ;
item.setProducts(new Product[] {proa,prob,proc,prod,proe,prof,prog}) ;
//取出数据
//1、通过一个类型找到全部的子类型
System.out.println(item.getInfo()) ;
for (int x = 0;x <item.getSubitems().length ;x ++ ){
System.out.println("\t|-" + item.getSubitems()[x].getInfo()) ;
}
System.out.println("--------------------------------------------------------------") ;
System.out.println(item.getInfo()) ;
for (int x = 0;x <item.getProducts().length ;x ++ ){
System.out.println("\t|-" + item.getProducts()[x].getInfo()) ;
System.out.println("\t|-" + item.getProducts()[x].getSubitem().getInfo()) ;
}
System.out.println("--------------------------------------------------------------") ;
System.out.println(subb.getInfo()) ;
for (int x = 0;x <subb.getProducts().length ;x ++ ){
System.out.println("\t|-" + subb.getProducts()[x].getInfo()) ;
}
}
}

第一次写上百行的代码啊QAQ,中间报错了几次折腾了好久才发现是尼玛设定set和get方法时竟然不知道怎么的把public写成了private,晕死,以后就知道了。错误如下图

最终完成时运行结果如下

Java简单类——双向一对多映射的更多相关文章

  1. Java简单类——一对多映射(省、市)

    class Province { private int pid ; private String name ; private City cities [] ; public Province (i ...

  2. java 简单类

    package 面向对象编程_封装性; //1.类名称必须存在有意义,例如Book.Emp //2.类之中所有的属性必须用private封装,封装后的属性必须提供有setter和getter方法 // ...

  3. 第四周总结和实验二Java简单类与对象

    实验目的 掌握类的定义,熟悉属性.构造函数.方法的使用,掌握用类作为类型声明变量和方法返回值: 理解类和对象的区别,掌握构造函数的使用,熟悉通过对象名引用实列的方法和属性: 理解static修饰对类. ...

  4. 第四周课程总结与第二次实验报告(Java简单类与对象)

    1.写一个名为Rectangle的类表示矩形.其属性包括宽width.高height和颜色color,width和height都是double型的,而color则是String类型的.要求该类具有: ...

  5. Java简单类——多对多映射

    class Admin { private String aid ; private String password ; private Role role ; public Admin(String ...

  6. Java简单类(部门、领导、雇员关系)

    class Dept { private int deptno ; private String dname ; private String loc ; private Emp emps [] ; ...

  7. 菜鸡的Java笔记 - java 双向一对多映射

    双向一对多映射    two-way    开发要求:        根据数据表的结构进行简单java类的转换:        要求实现如下的输出信息:            可以根据课程取得全部参与 ...

  8. Java File类的简单使用

    Java File的简单使用(创建.删除.遍历.判断是否存在等) Java文件类以抽象的方式代表文件名和目录路径名.该类本身不能用来读数据或写数据,它主要用于磁盘上文件和目录的创建.文件的查找和文件的 ...

  9. java时间类简单总结

    java时间类(Data类) 1.Data类(没有考虑到国际化,好多方法已过时java.util.Data包中) 父类(是类不是接口含有直接子类3个):  日期格式为:年月日时分秒(不包含毫秒部分) ...

随机推荐

  1. 读取接口XML和批量导入数据SqlBulkCopy

    首先是C#处理xml文档 string urlStr = string.Format("http://……?timeBeg={0}&timeEnd={1}", timeBe ...

  2. spring boot 打包成jar 包在发布到服务器上

    http://blog.csdn.net/sai739295732/article/details/49444447

  3. http://www.cnblogs.com/itsource/p/4266905.html

    http://www.cnblogs.com/itsource/p/4266905.html

  4. 疯狂java学习笔记之面向对象(四) - this关键字

    Java中this关键字主要有以下两个方法: 1.this引用 - 可用于任何非static修饰的方法和构造器中,当this用于方法中时,它代表调用该方法的实例/对象;当this用于构造器中时,它代表 ...

  5. git 学习笔记3--status flow

    1.status 通过执行 git status 命令,查看输出的信息来理解文件所处的状态以及可能的动作. 1.1 nothing to commit (working directory clean ...

  6. XAML Region标签功能

    XAML本身没有Region标签功能,很郁闷.现在有插件可以实现该功能了!   <!-- Region (Any Text You Want) --> Your Code <!-- ...

  7. 【原】iOS学习之ARC和非ARC文件混编

    在编程过程中,我们会用到很多各种各样的他人封装的第三方代码,但是有很多第三方都是在非ARC情况下运行的,当你使用第三方编译时出现和下图类似的错误,就说明该第三方是非ARC的,需要进行一些配置.

  8. [转]使用EasyRsa3为OpenVPN生成密码

    1. 下载Easy RSA3 下载完并解压后,拷贝一份到/etc/openvpn和/home/client下 #.3版本需要独立下载个easy-rsa,该包用来制作ca证书,服务端证书,客户端证书 w ...

  9. sqlite 数据类型 全面

    http://blog.csdn.net/jin868/article/details/5961263 一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断.SQ ...

  10. SRM 615 DIV1 500

    TC 都615了...时间过的真快啊. 第一次做出500分,心情还是很激动的,虽然看了很久的题解,TC官网上的题解,很详细,但是英语的...我搜了搜,发现一份日语的...好吧,我还是看看英语的吧... ...