Java_内部类

A:内部类

  在类中定义的类就是内部类

 B:内部类访问特点
   a:内部类可以直接访问外部类的成员,包括私有。原因是:他能获取到外部类名的引用      外部类名.this
   b:外部类要访问内部类的成员,必须创建对象。

   c:外部类名.内部类名 对象名 = 外部类对象.内部类对象;

      Outer.Inner in = new outer().new Inner()
   

public class Demo1_InnerClass {
	public static void main(String[] args){
        #创建类的对象
		Outer.Inner in = new Outer().new Inner();
		in.method();
		
	}
}

#定义外部类Outer以及内部类Inner
class Outer{
     #外部类的私有成员变量
     private int num = 10; class Inner{ public void method(){ System.out.println(num); } } }

  

注意一:如果内部类被私有,那么就得在外部类中提供一个调用私有类的方法

public class Demo1_InnerClass {
    public static void main(String[] args){

        Outer o = new Outer();
        o.print();
        
    }
}


class Outer{
    private int num = 10;
#内部类被私有化
    private class Inner{
        public void method(){
            System.out.println(num);
        }
    }
#定义一个可以调用私有内部类的方法
    public void print(){
        Inner i = new Inner();
        i.method();
    }
}

 

 注意二:如果内部类是静态的,调用方法直接是:外部类名.内部类名   对象名 =  外部类名.内部类对象(因为static修饰的可以直接用类名.调用),如果静态内部类里面的方法也是静态的,直接就用类名调用就可以了


class Outer{
    private int num = 10;
    static class Inner{
        public void method(){
            System.out.println("method");
        }
     public static void print(){
         System.out.println("print");
   }

  }

}


public class Demo1_InnerClass {
    public static void main(String[] args){
    
        Outer.Inner oi = new Outer.Inner();
        oi.method();
     Outer.Inner.print();
    }
}

 

注意三:如果想直接访问外部类的成员变量,那么就是Outer.this

class Outer {
  public int num = 10;
  class Inner {
    public int num = 20;
    public void show() {
      int num = 30;
      System.out.println(num);   #输出30,就近原则
      System.out.println(this.num);   #输出20,调用本类成员变量
      System.out.println(Outer.this.num);   #输出10,获取外部类引用
    }
  }
}

 

 

 

posted @ 2018-09-08 17:25  wly_561  阅读(105)  评论(0编辑  收藏  举报