zoukankan      html  css  js  c++  java
  • java内部类之成员内部类

    内部类概念:顾名思义,就是将一个类定义在另一个个类内部。内部的类称之为内部类 。

    内部类的主要特点:
    1.内部类可以很好的实现隐藏,可以使用protected、private修饰符。
    2.内部类可以直接访问外部类的所有成员,包括私有成员
    3.外部类不能直接访问内部类的成员,必须首先要建立内部类的对象才可以访问。
    4.内部类可以解决一些问题,比如间接地实现继承。可以避免修改接口而实现同一个类
    中两种同名方法的调用

    内部类有四种:

    成员内部类,静态内部类,匿名内部类,局部内部类

    起名字时,$符号是合法字符,是为内部类准备的

    成员的内部类特点:
    1.成员内部类属于外部类的实例成员,成员内部类可以有public,private,default,
    protected权限修饰符。在成员内部类中访问外部类的成员方法和属性,要使用“外部
    类名.this.成员方法”和“外部类名.this.成员属性”的形式。
    2.创建成员内部类的实例使用“外部类名.内部类名 实例名=外部类实例名.new 内部
    类构造方法(参数)”的形式。
    成员内部类的限制:
    1.成员内部类不能与外部类重名
    2.不能在成员内部类中定义static属性、方法和类(static final形式的乘凉定义除外)因
    为一个成员内部类实例必然与一个外部类实例关联,static成员完全可以移到其外部类
    去。

    public class MemberInnerClassDemo {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Outer1 outer1 = new Outer1();
    		Outer1.Inner1 inner1 = outer1.new Inner1();
    		outer1.outer();
    		inner1.inner();
    	}
    
    }
    
    class Outer1{
    	private String name = "张三";
    	private int num1 = 1;
    
    	public void outer() {
    		System.out.println(name+" "+num1);
    		//System.out.println(num2);外部类不能直接访问内部类成员
    		Inner1 inner1 = new Inner1();//外部类可以实例化内部类,访问内部类
    		inner1.inner();
    	}
    	
    	class Inner1{//如果内部类声明为private类型,则外部无法访问通过外部类内部类
    		private String name = "李四";
    		private int num2 = 2;
    		//private static final int num3 = 3;在成员内部类中可以声明静态常量
    		//private static int num3 = 3;在成员内部类中不能声明静态成员,包括属性和方法
    		public void inner() {
    			System.out.println(name+" "+num2);
    			System.out.println(Outer1.this.name+" "+Outer1.this.num1);//内部类调用外部类属性
    			outer();//内部类可以直接访问外部类的属性和方法,包括私有的
    			Outer1.this.outer();//和上面的一样,区别是如果内部类出现重名,那么这样可以解决
    		}
    	}
    }
    

      

  • 相关阅读:
    http://knockoutjs.com/工作杂记
    wp开发杂记
    [转载]jQuery 顺便学习下CSS选择器 奇偶匹配nthchild(even)
    [转载]各种图像处理类库的比较及选择(The Comparison of Image Processing Libraries)
    [转载]多维数组与Json格式的转化
    [转载]OpenCv,EmguCv及.net之间的互动(The Interaction of OpenCv, EmguCv AND .net)
    [转载].net中捕获摄像头视频的方式及对比(How to Capture Camera Video via .Net)
    paip.杀不死进程的原因僵尸进程的解决.txt
    paip.c3p0 数据库连接池 NullPointerException 的解决...
    paip..禁用mmseg 的默认词库. . 仅仅使用自定义词库from数据库.
  • 原文地址:https://www.cnblogs.com/liubing2018/p/8450297.html
Copyright © 2011-2022 走看看