zoukankan      html  css  js  c++  java
  • 『Java』成员内部类 匿名内部类

    成员内部类

    成员方法类是定义在一个类中的方法外的类,例如:

    public class Outer{ // 外部类
    	class Inner { // 内部类
    		// 内部类成员
    	} 
        
        // 外部类成员
    }
    

    成员内部类可以看成是外部类的一个成员,所以可以拥有private public protected (default)四种修饰符。

    Outer.java编译之后,生成的字节码文件如下:

    Outer$Inner.class 成员内部类的字节码文件
    Outer.class 外部类的字节码文件
    

    成员内部类的访问特点:

    • 内部类可以直接访问外部类的所有成员变量和方法,包括private修饰的成员

      如果内部类的成员和外部类成员同名,在内部类中访问外部成员的方式为:

      外部类.this.成员变量
      外部类.this.成员方法
      
    • 外部类要访问内部类的成员,必须建立内部类对象。

    如果想在另一个类中创建某一个类(外部类)中的成员内部类的对象,语法格式如下:

    外部类名.内部类名 c = new 外部类名().new 内部类名();
    

    匿名内部类

    匿名内部类必须继承一个父类或者实现一个接口

    使用格式:

    父类名/接口名 obj = new 父类名/接口名() {
        // 重写父类或者接口方法
    }
    

    例如:

    public class Test {
        public static void main(String[] args) {
            MyInterface obj1 = new MyInterfaceImpl();
            obj1.method();
     
            // 实现类只需要用一次但是还得单独写一个实现类,此时可以使用匿名内部类
            MyInterface obj2 = new MyInterface() {
                @Override
                public void method() {
                    System.out.println("匿名内部实现类覆盖重写了接口方法");
                }
            }; // 【不能忘记这里有个分号】
            obj2.method();
        }
    }
    
    interface MyInterface {
        public abstract void method();
    }
    
    class MyInterfaceImpl implements MyInterface{
        @Override
        public void method() {
            System.out.println("实现类覆盖重写了接口方法");
        }
    }
    
  • 相关阅读:
    Unity物理系统随记
    Unity相机跟随小结
    unity制作赛车游戏
    动态编程
    C#-特性,反射,动态编程
    BASE64加解密
    idea快捷键
    git安装和git命令:全局设置用户名邮箱配置
    基于Node.js+MySQL开发的开源微信小程序商城(微信小程序)部署环境
    微信小程序开发入门(一),Nodejs搭建本地服务器
  • 原文地址:https://www.cnblogs.com/xxmmqg/p/14423610.html
Copyright © 2011-2022 走看看