12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- class 人{
- int 心脏;
- 肝脏
- 脾脏
- 胃
- 肾脏
- 肺
- 大肠
- 小肠
- }
- 汽车{
- String 发动机
- }
- 内部类
- 在一个类中定义一个类。比如在A类中定义B类,B类就是内部类。
- 格式:
- class 外部类名{
- 修饰符 class 内部类名{
- }
- }
- 内部类的特点:
- 1、内部类可以直接访问外部类的成员,包括私有的private修饰的。
- 2、外部类要访问内部类的成员,就必须要创建对象。
- 创建内部类对象的格式:
- //创建内部类的对象
- // 外部类.内部类 内部类对象名=new 外部类().new 内部类();
- Car.Engine ce=new Car().new Engine();
- 在一个类中设计内部类的目的,大部分都是不行让外界访问,而是只想自己使用。
- 所以一般内部类都应该是私有化的,私有化之后,再提供一个可以让外界访问的
- 方法。方法内部创建内部类的对象并且调用。
- 内部类的划分:
- 1、成员内部类,建立在类中,方法外。和类的成员处于同一级别。
- |-普通的成员内部类
- |-静态成员内部类
- 访问格式:外部类名.内部类名 对象名=new 外部类名.内部类名();
- 2、局部内部类,建立在类中的方法中,属于方法的局部变量级别。
- 局部内部类,外界是无法直接访问的,需要在方法的内部类创建对象并使用。
- 局部内部类可以直接访问外部类的成员,也可以访问方法内的局部变量。
- //局部内部类,建立在方法中
- public void method() { //外部类的方法
- class Inner { //方法内的内部类--局部内部类
- public void show() { //内部类中的方法
- System.out.println("内部类的方法...");
- }
- }
- //局部内部类在方法中定义完,就要在方法中使用,否则就没有使用的机会了。
- Inner inner=new Inner();
- inner.show();
- }
- 3、匿名内部类
- 匿名内部类的前提,先存在一个类或接口,这个类可以是具体类,也可以是抽象类
- 匿名内部类的格式:
- new 类名(){
- 重写方法
- }
- 比如:
- //创建类的对象,后面增加大括号,大括号内部重写类的方法。
- UserDao userDao=new UserDao() {
- @Override
- public void addUser() {
- }
- };
- 匿名内部类的本质:
- 其实是一个继承了该类或实现了该接口的子类(实现类)的匿名对象。
- 就是创建一个父类(接口)的一次性的子类(实现类),并且立刻创建这个子类或实现类的对象。
- 就又变成了父类的引用,指向子类的对象---多态。
- 匿名内部类在开发中的使用:
- 当我们发现了某个方法需要一个接口(抽象类)的子类对象,那么我们就可以传递进去一个匿名内部类,
- 简化传统的创建接口或抽象类的子类,然后再创建对象的过程。
|