面向对象第十九课,内部类详解

来源:互联网 发布:云计算相关论文 编辑:程序博客网 时间:2024/06/03 22:44

内部类(innerclasses):在类里边定义的类

一般情况,我们把类定义成独立的但愿。这些情况下,我们把一个类放在另一个类的内部定义,称为内部类。


内部类的作用

  1. 内部类提供了更好的封装。只能让外部类直接访问,不允许统一个包中的其他类直接访问
  2. 内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。但外部类不能访问内部类的内部属性。


内部类的使用场合

由于内部类提供了更好的封装特性,并且可以很方便的访问外部类的属性。所以,通常内部类在只为所在外部类提供服务的情况下优先使用。


内部类的分类:

1、成员内部类(可以使用private、proteted、public任意进行修饰。类文件:外部类$内部类.class)

     a)非静态内部类(外部类里使用非静态内部类和平时使用其他类没什么不同)。

  1. 非静态内部类必须寄存在一个外部类对象里。因此,如果有一个非静态内部类对象那么一定存在对应的外部类对象。非静态内部类对象属于外部类的某个对象。
  2.  非静态内部类可以i使用外部类的成员,但是外部类不能直接访问非静态内部类成员。
  3. 非静态内部类不能有静态方法、静态属性、静态初始化快,只能定义普通方法、普通类、普通属性
  4. 静态成员不能访问非静态成员:外部类的静态方法、静态代码快不能访问非静态内部类,包括不能使用费静态内部类定义变量、创建实例。
  5. 成员变量访问格式:1、内部类里方法的局部变量:变量名。2、内部类属性:this.变量名。3、内部类属性:外部类名.this.变量名
  6. 内部类的访问:1、外部类中定义内部类写法:new 内部类名();  2、外部类以外的地方使用非静态内部类的写法:
    face f = new face();face.Nose fn = f.new Nose();
             
        b)静态内部类。
        定义方式:
static class Ear{}

使用要点:
  1. 当一个静态内部类对象存在,并不一定存在对应的外部类对象。因此,静态内部类的实例方法不能直接访问外部类的实例方法。
  2. 静态内部类看做外部类的一个静态成员。因此,外部类的方法中可以通过:静态内部类.名字  访问静态内部类的静态成员。通过new静态内部类()访问静态内内部类。
  3. 在外部类的外面创建内部类:
    face.Ear fe = new face.Ear();fe.listen();

总结:
  1. 普通的成员内部类,他可以访问外部类的普通的属性、方法。
  2. 普通的成员内部类,可以看过外部类的一个普通的属性,他可以直接去访问内容,普通内部类必须寄宿在普通外部类里边,现有外部类对象才有内部类对象
  3. 静态内部类,加了static修饰,他存在,他的外部类不一定要存在,不能访问外部类里的普通属性,普通属性从属于对象,但是可以访问外部类里的静态属性和静态方法。
package com.pkushutong.oop.innerclasses;public class TestFace {public static void main(String[] args) {face f = new face();face.Nose fn = f.new Nose();fn.breathe();face.Ear fe = new face.Ear();fe.listen();}}/** * 外部类调用内部类 *  * @author dell *  */class face {int type;/** * 内部类定义 *  * @author dell *  */class Nose {String type;void breathe() {//调用外部类属性System.out.println(face.this.type);System.out.println("呼吸");}}/** * 静态内部类定义 */static class Ear{void listen(){//静态内部类的实例方法不能直接访问外部类的实例方法。System.out.println(type);System.out.println("呼吸");}}}

0 0
原创粉丝点击