首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    融会贯通——深入了解面向对象设计原则“依赖倒转原则”

    一千个人眼里有一千个哈姆雷特,下面我尝试用深入浅出的语言贯穿到“控制反转”,“依赖注入”,“面向抽象编程”,以及“面向接口编程”这几个概念。 传递参数,关联(组合&聚合)关系时,要尽量引用高层次的抽象类,使用基类和接口进行变量类型的声明,参数类型的声明,数据类型转换(也是向高层次的抽象类转),而不要用具体的子类。 以上总结为“控制反转”,也叫“面向抽象编程”。 真到了要使用具体子类的时候,采用“依赖注入”的方式: 构造注入,通过构造函数传入具体类的对象 setter注入,通过setter方法传入具体类的对象

    07

    面向对象的Java实现

    1-1:封装 a.为什么需要封装(封装可以是数据方便维护、增加实用性、方便扩展等等。通过面向对象的思想,模拟现实生活中的事物。) b.什么是封装(封装就是将属性私有化,提供共有的方法访问私有属性) c.如何实现封装 例如: package s2java.sg.ch01; public class AccpTeacher3{ private String name;//教员姓名 private int age;//年龄 public String getName(){ return name; } public void setName(String MyName){ name=MyName; } public int getAge(){ return age; } public void setAge(int age){ if(age<22){ System.out.println("错误!最小年龄应为22岁!"); this.age=22;//若果不符合年龄要求,则赋予默认值 }else{ this.age=age; } } /* *返回自我介绍的内容 */ public String introduction(){ return "大家好!我是"+name+",我今年"+age+"岁"; } } 1-2:构造方法 a.为什么需要构造方法(使用构造方法可以给属性赋值。而且,实例化一个对象实际上就是去调用这个对象的构造方法。) b.什么是构造方法(构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值。) 构造方法必须满足以下语法规则:方法名与类名相同和没有返回类型。或者会所二名同、无返型。 c.带参数的构造方法(带参数的构造方法可以在构造方法中传递参数。) 在使用带参数的构造方法示例化对象时,传递的值和构造方法的参数应当在个数、次序和类型上互相匹配。 例如:AccpTeacher6 teacher=new AccpTeacher6("李名",23,"本科","咨询师"); 通过调用带参数的构造方法,在创建对象时,一并完成了对象成员的初始化工作,简化了对象初始化的代码。 1-3:方法重载 a.生活中的方法重载 例如: 一个司机可以驾驶不同的车子,虽然驾驶的行为实现各不相同,但是这些 操作都称为驾驶。驾驶这一行为就构成了生活中的方法重载。 b.方法重载的代码示例 例如: public static int max(int a,int b) public static int max(long a,long b) public static int max(float a,foat b) public static int max(double a,double b) 多次调用Math类的max()方法,分别进行不同的取最大值的操作。 例如: public class Test{ public static void main(String[] args){ Math.max(1,2); Math.max(1.0F,2.F); Math.max(1.0,2); } } c.构造方法重载(构造方法重载是方法重载的一个典型特例) 例如: package s2Java.sg.ch02; public class AccpTeacher7{ private String name;//教员姓名 private String school="北京中心";//所在中心 public AccpTeacher7(String name){ this.name=name;//设定教员姓名 } public AccpTeacher7(String name,String school){ this.name=name;//设定教员姓名 this.school=school;//设定教员的所在中心 } public String introduction(){ return "大家好!我是"+school+"的"+name; } } 例如: package s2java.sg.ch01; public class AccpTeacher7Test{ public static void main(String[] args){ AccpTeacher7 teacher1=new AccpTeacher7("李明"); System.out.println(teacher1.introduction()); AccpTeacher

    01

    算法与数据结构(一) 线性表的顺序存储与链式存储(Swift版)

    温故而知新,在接下来的几篇博客中,将会系统的对数据结构的相关内容进行回顾并总结。数据结构乃编程的基础呢,还是要不时拿出来翻一翻回顾一下。当然数据结构相关博客中我们以Swift语言来实现。因为Swift语言是面向对象语言,所以在相关示例实现的时候与之前在大学学数据结构时C语言的实现有些出入,不过数据结构还是要注重思想,至于实现语言是面向对象的还是面向过程的影响不大。 接触过数据结构的小伙伴应该都知道程序 = 数据结构 + 算法。数据结构乃组织组织数据的结构,算法就是对这些结构中的数据进行操作,可见数据结构的重

    07

    面向接口编程

    **面向接口编程** - 关心实现类有何能力,而不关心实现细节 - 面向接口的约定而不考虑接口的具体实现 ### 解析:         接口在这里边其实,他仅主要表示一种能力,这种能力主要体现在接口的方法,方法就描述了     接口能够实现的功能,但是呢,他没有任何的实现,这样的话就需要在实现类里面去实现接口中的     方法,完成具体的功能,我们在实际开发的时间经常需要使用,面向接口这种编程思想进行编程,     我们通常在定义接口时只关心实现类有何能力,就是能够做什么,而不关心具体实现,只描述它能     够做什么,面向接口的约定,而不考虑接口的具体实现。 **接口与抽象类的区别** - 相同点 - 都表示抽象特征 - 都不能被实例化 - 不同点 - 接口只能定义抽象方法,抽象类可以有实现方法 - 接口中不能有构造方法,抽象类可以有 - 一个类可以实现多个接口,但只能继承一个抽象类 ### 解析:         接口,我们可以把它理解成是比抽象类更抽象的一种类型,那么他和抽象类之间呢,有很多相似     的部分,第一个相同点,都表示抽象的特征,第二个是都不能够被实例化,不同点呢,接口当中只能     定义抽象方法,抽象类中呢,可以定义抽象方法,也可以定义实例方法,第二个不同点,接口中不能     有构造方法,但抽象类里可以有,第三个,区别不同点,一个类可以实现多个接口,但只能继承一个     抽象类,这是接口和抽象类的区别我们,在面试的时间是经常问到的一个面试问题。 ## 面向接口编程 **案例:实现防盗门功能** - 防盗门是一个门  is a的关系 - 防盗门有一个锁  has a的关系 - 上锁 - 开锁 ### 分析:         接下来我们就采用面向接口编程思想,来,再看一个案例,实现防盗门的功能,防盗门,是一个     门,我们通过is a去判断防盗门是不是门,是,我们就可以实现继承,防盗门,有一个锁,has a关     系就是有没有拥有,那上锁和开锁的能力,我们通过这个类的关系图,可以看到门拥有开和关的能力,     开关接口呢,上锁和开锁,一个实现防盗门,防盗门即继承了门又实现了接口,如何来实现这个功能     呢,首先我们去定义一个类,这个类就是到门,我们定义成抽象类,定义抽象方法必须要加Abstract     接口当中这两个可以省略,抽象内容呢,这两个属性,这两个关键词必须要加上去才表示抽象的行为。

    03
    领券