• 内部类、匿名类


    内部类即类或者方法内定义的类,根据位置的不同可分为成员内部类、局部内部类

    成员内部类

    定义于类中

    Class A{
      //这里B就是成员内部类   Class B{   } }

    如何访问成员内部类?

    格式: 外部类名.内部类名 对象名= 外部对象.内部对象

    这里即: A.B b= new A().B()

    实际使用中常将内部类设为私有,通过外部类来间接调用/访问内部类的方法和变量。

    Class A{
      Private Class B{
        public void show(){
          System.out.println("B");
        }
      }
    //间接
    public void visitB(){ B b= new B(); b.show(); } } public class aaa { public static void main(String[]args) { A a=new A(); a.visitB(); } }

    当成员内部类为静态

    注意: 静态成员内部类访问访问外部类成员时,只能访问静态成员(方法和变量)

    关于内部类与外部有同名变量时的访问问题

    class Outer {
        public int num = 10;
        class Inner {
            public int num = 20;
            public void show() {
                int num = 30;
                //三个变量对应的变量名相同
                //访问的是本方法中的num变量,满足就近原则
                System.out.println(num);
                //通过this变量,访问方法外,本类中的变量,this代表Inner类对象
                //这里Inner.this同this            
    System.out.println(this.num); //通过外部类名加this,返回外部类对象,访问对象外部类的num System.out.println(Outer.this.num); } } } public class niming { public static void main(String[]args) { Outer.Inner inner=new Outer().new Inner(); inner.show(); } }

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

    局部内部类

    定义于方法或作用域中的类

    备注: 局部内部类当然也是处于某个类或接口中,因为方法得处于类或接口中。

    特性: 局部内部类可访问final或static类型的外部类成员

    详情可见: https://blog.csdn.net/u014745069/article/details/80210288

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

    另外,与定义位置无关,有种特殊的内部类,称为:

    匿名内部类

    定义: 继承了某个类或实现了某接口的匿名类,用 new 类名 或 new 接口名 的格式创建

    备注: 我们创建匿名类的同时也创建了一个匿名类实例,不需要class关键字。

    特性: 

    1.  匿名类不能是abstract

    2. 匿名类隐式final

    3. 匿名类不能是static

    eg: 

    A hello = new A() {  
        public void run() {  
            System.out.println("hello");  
        }  
    };

    个人理解:本质上就是创建A的实例并覆盖、实现其中的方法

    访问权限:

    1. 访问外层Class里面的字段。
    2. 不能访问外层方法中的本地变量。除非变量是final。
    3. 如果内部类的名称和外面能访问的名称相同,则会把名称覆盖掉。
    4. 不能定义静态初始化代码块
    5. 不能在匿名类里面定义接口
    6. 不能在匿名类中定义构造函数

  • 相关阅读:
    HDU 1002 大数A+B
    HDU 2066 一个人的旅行(最短路)
    HDU 1869 六度分离(最短路 floyd)
    HDU 1159 Common Subsequence(LCS)
    POJ 3061 Subsequence(尺取法)
    NYOJ 10 skiing(记忆化搜索)
    dedecms添加全站的rss订阅功能
    dedecms artlist读取全站最新文章
    dedecms的title怎么优化?
    DedeCMS提示Maximum execution time of 30 seconds exceeded in解决办法
  • 原文地址:https://www.cnblogs.com/yanze/p/9680118.html
Copyright © 2020-2023  润新知