单例模式
只能创建一个实例
创建实例需要有构造器,但是公共的不行
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修饰 分为非静态成员内部类 、静态成员内部类
主 要: 如何创建内部类的对象
如何解决重名问题
内部类还是个内部类:可以添加属性、方法、构造器