抽象类
抽象类:能够定义抽象方法的类(其他与普通类相同,包含成员变量,方法,构造器,初始化块,内部类)
抽象方法:没有方法体的方法
抽象类的限制:
1.抽象类不能实例化对象(构造器为了给子类使用)
2.this指向当前子类对象
3.具体方法可以调用抽象方法
4.具体子类必须重写抽象方法
5.抽象子类可以继承继承链上所有的抽象方法
6.具体子必须实现继承链上的所有抽象方法
7.final 修饰的类不能被继承,final修饰的方法不能被重写,因此final和abstra永远不可能同时使用
8.abstr不能用于修饰局部变量,也不能用于修饰构造器
9..static和abstract不能同时修饰某个方法,private和abstr不能同时修饰方法
10抽象类可用于模板模式
抽象父类只用定义需要使用的某些方法,把不能实现的部分抽象成抽象方法,留给其子类去实现;
父类可能包含需要调用其他系列方法的方法,这些被调方法即可由父类实现,也可由子类实现
接口
接口:只能定义抽线方法的特殊类(1.8之前)
用于处理继承单一的局限性,其实一种 比抽线类还抽像的类,接口和类的关系是实现
接口的定义:
Interface 接口名{}
1.接口内的成员方法默认为公共抽象方法,public abstract 可以省略
2.接口内的属性都默认为公共静态常量
3.接口内可以定义公共静态方法
类与类:继承关系,单一继承,多层继承 类与接口:实现关系,多实现 接口与接口:继承关系多继承 |
4.1.8之后可以定义被default修饰的具体方法
接口与抽象类的区别:
1.接口更纯粹,有面向接口编程
2.类可以实现多个接口
3.接口与接口之间是多继承(接口只能继承接口)
4.接口也算特殊的父类,可以实现多态
5.接口的信息不会因为加载实现类信息而被加载(因为接口只要能在编译的时候,限制子类必须重写方法就可以了
6.接口对外提供规则
7.降低程序的耦合性(可以实现模块化开发,定义好规则,每个人实现自己的模块,提高开发效率)
内部类:
内部类:定义在类内部的类
成员内部类:
1.可以直接访问外部类的资源
2.又和外部类重复资源,优先访问自己
3..通过外部类名.this 来访问外部类当前对象
4.实例化:外部类名.内部类名 引用名= new外部类对象.new 内部类
第一种:Out o=new Out(); Out . InOne one=o.new InOne();
第二种: Out.InOne one=new Out().new InOne();
静态内部类:
1.只能访问外部类静态资源,可以通过类名区分资源
2.实例化:外部类名.内部类名 引用名=new 外部类名.内部类名( )
局部内部类:
1.不能使用访问修饰符.默认只能在方法内部访问
2.可以直接访问外部类资源,可以通过out.this 访问外部类资源
匿名内部类:没有名字的局部内部类
1.应用类型的子类型或者实现类
2.是当前 所在类的内部类
3.当在匿名内部类中访问外部方法的变量时,该变量默认为常量