开闭原则引出

           程序是使用代码对现实世界进行抽象,自己简单写的Hello World程序基本上算不上什么软件,所谓软件开发就是以“人”为出发点,设计出满足“人”特定期望的东西。在实现“事”的过程中会依据“规则”使用某些“物”。例如电商,其所做的事情就是对交易场景的抽象。在满足了helloworld的牙牙学语后,要试着模拟现实世界事情。

          比如一个媒体资料库,可以一个Database类里面存有CD,DVD两类事物的集合,然后给这个资料库cd,dvd的添加查看方法,这样就简单的模拟了一个录像店。

private ArrayList<CD>cds = new ArrayList<CD>();private ArrayList<DVD>dvds = new ArrayList<DVD>();

public void add(CD cd){cds.add(cd)}public void add(DVD dvd){dvds.add(dvd)}

public void list(){for(CD cd:cds){cd.print()}for(DVD dvd :dvds){dvd.print()}

但是这样看起来有很多重复代码 ,CD和DVD也有重复属性,且如果需要存储新的类型又要复制粘贴,这时候引入一个Item类,Database类只存ArrayList<Item>,CD,DVD继承于Item,将添加查询具体的CD,DVD改为添加查询Item类,有新增类继承Item即可

private ArrayList<Item>items = new ArrayList<Item>();

public void add(Item item){items.add(item)}

public void list(){for(Item item:items){item.print()}

类定义了类型,子类定义了子类型,子类对象可以被当作父类对象来使用:子类对象可以赋值给父类变量、子类对象可以传递给需要父类对象的函数、子类对象可以放在存放父类对象的容器里。

当我们去构造子类对象时,先调用父类构造方法,属性初始化,然后再轮到子类构造器和属性初始化。在子类有自己的属性和从父类继承的属性,this代指自己super代指父类。如果子类当中有父类有过的相同名字成员变量,在子类中父类成员变量不是不存在而是被隐藏了,但用super关键字调用父类方法赋值是赋给父类属性,在谁的类的就是指谁的成员变量。通常来说离我最近的是我的,每个类管理自己范围内的事。

在java中对象变量赋值并不是让一个对象给另一个对象赋值,而是让这两个对象管理者去管理一个共同对象,赋值运算就是让某个变量去指向另一个对象,去管理另一个对象。这时候就会发生让静态类型为某个类型的变量去管理动态类型和静态类型不符的对象,java的对象变量是多态的,可以保存声明类型或者子类类型的对象。子类对象可以赋值给父类变量,父类对象只能造型为子类对象。

用封装来降低耦合,用接口或抽象来实现聚合,用数据加容器来提供可扩展性

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值