zoukankan      html  css  js  c++  java
  • java内部类

    简单介绍

    内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。内部类主要有以下几类:

    1、成内部

    2、局部内部

    3、静内部

    4、匿名内部

    示例:

    package com.wbg;
    
    public class InnerDemo2 {
    
        public static void main(String[] args) {
            //实例化的方法一
            Box box=new Box();
            box.height=286;
            Box.InBox inbox=box.new InBox();
            inbox.show();
            
            //实例化的方法二
            Box.InBox box2=new Box().new InBox();
            box2.show();
        }
    
    }
    
    //外部类
    class Box
    {
        //外部类的成员变量
        public int height=198;
        
        //成员内部类
        class InBox{
            //内部类的成员
            public void show(){
                System.out.println("外部类的高度:"+height);
            }
        }
    }

    运行结果:

    内部类的共性

    (1)、内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 。

    (2)、内部类不能用普通的方式访问。

    (3)、内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量 。

    (4)、外部类不能直接访问内部类的的成员,但可以通过内部类对象来访问

      内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的。

      因为当某个外围类的对象创建内部类的对象时,此内部类会捕获一个隐式引用,它引用了实例化该内部对象的外围类对象。通过这个指针,可以访问外围类对象的全部状态。

    通过反编译内部类的字节码,分析之后主要是通过以下几步做到的: 
      1 编译器自动为内部类添加一个成员变量, 这个成员变量的类型和外部类的类型相同, 这个成员变量就是指向外部类对象的引用; 
      2 编译器自动为内部类的构造方法添加一个参数, 参数的类型是外部类的类型, 在构造方法内部使用这个参数为1中添加的成员变量赋值; 
      3 在调用内部类的构造函数初始化内部类对象时, 会默认传入外部类的引用。

    静态内部类(嵌套类)

    如果你不需要内部类对象与其外围类对象之间有联系,那你可以将内部类声明为static。这通常称为嵌套类(nested class)。想要理解static应用于内部类时的含义,你就必须记住,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象。然而,当内部类是static的时,就不是这样了。嵌套类意味着:

      1. 要创建嵌套类的对象,并不需要其外围类的对象。

      2. 不能从嵌套类的对象中访问非静态的外围类对象。

    大神(果哥):https://www.cnblogs.com/best/p/6736771.html#_lab2_5_0

  • 相关阅读:
    c# 子窗体打开或者切换就最大化
    TreeView失去焦点时亮显选中状态
    解决 RecursionError: maximum recursion depth exceeded
    CentOS7安装jdk1.8
    CentOS7安装mysql5.7
    CentOS7安装redis3.2.3
    CentOS7安装nginx1.8
    centos7设置redis开机自启动
    Linux下执行sh脚本报错:$' ': command not found
    Linux下使用unhide查看隐藏文件
  • 原文地址:https://www.cnblogs.com/weibanggang/p/9477454.html
Copyright © 2011-2022 走看看