Java内部类,枚举
模式:
 模板模式:
 简单工厂模式:
 适配器模式:
  interface ICellPhone
  {
   void sendMsg();
  }
class Android implements ICellPhone
  {
   public void sendMsg()
   {
    System.out.println("我爱你");
   }
  }
class ITCAST implements ICellPhone
  {
   public void sendMsg()
   {
    System.out.println("I Love You");
   }
  }
class CellPhoneFactory
  {
   public static ICellPhone getInstance(String type)
   {
    ICellPhone p=null;
    if("Android".equals(type))
    {
     p=new Android();
    }
    if("ITCAST".equals(type))
    {
     p= new ITCAST();
    }
    return p;
   }
  }
class FactoryDemo 
  {
   public static void main(String[] args) 
   {
    ICellPhone p=new Android();
    p=CellPhoneFactory.getInstance("ITCAST");
    p.sendMsg();
    p=CellPhoneFactory.getInstance("Android");
    p.sendMsg();
   }
  }
接口:  一种规范,一种标准
interface 接口名 {}
 接口里的成员: 
  1. 全局变量  :  这里定义的变量,默认是使用  public  static final 修饰的
  2. 公共的抽象方法 :    默认使用 abstract public 修饰的
  3.  内部类   
 特点:
   没有构造方法,不能实例化
   接口和接口之间可以多继承,  接口里全是抽象方法,不能有普通方法
 
 使用接口: 
  interface IPCI
  {
   void usePCI();
  }
interface IUSB  //接口
  {
   void swapData();
  }
class MouseUSBImpl implements IUSB,IPCI
  {
   public void swapData()
   {
    System.out.println("鼠标在移动");
   }
public void usePCI()
   {
    System.out.println("PCI鼠标");
   }
  }
