zoukankan      html  css  js  c++  java
  • 静态内部类与非静态内部类之间的访问

    package cn.hncu.day3.inner;

    public class Outer {
    private int size;

    public void aa(){
    size++;
    System.out.println(size);
    }
    public void bb(){
    //共用this对象,不需要另外再new一个Outer对象去调用aa()
    aa(); //相当于this.aa();
    }

    //非静态的内部类1---演示一个非静态内部类的基本用法
    //可理解为外部类的一个成员,跟一个方法一样(包括传参)---对象级
    public class Inner{
    private int counter=10;
    private int size=5;//内部类可以隐藏外部类的成员变量
    public void doSth(){
    size++;//可以访问外部类的成员变量,即使private的也可以---其实跟函数一样
    System.out.println(size);

    //外部类的size被隐藏了,如果一定要访问,那么可采用下面的方式
    //this.size是内部类的, 而Outer.this.size是外部类的
    System.out.println( Outer.this.size );
    }
    }

    //非静态的内部类2----i.演示非静态兄弟内部类之间的访问方式---对象级
    public class Inner2{
    public void doSth(){
    //不用外部类对象,因为共用this对象
    Inner in = new Inner();//相当于 this.new Inner()
    System.out.println( in.counter );//可以访问兄弟内部类中的私有成员

    //iv.在非静态内部类中访问 静态兄弟内部类
    Inner3 in3 = new Inner3();
    in3.doSth();

    }

    class A{
    private int a=5;
    }
    }

    //静态内部类---跟静态方法的用法非常类似---类级
    //iii.在静态内部类中访问非静态内部类
    //private
    public static class Inner3{
    int num=10;
    public void doSth(){
    Outer out = new Outer();
    Inner in = out.new Inner();
    in.doSth();
    }
    public static void fun(){
    System.out.println("aaaaaa");
    }
    }
    //ii.在静态内部类中访问兄弟静态内部类
    private static class Inner4{
    int num=10;
    public void doSth(){
    Inner3 in = new Inner3();
    in.doSth();
    }
    }

    public static void main(String[] args) {
    Outer out = new Outer();
    out.aa();

    //非静态内部类,要用“外部类的对象.new”的方式构造内部类对象
    Inner in = out.new Inner();
    in.doSth();

    Inner2 in2 = out.new Inner2();
    in2.doSth();
    }


    }

    -----------------------------------------------------------------------

    package cn.hncu.day3.inner;

    public class Outer2 {

    //对于其它类来说,要访问一个静态或非静态内部类,静态与非静态方法,规则是一样的
    public void aa(){
    //2访问另一个类中的静态内部类
    Outer.Inner3.fun();//静态方法
    Outer.Inner3 in = new Outer.Inner3();
    in.doSth();

    //3访问另一个类中的非静态内部类
    Outer out = new Outer();
    Outer.Inner in2 = out.new Inner();
    in2.doSth();
    }

    public static void main(String[] args) {
    //1 注意: 私有的内部类是不能被其它外部类访问的
    //Outer.Inner4 in0 = new Outer.Inner4();//ERROR

    //2访问另一个类中的静态内部类
    Outer.Inner3.fun();//静态方法
    Outer.Inner3 in = new Outer.Inner3();
    in.doSth();

    //3访问另一个类中的非静态内部类
    Outer out = new Outer();
    Outer.Inner in2 = out.new Inner();
    in2.doSth();

    }

    }

  • 相关阅读:
    Oracle 导入导出 dmp 文件
    zTree树
    下拉复选框
    jQuery Pagination分页插件
    下载java生成PDF
    Activiti 流程实例、任务、执行对象及相关的表
    Activiti 删除key值相同的所有不同版本的流程定义
    Activiti 查询最新版本的流程定义
    Activiti 查看流程图
    Activiti 删除流程定义
  • 原文地址:https://www.cnblogs.com/1314wamm/p/5600210.html
Copyright © 2011-2022 走看看