接口
- 概念
如果这个抽象类中所有的方法都是抽象方法,那么就可以把这个类变成接口(接口不是类),类要与接口直接产生关系通过implements关键字产生了实现关系(类与接口),接口与接口直接有继承关系,类有接口是多实现,接口与接口是多继承,如果一个类实现了接口就要重写所有的抽象方法,如果不想都重写就变成抽象类
注意:
①.接口可以创建对象?不能,有构造方法所以创建不了对象
②.接口与接口是多继承
interface A{
m();
}
interface B{
n();
}
interface C extends A,B---->m()和n()
interface A{
void m();
}
Interface B{
int m();
}
就只能单继承
-
java中所有类型的对象都可以多接口进行赋值,编译时期都没错,运行时期查看的是实际创建类与接口直接是否有实现关系
-
接口中可以定义属性和方法?
可以定义属性,属性只能被public、static、final共同修饰,
可以定义抽象方法,默认被public、abstract共同修饰 -
接口不是类,底层还是.class文件
-
接口中是否都是抽象方法?
不一定 jdk1.7及其以前的版本中规定接口只能有抽象方法,jdk1.8版本及其以后接口中可以定义抽象方法和实体方法
jdk1.8关于接口的新特性
①.允许定义实体方法(default和static方法)
②.Lambda表达式—重写接口中的抽象方法(接口中只能有一个抽象方法)
③.接口中只有抽象方法就是函数式接口—函数式编程
接口:模板 统一类形式
内部类—
- 概念-----类的结构的一种扩充
- 分类
局部(方法)内部类
在方法中定义类,只能定义非静态的属性和方法,允许定义静态常量,可以继承和实现,不能被访问权限修饰符修饰,可以拿到外部类的所有属性和方法,只能拿到本方法的常量(隐式),创建对象只能在本方法中创建
成员内部类
在类中方法外的位置定义类,只能定义非静态的属性和非,允许静态常量,可以继承和实现、,可以被访问权限修饰符修饰,可以拿到外部类所有的属性和方法
静态内部类
在类中方法外的位置用static修饰的类,可以定义所有的属性和方法,允许定义静态常量,可以被访问权限修饰符修饰,可以继承和实现,只能拿到外部类的静态属性和方法
A.B.i A可以是对象,BA.B.i A 可以是对象,B是对象 i是B对象的属性
* A是类 B是对象 i 是B对象的属性
* A是外部类 B是静态内部类 i是内部类的静态属性
匿名内部类
可以被继承的类或者实现的接口,都可以具有匿名内部类的形式,匿名内部类最终做的事重写方法,匿名内部类优先使用一次,在方法中使用匿名内部类就和方法内部类使用一致,如果在类内方法外使用匿名内部类和成员内部类使用一致
内部接口—(类中可以定义接口,接口中定义接口,内部的接口都要是静态的)
类中可以定义类或者接口,接口中可以定义类或者接口
包
- 分类
声明包—package类的位置 首行而且只能一个
导入包----把不在一个位置的其他类导入 import其他类的位置 不在首行 有多个
java(java源生包)
.lang—使用的时候不需要导包,在程序启动的时候就会默认把lang包下所有的内容直接加载到方法区—核心类库
.util—用于操作类或者对象的工具
.applet—小型应用程序
.awt—窗口
.beans—类
.io—数据流
.math—简单的数学运算
.net—网络
.nio—高并发
.security–安全
.sql—操作数据库
.text—格式化
.time—时间和日期
Javax(扩展包)
org(第三方厂商)
总结
-
接口----抽象类中所有方法都是抽象方法就把抽象类变成接口
类与接口通过Impelments产生实现(多实现),接口与接口之间是多继承
接口不能创建对象(没有构造方法),接口可以与所有类型的对象进行直接赋值,没有编译检测,运行时期有实现关系就能执行,属性(public static final),jdk1.8新特性(可以定义实体方法(static 、default)、 Lambda表达式(重写接口中的抽象方法)、 函数式接口)
-
内部类-----方法内部类(就是方法局部变量都是常量)----成员内部类(成员内部类对象的创建)----静态内部类(创建对象)--------匿名内部类(用于重写方法----类可以被继承或者接口可以被实现)
-
包-----声明包、导入包-----java(lang包、util包)、javax、org