java中几个概念的总结

来源:互联网 发布:java电子邮箱格式校验 编辑:程序博客网 时间:2024/06/05 15:32

抽象

    abstract,是修饰符,用来修饰类和函数。抽象就是不具体,当子类当中有些函数的声明相同,但是功能主体不同,就可以将函数声明定义成抽象方法封装在父类中,包含抽象方法的类是抽象类,抽象的父类无法创建实例对象,因为抽象方法不具体,只有当子类复写了父类中的全部抽象方法才能创建对象,才能使用抽象方法。所以抽象从某种意义上是强迫子类实现父类的抽象方法。抽象方法一定在抽象类中, 抽象类中的方法不一定都是抽象的。有些类不像被创建对象,也可以定义成抽象类。

接口

    是类对外暴露的规则,其中的方法都是抽象的,变量都是常量。默认的方法修饰符是public abstract,变量修饰符是public static final。不同的类或者部分子类中有一些定义相同但是功能主体不同的函数,可以向上抽取成抽象方法并封装成接口,子类实现接口后就可以提供不同功能的方法,提高了代码的扩展性。

继承

    不同类中有一些共性的属性和方法,可以向上抽取成父类,子类继承父类,提高了代码的复用性。继承的出现导致了多态的出现。并且简化了子类的代码书写。

java面向对象的三个特点就是继承、多态、封装。封装隐藏了细节,只对外暴露方法或者工具,隐藏了具体细节,可以保护内部,提高了代码的复用性,较为高效。多态提高了代码的扩展性,比如方法的参数是父类对象,那么传入父类对象和子类对象都可以,提高了功能扩展性。继承:父类与子类、接口与接口实现:接口与类严格来说,java不支持多继承,但是可以通过接口实现多继承。类与类之间不可以多继承,但是接口与接口之间可以多继承,类和接口之间可以多实现。

装饰设计模式

    如果我们不满足现有的类的方法功能,可以创建其子类,对该方法进行复写,以便进行功能增强,但是继承体系较为庞大,并且代码冗余,扩展性较差。因此可以使用装饰类,将需要功能增强的类对象传入装饰类的构造函数,基于已有对象方法,进行功能增强,并提供装饰类。和继承体系比较,更灵活,扩展性更强。比如我们的IO流中的读取类,Reader,对于不同的数据,有不同的读取方法,所以Reader下有很多读取子类,分别用于读取不同类型的数据,如果想提高效率,需要使用缓冲区技术,如果使用继承体系,那么在每个读取子类下都有一个对应的缓冲区子类,这样继承体系会很庞大,并且代码冗余,扩展性极差,如果又有了新的读取子类,那么还需要重新创建新的缓冲区子类,继承体系更为庞大,因此我们可以使用装饰类,将需要被功能增强的类对象传入构造函数,基于已有方法进行修饰并增强,提供装饰类。

单例设计模式

1)懒汉式

class Single{//构造函数是私有的,除本类无法创建对象private Single(){}private static Single s = null;public static Single getInstance(){if(s == null){synchronized(Single.class)//加锁{if(s == null)s = new Single();}}return s;}}

2)饿汉式

class Single{private Single(){}private static Single s = new Single();public static Single getInstance(){return s;}}
    懒汉式:Single类进内存,对象还没有存在,只有调用getInstance()方法时,才建立对象调用函数时才创建对象。这就是延时加载。
    饿汉式:Single类一进内存,就已经创建好了对象。

迭代器

    迭代器是接口,Interator接口,是集合对元素的读取方式。集合体系下有很多容器,不同容器的底层数据结构不同,对数据的读取等操作方式也不同,所以把对元素的读取方式封装成内部类定义在集合类中,以便对元素进行读取。不同容器对元素的操作方式不同,可以将共性方法比如判断和读取元素方法向上抽取成抽象方法封装在Interator接口中,内部类要实现Interator接口,复写其方法。集合对外提供了iterator()方法获取迭代器(其实是内部类的对象,即Iterator的子类),来实现对集合元素的获取。类似于抓娃娃机,娃娃机的玻璃容器就是集合,里面的娃娃是元素,娃娃有不同的排列方式,相当于有不同的数据结构,里面的夹子就相当于迭代器,操纵杆是娃娃机对外提供的获取夹子的方式,我们可以通过操纵杆获取对夹子的控制,相当于通过iterator方法获取Iterator对象,然后来抓娃娃,也就是读取对象。
集合中对元素的操作有两种方式,一种是通过迭代器,一种是通过集合的方法,使用迭代器进行元素遍历的时候,不能使用集合的方式同时进行操作,但是迭代器提供了对元素的操作方式,比如Iterator接口,有remove方法,可以遍历元素的同时删除元素。其子接口ListIterator接口,有add、set、remove方法,可以在遍历元素的同时增加、设置、删除元素。但是只能是List接口下的子类才能使用该迭代器,而Iterator接口是整个Collections集合体系下均可使用。


原创粉丝点击