1.内部类:
概述:定义在一个类中的类叫做内部类。他类消失了一些类本身有的功能。
分类:
从位置划分:
成员位置:
1.普通成员内部类
2.私有成员内部类
3.静态成员内部类
成员方法内部:
局部内部类
从表现形式上划分:
有名字的内部类:位置划分的内部类都属于有名的内部类
没有名字的内部类:匿名内部类【多态】
1.普通成员内部类:
位置:类中的成员属性位置使用类的格式在定义一个类
定义格式:和类的格式一样:class 内部类的名称{书写内部类的内容}
理解:我们可以把整个内部类看成是一个整体,整体看成外部类的一个特殊的属性。
访问:使用外部类的对象.内部类的对象
成员内部类的内容说明:【丧失一些类功能】
1.不能定义静态的资源
2.可以使用外部类的所有资源
3.外部类不能直接使用内部类的资源,要想使用必须先创建内部类对象
内部类资源的使用:
外部类中:在外部类的方法中创建内部类的对象,适用对象访问内部类的资源。
外部类外,首先创建外部类的对象,调用内部类的对象【创建出来。】格式:成员内部类 名字 内部类对象名 = new 外部类名().new内部类类名()。
2.私有成员内部类
位置:定义在成员位置上【类中方法外】被private修饰的成员内部类。 访问权限【范围变小】,只可以在本类即外部类中使用。
特征:普通的成员内部类被private关键字修饰。
定义格式:private class 名称{内部类的内容}
内容的说明:1.不能存在静态的资源2.可以使用外部类所有的资源。
使用:只能被外部类使用,除了外部类其他类使用不了。
外部类内:在外部类中定义方法,方法中创建私有内部类的对象,用对象去调用资源
外部类外:在外部类中定义方法,方法中创建私有内部类的对象,用对象去调用资源,外边的类创建外部类的对象调用外部类的方法间接的访问内部类的资源。
3.静态成员内部类
位置:类的成员位置【类中方法外】
特征:使用static修饰的普通成员内部类
格式:static class 名称{内部类的内容}
访问说明:
1.静态内部类可以访问外部类的所有的静态资源【遵守static的使用元素原则】
2.可以有自己的静态资源【成员内部类不可以有静态资源】
3.创建对象方法:
1.在外部类的内部:new 内部类名()
2.在外部类的外部:new 外部类名. 内部类名()
4.局部内部类(在外部类的方法中)
位置:定义在方法的方法体中;属于方法,可以看作是方法局部的元素;外部类不能直接访问局部内部类的元素;只能通过所在方法调用来使用,但是局部内部类可以使用外部类的所有资源。
1.局部内部类中的成员访问时根据所在的方法不同而不同的
在静态方法中:他只能访问外部类中的静态变量;局部内部类可以出现静态资源。
在普通方法中:局部内部类可以访问外部类中的所有的资源。
2.内部类可以访问所在 方法中的变量
3.在局部内部类所在的方法中,创建内部类的对象访问里面的相关资源。

2.抽象类
概述:被abstract修饰的类就叫做抽象类
抽象方法:
概述:被abstract修饰的并且没有方法体的方法
特点:对外只声明自己的功能,不会去实现。
优点:方法的功能扩展性强
格式:修饰符 abstract 返回值类型 方法名(形式参数)
注意事项:抽象方法必须存在于抽象类和接口中要想具体化必须先重写。
抽象类的内容:
1.成员变量:描述事物属性的。和普通的变量一样
2.构造方法:和普通类的构造一样【写法一样】但是不能创建对象了是给子类使用的
3.成员方法
普通方法:正常的进行定义
抽象方法:抽象类的特有方法【没有具体的执行语句】
4.抽象类和抽象方法的关系:抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。
5.特点:
1.一定被abstract 修饰
2.有构造 但是不能创建自己的对象
3.抽象方法可有可无
4.有抽象方法必定是抽象类
5.抽象方法必须要被子类重写。

3.接口
定义:是不同类型的事物的相似行为的集合体
格式:修饰符 interface 接口名称 {接口内容}
解释:
1.interface:就是关键字,表示接口
2.接口名称:自己命名【遵循见名知义、大驼峰格式】
3内容:
属性:接口的属性只能是常量或者被final修饰的变量
注意:1.属性是默认被public static final 修饰的2.声明属性的时候必须给其赋值。
构造方法:接口没有构造方法,所以不可以创建对象
行为:jdk1.8之前接口只有抽象方法。【抽象方法就是行为声明的表现形式。】
4.接口和抽象类的区别:
1.抽象类是对子类的共性行为生命的提前【子类要求是同一系列的类;局限性小】
2.接口是对不同系列的事物的共性行为的生命的提前【没有局限性】
3.抽象类是被类继承的,接口只可以被类实现。
5.接口的实现:
概述:接口是行为的集合,行为只是一种声明没有具体的实现,行为要想有效果必须被调用,接口自己没有对象,只有通过类对象来调用,必须要类来实现。
单实现:类一次只实现一个接口
概述:使用关键字implement连接类和接口,就产生实现的关系必须重写接口中所有的抽象方法。
格式:类A implement 接口B{重写方法}
1.一个普通类实现一个接口:类肯定重写了所有的抽象方法。
2.抽象类实现了一个接口:抽象类可以重写接口中的方法,也可以不重写,但是抽象类的子类必须重写没有被重写过的所有抽象方法。
多实现:一个类同时实现多个不同的接口
格式:类A mplement 接口 A、接口B、接口C...{类的内容【重写接口中的资源】}
原则:
1.所有接口的所有不同名的抽象方法必须重写
2.抽象类多实现接口的时候:抽象类可以重写接口中的方法,也可以不重写,最终抽象类的子类必须全部实现接口的所有不重名的抽象方法
3.多接口中有同名的抽象方法只需重写一次
6.继承和实现的优先级
1.一个类既要继承另一个类,又要实现接口,这时java中默认先继承后实现;因为继承时亲爹,实现是干爹;【亲属关系】
2.如果一个类继承父类又要实现接口时,如果接口中的抽象方法和父类中的抽象方法重名时,该类只需要重写父类的方法,不需要重写接口中的方法。
7.接口的特点
1.接口的属性是常量或者被final修饰的变量【静态的资源,使用接口名访问】
2.接口没有构造方法,不能创建对象
3.jdk1.8之前接口中行为只有抽象方法
4.接口要求子类来重写它的所有抽象方法
5.接口只能被类多实现不能被类多层实现。
8.类和接口之间的关系:
1.类和类:只能出现继承关系【java中支持的单继承、多层继承】
2.类和接口:只能实现关系【Java中支持单实现、多实现】
3.接口和接口:只能存在继承关系【Java中支持单继承、多继承、多层继承】
4.注意:一个接口继承了其他接口,意味着这个接口拥有所有继承的接口中的抽象方法;它的实现类必须重写所有的抽象方法。