1.抽象类和接口的区别:
①抽象类 用abstract修饰,当类的方法不能实现而需要通过子类重写完成时需要定义为抽象类。抽象类不能创建实例,用abstract标记的方法是抽象方法,当父类中的方法不能够实现时使用抽象方法,抽象方法的方法体为空,并且是以;结束而不是{ }。如果有一个以上的方法标记为抽象方法,那么这个类也要标记为抽象类。抽象方法需要通过子类继承,从而对抽象方法进行重写。只要子类继承了抽象类,那么就要对父类的抽象方法进行重写否则出错;子类也可以将自己标记为抽象类,这样就不用重写父类的抽象方法。注意没有抽象的属性。
②接口interface,创建接口和创建类类似,实现接口用
public class类名implements+接口名,+接口名,接口中所有的方法都是public abstract,接口变量默认属性是public,static,final如果没有显示说明则默认是上述属性,如果定义其他的属性则出错。接口名习惯在名字前加I表示是接口,如IAnimal。类实现接口时,也要重写接口中的抽象方法。另外接口能实现多继承,但没有多大意义。
2.static,final,abstract总结:
3.java是单继承多接口,不能多继承的原因是遇到父类间存在相同的属性或方法名时会因为不知道区分而出错。
serializable接口又被称为marker,它没有任何方法要被实现,它能够实现类的序列化。从而使得(1)对象可以在网络上传输(2)可以使对象写到文件中。用法:
class Dog implements serializable{
}
4.内部类,考试和平时使用都很少,只要了解。内部类就是在一个类里面定义的类。在外部引用内部类时需要给出完整的名字,内部类可以访问包含他的类的静态变量、实例变量。内部类能够隐藏起来,不为同一包中的其他类所见。使用内部类在编写事件驱动程序时很方便。
匿名类: 已存在类A和类B,在类A的入口函数中有匿名函数:
New B(){
Public void say(){
System.out.println(“这创建了一个匿名类”);
}
} .say();
这段代码创建了匿名类,可以理解成类B的一个子类;如果B是接口,那么匿名类必须实现接口的抽象方法。
5.内部类的实例创建:假设InnerClass1 是 InnerClass的内部类
InnerClass.InnerClass1 b = new InnerClass().new InnerClass1();
或者当内部类被定义为static时:
InnerClass.InnerClass1 b = new InnerClass.InnerClass1();
6.类与类的三种关系:
①依赖(“use-a”) association
如果一个类的方法操作了另外一个类的对象,那么这个类就依赖于另一个类
例如:Order类依赖于Account类
②聚合(“has-a”)aggregation
一个类的对象包含了另一个类的对象
例如:Order类对象包含Item类的对象,Order类和Item类具有聚合关系
③继承(“is-a”)composition
特殊和一般的关系
理解template模式(模板模式):
先定义一个抽象类,然后子类分别继承这个抽象类并且重写抽象方法。然后再定义一个类,通过创建对象时改变为子类的对象即可实现对相应子类的操作。
7.简单工厂(Simple Factory)
在简单工厂模式中,工厂负责生产类的实例对象。
简单工厂模式是类的创建模式,在很多时候,一个实例的获取,并非只是new的方式那么简单,他要求能够根据需要来动态的决定创建具体类的实例,试用工厂模式,可以将类的实例化责任转移到独立的工厂类中,有利于提供程序的可维护性。
Java语言中的DateFormat类就是一个简单工厂的实现。
8.模板方法模式
模板方法模式是一种基于继承的复用。
模板方法模式将实现顶层逻辑的抽象类中的部分方法以具体方法及构造子方法实现,然后将剩余的逻辑声明为抽象方法,延迟到子类中实现。
模板方法模式中使用抽象角色给出顶级行为的是吸纳,而将作为细节步骤的基本方法留给具体子类实现。
Java中的HttpServlet类就是典型的模板方法模式的应用。