9.接口与内部类
Posted anzhilanxiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了9.接口与内部类相关的知识,希望对你有一定的参考价值。
一.抽象类
- 不可以被实例化为对象
- 必须被继承
- 不能用final修饰
- 属于后期(动态)绑定
- 在设计阶段要确定好是否定义抽象类
- 例子:哺乳动物类 abstruct class buru(){}
2.抽象方法
- 是不完整的方法,只有声明,但没有方法主体
- 仅代表一种类型或功能,而不是具体的实现细节
- 子类必须重写父类的抽象方法
- 如果不想重写,那子类也必须是抽象类
二.接口
- 例子:虽然球类和轮胎类没有直接联系,但是可以赋予他们一种通用的行为:弹跳
- 可以解决单继承的缺陷
- 接口中的方法也没有方法体body,方法时隐藏式的抽象方法,天生用public abstruct修饰
- 类要实现接口的抽象方法
2.接口与接口的关系:支持多继承
3.特例(default修饰的方法)
default void func(){ }//必须有方法体,子类可用default方法 static void func1(){ }//子类用 类名.方法名 的方法调用静态方法
4.接口的属性,天生用 public static final修饰,继承接口的类可直接访问
5.类与接口的对比
- 接口不能实例化
- 接口无构造方法
- 接口的方法都是抽象方法
- 接口的成员属性都是用public static final修饰的
- 接口无静态代码块
- 接口支持多继承
6.接口与抽象类的对比
- 抽象类可以有构造方法,但接口没有
- 抽象类有静态代码块,但接口没有
- 类只能继承一个抽象类,但是可以实现多个接口
三.内部类
- 定义内部类的原因:班级类里面有学生类,学生类不能轻易被访问,这里的学生类就属于内部类。是对内部类的保护,把内部类当做一个属性看待
- 分类
- 普通内部类(非静态内部类)
class MyOuter{ private int x=10; public void makInner(){ MyInner in=new MyInner(); in.seeOuter(); } class MyInner{ public void seeOuter(){ syso(x); } } }
调用普通内部类:有两种方法,导包和不导包
public static void main(String args[]){ MyOuter mo=new MyOuter();//先创建外部类 MyOuter.MyInner inner=mo.new MyInner(); //mo.的方式创建内部类 inner.seeOuter(); }
- 静态内部类:只能访问静态属性和静态方法
class BigOuter{ static class Nested(){} } class Broom{ public static void main(String []args){ BigOuter.Nested n=new BigOuter.Nested();} } //用类名.的方式创建静态内部类对象
- 局部内部类:在外不能访问,不能创建对象,只能在本类的方法中创建对象
可视为局部变量
在局部内部类中,可以访问局部变量,但不能修改
public void func(){ int i=0; final int j=1; class InnerClass4{ System.out.println(i); //i++;方法中的局部变量不能修改值,只能访问 } InnerClass4 in=new InnerClass4(); }
- 匿名内部类:相当于创建了一个没名字的类,然后创建对象,用父接口的引用指向(多态),可重写方法
Inter1 i=new Inter1(){ @override public void func1(){} }
局部匿名内部类:把匿名内部类放到局部内部类中,相当于局部变量,只能用一次。
欲知详情:http://www.cnblogs.com/mengdd/archive/2013/02/08/2909307.html
以上是关于9.接口与内部类的主要内容,如果未能解决你的问题,请参考以下文章