class USBDemo2 
  {
   public static void main(String[] args) 
   {
    //IUSB mouse=new MouseUSBImpl();
    MouseUSBImpl mouse=new MouseUSBImpl();
    mouse.swapData();
    mouse.usePCI();
   }
 内部类:
  外部类: 宿主类
  内部类: 嵌套类
  1. 非静态内部类  :  内部类没有使用 static 修饰,  此时 内部类属于 外部类的一个对象,也就是说创建内部类对象之前应该先创建外部类对象
    外部类 out = new 外部类();
    外部类.内部类 in = out.new 内部类();
  2. 静态内部类 : 内部类使用了 static 修饰,此时内部类属于 外部类,也就说,外部类可以直接调用内部类
    外部类.内部类 in  = new 外部类.内部类();
  3. 局部内部类,  在方法里创建类
  4. 局部内部类的一个特殊,  匿名内部类: 
     没有名字的局部内部类,只能用一次
     
     1. 不能是抽象类 
     2. 没有构造方法
   创建格式: 
   
      new 父类(参数){
       //覆写父类的方法
      }
      new 接口()
      {
       //覆写接口里的方法
      }
     一旦一个方法需要一个对象的时候,而该对象有父类或接口的时候
     
     void  useUSB(IUSB usb){
      usb.use();
     }
     
     useUSB(new  IUSB(){
      public void  use(){
      }
     });
     
    
    创建线程的时候,AWT添加事件的时候,Android添加事件
    
   
   枚举:
    声明:  
     enum 枚举名
     {
      对象名(),对象2;//对象必须写在第一行,并且和其他成员使用 分号隔开
      构造方法,默认是   private 修饰的无参构造方法
      对象,默认都是 全局常量  public  static  final  枚举名 对象 = new 枚举名();
     }
     
     枚举的直接父类:  java.lang.Enum类,抽象类
    
     访问枚举对象: 枚举名.对象 == 枚举名.对象; ?//相等
     
     对象后面带():
     对象后带{}: 表示该对象是枚举类的匿名内部类对象;
     
     每个枚举类都有一个静态方法 values().将返回一个枚举类型的一维数组,里面装的是该枚举类的全部对象
     enum  Gender{
      MAN,WOMAN;
     }
     Gedner[] gs = Gender.values();
     每个枚举类都有一个静态的方法  valueOf(String name);//name严格区分大小写
     Gender man = Gender.valueOf("MAN");//
     打印枚举对象的时候,打印出来的是 对象的名;这是因为 java.lang.Enum类覆写了toString方法
     enum Gender
     {
      MAN(),WOMAN{},NONE;
//MAN等价于 public static final MAN=new Gender();
      private Gender()
      {
}
     }
class  EnumDemo extends Object
     {
      public EnumDemo()
      {
}
public static void main(String[] args) 
      {
       Gender man=Gender.MAN;
Gender man1=Gender.MAN;
       System.out.println(man);
       System.out.println(man==man1);
Gender[]gs=Gender.values();
       for(Gender g:gs)
       {
        System.out.println(g);
       }
       //Gender women = Gender.valueof("woman");
       //System.out.println(women);
      }
     }
     
     public  String toString()
     {
     
      String ret = super.toString();
      switch(this){
       case MAN:
        ret = "男";break;
       case WOMAN:
        ret = "女";break;
       default:
        ret="保密";
      }
      return ret;
     }
     
  枚举的构造方法:
  
  enum Gender{
   MAN("男"),WOMAN("女"),NONE("保密");
   
   //默认: private Gender(){};
   
   private String ObjValue;
   privte Gender(String value)
   {
    objValue = value;
   }
   
   public String toString()
   {
    return  this.objValue;
   }
  }
  
  枚举实现接口:
   有两种写法:
    1. 直接在枚举类里覆写方法
    2. 在枚举类的匿名内部类里覆写;
    
  枚举实现单例模式:
  
  enum Singleton
  {
   INSTANCE;
   
   public static Singleton getInstance(){
    return INSTANCE;
   }
   
   //private Singleton(){}, 默认的
  }
  //使用反射,都不能在外界创建SIngleton对象;
Java内部类,枚举的更多相关文章
- Java学习--枚举
		枚举类型enum,地位等同于class,interface 使用enum定义的枚举类型,也是一种变量类型,可用于声明变量 枚举的一些特征 1.它不能有public的构造函数,这样做可以保证客户代码没有 ... 
- Java内部类final语义实现
		本文描述在java内部类中,经常会引用外部类的变量信息.但是这些变量信息是如何传递给内部类的,在表面上并没有相应的线索.本文从字节码层描述在内部类中是如何实现这些语义的. 本地临时变量 基本类型 fi ... 
- Java内部类详解
		Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ... 
- 黑马----JAVA内部类
		黑马程序员:Java培训.Android培训.iOS培训..Net培训 黑马程序员--JAVA内部类 一.内部类分为显式内部类和匿名内部类. 二.显式内部类 1.即显式声明的内部类,它有类名. 2.显 ... 
- java 内部类  *** 最爱那水货
		注: 转载于http://blog.csdn.net/jiangxinyu/article/details/8177326 Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类.内部类又 ... 
- java内部类和匿名内部类
		内部类即是包含在类里面的又一个类. java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 内部类的共性 (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.clas ... 
- Java内部类小程序(成员内部类,静态内部类,匿名内部类)
		/** * 测试java内部类(成员内部类,静态内部类,匿名内部类) * 局部内部类不常用,就不写了. * @package :java05 * @author shaobn * @Describe ... 
- [转] Java内部类详解
		作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ... 
- java内部类的作用分析
		提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比.内部类从表面上看,就 ... 
- 9)Java内部类(Inner Class)
		内部类:不可以有静态数据,静态方法或者又一个静态内部类 内部类的优点:隐藏类的细节,内部类可以声明为私有.内部类可以访问外部类的对象(包括private) 静态内部类:可以有静态数据,静 ... 
随机推荐
- 在Eclipse中使用JUnit4进行单元测试(中级篇)
			我们继续对初级篇中的例子进行分析.初级篇中我们使用Eclipse自动生成了一个测试框架,在这篇文章中,我们来仔细分析一下这个测试框架中的每一个细节,知其然更要知其所以然,才能更加熟练地应用JUnit4 ... 
- File存对象--android 的File存储到SD卡();
			方法1:android File存对象--File存储到SD卡(); 1.保存对象到本地或SD卡需要注意的是,要保存的对象(OAuthV1)一定要实现了Serializable接口.实现了Serial ... 
- 如何用Jupyter Notebook打开Spark
			电脑已经装了anaconda python,然后下载了spark2.1.0.因为版本太新,所以网上和书上的一些内容已经不再适用.比如关于如何使用IPython和Jupyter,教程给出的方法是用如下语 ... 
- Java生成XML文件
			我们在数据库中的数据可以将其提取出来生成XML文件,方便传输.例如数据库中有Admin这张表: 我们写一个java类表示admin数据: package xmlDom.vo; import java. ... 
- 动态主机配置协议(DHCP)如何启动和关闭
			启动方法: 开始-->运行-->cmd-->回车-->net start dhcp 关闭方法: 开始-->运行-->cmd-->回车-->net sto ... 
- [转]基于AWS的自动化部署实践
			作者 徐桂林 发布于 2014年1月22日 -------------------------------------------------------------------- 1. 背景 在过去 ... 
- C语音常用库和函数
			#include <assert.h> //设定插入点 #include <ctype.h> //字符处理 #include <errno.h> //定义错误码 # ... 
- BASH 漏洞修复
			Red Hat在Bash Shell中发现了一个名为Bash Bug的安全漏洞,当用户正常访问时,该漏洞允许攻击者的代码像在Shell中一样执行,这样就为各种各样的攻击打开了方便之门.据悉,其严重性要 ... 
- [转载]http协议 文件下载原理及多线程断点续传
			最近研究了一下关于文件下载的相关内容,觉得还是写些东西记下来比较好.起初只是想研究研究,但后来发现写个可重用性比较高的模块还是很有必要的,我想这也是大多数开发人员的习惯吧.对于HTTP协议,向服务器请 ... 
- JSON 获取属性值的方法
			JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript(Standard ECMA-262 ... 
