java基础之接口以及java基础之内部类
一、什么是接口
接口:interface
接口在java中的定义:特殊的抽象类,大量抽象方法的集合。
1.接口的定义要求
接口的定义对JDK的版本有着不同的要求,最主要的是以下三个版本的的要求:
jdk1.7及之前:
公共的静态的常量 :public 、static、 final因为是默认定义,所以这三者可以任意省略
公共的抽象的方法:public、abstract同上。可任意省略
jdk1.8:
静态方法 : 被static修饰的方法可以通过接口进行调用
默认方法 : default显示修饰的方法可以通过实现类对象调用
jdk1.9:
私有方法 : private修饰的方法只能在接口的默认方法中使用
2.接口的实现与继承的区别
继承 | 实现 |
---|---|
子类一旦继承父类,就有权使用父类的成员,如果成员你满意,拿过来直接使用,如果个别的功能不满意,就在子类中进行重写 | 实现类一旦实现接口,也具有了接口带来的功能,但是需要先在实现类中进行重写,然后再使用 |
3.接口的注意事项
- 接口不能实例化
- 接口需要被实现类进行实现,实现接口,重写抽象方法
- 接口中定义的功能 : 通过具体的实现类对象调用
- 接口中定义的具体的实现类 : 重写所有接口中的抽象方法 + 按需新增
- 接口中定义的抽象的实现类 : 按需重写抽象方法 + 按需新增
- 先继承后实现
- 类与类之间只能继承,单继承机制
- 类与接口之间,只能实类实现接口,可以多实现
- 接口与接口之间,只能继承,多继承
二、什么是内部类
内部类从字面意思去解读就是类中定义类
如下图代码中演示:
class Out{//-----------------------外部类
int i = 0 ;
public static void Inner_2(){
System.out.println("这是外部类的方法");
}
public void Inner_3(){
System.out.println("这是外部类的非静态方法");
}
class Inner{//------------------内部类
int j = 0;
public void Inner_1(){
System.out.println("这是内部类的非静态方法");
}
}
}
1.内部类的六大分类
- 成员内部类
- 私有内部类
- 静态内部类
- 局部内部类
- 匿名内部类
- Lambda表达式
2.成员内部类
成员内部类的定义:内部类定义在外部类的成员位置
- 具有成员的特点可以被成员修饰符所修饰,也具有类的特点可以继承可以实现
- 在成员内部类中可以定义静态成员|非静态成员
- 在成员内部类成员方法中可以直接使用当前成员内部类的成员(静态、非静态的),在成员内部类的静态方法中,只能直接使用成员内部类的静态,不能使用成员
- 在成员内部类中可以直接使用所在外部类的成员,包括私有的
- 在所在外部类中可以通过对象方法成员内部类的成员,通过类名访问成员内部类中静态内容,包括私有的
- 在其他类中可以通过外部类类名.成员内部类类名.静态内容访问成员内部类中的静态内容
- 在其他类中可以通过new 外部类对象().new 成员内部类对象()去访问成员内部类中成员
3.私有内部类
被private修饰的成员内部类
- 在私有内部类中定义静态|非静态的成员
- 在私有内部类成员方法中可以直接访问外部类的成员,包括私有的
- 在所在外部类中,可以通过私有内部类的对象访问其成员,可以通过私有内部类的类名访问其静态内容
- 在其他类中无法通过访问私有内部类
4.静态内部类
被static修饰的成员内部类
- 在静态内部类中可以定义静态、非静态的内容
- 在静态内部类中可以直接使用外部类的静态内容,需要通过外部类对象访问外部类的成员,包括私有的
- 在所在外部类中可以通过静态内部类的类名访问静态内部类的静态内容,通过静态内部类的对象访问静态内部类的成员内容,包括私有的
- 在其他类中通过外部类类名.静态内部类类名.静态内容去访问静态内部类中的静态内容
- 在其他类中通过new 外部类类名.静态内部类类名()的对象去访问静态内部类中的成员内容
总结
接口的继承和实现要区分开来。介绍了3中内部类。每个内部类的成员引用都是不同需要注意。