12.3static定义内部类

在进行内部类定义时,也可以通过static关键字来定义,此时的内部类不在受到外部类实例化对象的影响,所以等同于是一个外部类,内部类的名称为“外部类.内部类”。使用static定义的内部类只能够调用外部类中static定义的结构,并且进行内部类实例化的时候也不再需要先获取外部类实例化对象,static内部类实例化格式:

外部类.内部类 内部类对象=new 外部类.内部类();

范例:使用static定义内部类

public class Outer263A {
       private static final String MSG="www.lilei.com";//static属性
       static class Inner{        //static内部类
    	   public void print() {
    		   System.out.println(Outer263A.MSG);   //访问static属性
    	   }
       }
}

public class Java260A {
       public static void main(String[] args) {
		Outer263A.Inner in=new Outer263A.Inner();
		in.print();
	}
}

执行结果

www.lilei.com

本程序在Outer263A类的内部使Static定义了Inner内部类,这样内部类就成为一个独立的外部类,在外部实例化对象时内部类的完整名称将为Outer.Inner。

范例:使用static定义内部接口

public interface IMessageWarp {              //消息包装接口
       static interface IMessage{               //定义消息接口
    	   public String getContent();             //【抽象方法】获取消息内容
       }
       static interface IChannel{               //消息通道接口
    	   public boolean connect();            //【抽象方法】通道连接
       }
       public static void send(IMessage msg,IChannel chn) {
    	   if(chn.connect()) {                      //通道已经连接
    		   System.out.println(msg.getContent());
    	   }else {
    		   System.out.println("消息不通");
    	   }
       }
}

public class Message implements IMessageWarp.IMessage {

	@Override
	public String getContent() {
		return "www.lilei.com";
	}

}

public class Channel implements IMessageWarp.IChannel {

	@Override
	public boolean connect() {
	
		return true;
	}

}


public class Java264 {
        public static void main(String[] args) {
			IMessageWarp.send(new Message(), new Channel());
		}
}

www.lilei.com

注意:实例化内部类对象的格式比较

  • 格式1(非static定义内部类):外部类.内部类 内部类对象=new 外部类().new 内部()。
  • 格式2(static定义内部类):外部类.内部类 内部类对象=new 外部类.内部类()。
    发现:使用static定义的内部类,其完整名称就是“外部类.内部类”,在实例化对象的时候也不再需要先实例化外部类在实例化内部类了。
发布了169 篇原创文章 · 获赞 9 · 访问量 3284

猜你喜欢

转载自blog.csdn.net/ll_j_21/article/details/104792468