• 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();//和上面的一样,区别是如果内部类出现重名,那么这样可以解决
    		}
    	}
    }
    

      

  • 相关阅读:
    Redis学习--命令执行过程中写AOF日志和同步从库顺序
    MySQL Innodb Engine--MVCC代码瞎猜
    MySQL Innodb Engine--DML操作时先生成Undo Log还是先生成Redo Log
    MySQL InnoDB Engine--自适应哈希索引总结
    MySQL InnoDB Engine--自适应哈希索引代码瞎猜03
    MySQL InnoDB Engine--自适应哈希索引代码瞎猜02
    MySQL InnoDB Engine--自适应哈希索引代码瞎猜01
    expect,传入数组进行SSH
    在底图不变的基础上,切换腾讯地图的文字注记(让底图更“干净”)
    十六进制透明颜色 转换成 RGBA 颜色(腾讯地图 与 微信地图组件所需颜色格式不同)
  • 原文地址:https://www.cnblogs.com/liubing2018/p/8450297.html
Copyright © 2020-2023  润新知