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

单例模式


只能创建一个实例

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

 

 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修饰  分为非静态成员内部类 、静态成员内部类       

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

          如何解决重名问题   

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



你可能感兴趣的:(java(单例模式、抽象类、接口、内部类))