java(单例模式、抽象类、接口、内部类)

    xiaoxiao2021-03-25  151

    单例模式

    只能创建一个实例

      创建实例需要有构造器,但是公共的不行

     

     1.构造器私有化

     2.创建静态的实例 

     3.通过公共的静态方法返回

    Singleton s1 =Singleton.getSingleton(); Singleton s2 =Singleton.getSingleton(); System.out.println(s1); System.out.println(s2); System.out.println(s1==s2); /*运行结果 私有构造器 com.hpe.java1.Singleton@4d43691d com.hpe.java1.Singleton@4d43691d true*/

    抽象类

       1.使用abstract关键字定义的类

      2.特点:抽象类不可以不实例化,可以被被继承(与final类恰好相反),能不能有构造器?  能

      3.只要是类就会有构造器

      4.abstract不能用来修饰属性、构造器、private、static、final。

       5.抽象类不能被实例化。抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。

       抽象方法:

       用Abstract修饰的方法,只保留方法的定义(方法的声明),没有方法体,以分号结束

        abstract intabstractMethod1( int a);

       作用:抽象方法,只保留方法功能,而具体的实现,交给继承抽象类的子类,重写这个抽象类的方法。如果不重写这个类也是抽象类

       子类必须要重写这个方法吗?    必须

      

      抽象类与抽象方法的关系

       抽象类中不一定有抽象方法,但 具有抽象方法的类一定是抽象类

     抽象类 vs 一般类

     相同点:

          都是用来描述事物的,内部都有类的成员

     不同点:

          抽象类不能创建实例, 一般类可以创建实例

          抽象类中可以包含抽象方法,一般类不可以包含

    接口

       1.接口定义的是一种功能、功能又类来实现(implements),

          class Bextends C implements A

       2.如何定义接口:使用关键字interface

       3.格式 interface  接口类{}....

       4.内部可以放什么呢?接口中可以包含常量与抽象方法,不能有变量及其他的方法

          接口中的所有成员变量都默认是由public static final修饰的

          接口中的所有方法都默认是由public abstract修饰的。

          接口中的成员,修饰符默认的都是public

          接口没有构造器

       5.在java中继承的是单继承,一个子类只能继承一个父类,通过关键字extends    子类与父类的关系是继承

            在java中 一个类可以实现多个接口,通过关键字implements,类和 接口的关系是实现

       6.一个类实现接口,就要重写他的抽象方法,不重写的化这个类必然是抽象类

       7.一个类可以实现多个接口,中间用逗号隔开

       8.当一个类既继承类又实现接口的时候,将接口放在后面  

       9.类与类之间是单继承,接口与接口之间  是多继承  (接口也可以继承另一个接口,使用extends关键字)

       10.接口也有多态性

       11.如果实现接口的类没有实现接口中的全部方法,必须将此类定义为抽象类。

    总结:

          在开发中,一个类不要去继承一个已经是实现好的类,要么继承抽象类要么实现接口

          通过接口来定义功能,可以使不相关的类具有该功能(具体的实现可能不同),不需要考虑这个类之间的关系,以及方法的具体

          通过接口可以指明多个类需要实现的方法,一般用于定义对象的扩展功能

          接口主要是用来定义规则的

     

    抽象类和接口的区别

    (1)接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。

    (2)abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface,实现多重继承。接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。

    (3)在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,不过在 interface中一般不定义数据成员),所有的成员方法默认都是 public abstract 类型的。

    (4)abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"has-a"关系。

    (5)实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。抽象类中可以有非抽象方法。接口中则不能有实现方法。

    (6)接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以在子类中重新赋值。

    内部类

    也就是说:  一个类可以定义在一个类的内部,里层的内部类 ,

    外层的是外部类  

    根据位置来划分:  成员内部类、局部内部类   

    成员内部类 : private 缺省 protected public final static

                 还是个类

                 adstract

                 成员内部类  按照是否用static修饰  分为非静态成员内部类 、静态成员内部类       

    主 要:   如何创建内部类的对象  

              如何解决重名问题   

    内部类还是个内部类:可以添加属性、方法、构造器

    转载请注明原文地址: https://ju.6miu.com/read-4752.html

    最新回复(0)