zoukankan      html  css  js  c++  java
  • java匿名内部类的使用注意事项

    1、首先匿名内部类要继承自抽象基类或者实现基类接口

    like this

    	abstract class Seed{
    		int cnt;
    		public Seed(int x){
    			cnt=x;
    		}
    		abstract void showInfo();
    	}
    	class Apple{
    		int num=300;
    		public Seed getSeed(final int x){
    			return new Seed(x){
    				public void showInfo(){
    					System.out.println("The apple's seeds are "+num);
    				}
    			};
    		}

    2、在类的内部不能对父类字段进行初始化。除非使用初始化块,也不能对外部类的子段进行更改

    这样是不行的。//!凝视部分是不对的

    	abstract class Seed{
    		int cnt;
    		public Seed(int x){
    			cnt=x;
    		}
    		abstract void showInfo();
    	}
    	class Apple{
    		int num=300;
    		public Seed getSeed(final int x){
    			return new Seed(x){
    				//!num=200;
    				//!cnt=100;
    				public void showInfo(){
    					System.out.println("The apple's seeds are "+num);
    				}
    			};
    		}
    原因:

    所谓匿名内部类与实名类本质上是同样的,而在类的内部对子段初始化的位置仅仅能是声明的位置或者在构造函数的内部,而对字段值的更改仅仅能在该类方法的内部。在其他位置对字段值的更改是无效的,由于此时的更改和操作没有机会运行,所以编译器会报错。

    而在初始化块中对字段的操作和更改是能够的。

    这样也是不行的

    	public class Wrapping{
    		public int a;
    		public int b;
    		//!a=100;
    	}


  • 相关阅读:
    linux ssh免密
    flink WaterMark之TumblingEventWindow
    flink 并行计数器实现
    VSCode删除重复的空行
    Gnome添加Open with Code菜单
    Linux下设置VSCode为默认的文本编辑器
    Jupyter Notebook添加Ruby支持
    Linux下无法运行Color picker
    oh-my-zsh: bracketed-paste-magic:zle:47: not enough arguments for -U
    Vim auto-pairs设置选项
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7055051.html
Copyright © 2011-2022 走看看