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内部类,枚举

时间: 2024-08-29 10:15:46

Java内部类,枚举的相关文章

Java内部类

本文是<Java核心技术 卷1>中第六章接口与内部类中关于内部类的阅读总结. Java中的内部类(inner class)是定义在另一个类内部的类.那么内部类有什么用呢?这里主要由三个内部类存在的原因: 内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据.即,如果类A中定义了类B,那么类B可以访问类A中的数据,甚至是私有数据,但类A不能访问类B中的私有数据: 内部类可以对同一个包中的其他类隐藏起来.在一个包中,定义一个类时,即使不加上访问权限关键词,这个类也是包内其他类可访问的,不

Java内部类:局部内部类(三)

Java内部类分为4个部分进行阐述,分别为概览.成员内部类.局部内部类和匿名内部类. 在本文中是Java内部类的局部内部类,主要讲局部内部类的概念和在使用局部内部的过程中,需要注意的一个细节. 1.局部内部类的概念 在一个类的方法内部定义另外一个类,那么另外一个类就称作为局部内部类. class OutterClass { void test() { class InnerClass//局部内部类 { } } } 在上述代码中,InnerClass定义在OutterClass的test方法的内部

Java内部类:匿名内部类(四)

Java内部类分为4个部分进行阐述,分别为概览.成员内部类.局部内部类和匿名内部类. 在本文中是Java内部类的匿名内部类,主要讲述匿名内部类的概念.匿名内部类的好处.匿名内部类的使用前提.和匿名内部类的应用场景. 1.匿名内部类的概念 没有类名的类就称作为匿名内部类 2.匿名内部类的好处 简化书写 3.匿名内部类的使用前提 必须存在继承或者实现关系才能使用 4.匿名内部类的应用场景 匿名内部类一般是用于实参 示例代码: package com.rk.innerclass; public cla

Java内部类小程序(成员内部类,静态内部类,匿名内部类)

1 /** 2 * 测试java内部类(成员内部类,静态内部类,匿名内部类) 3 * 局部内部类不常用,就不写了. 4 * @package :java05 5 * @author shaobn 6 * @Describe : 7 * @Time: 2015-9-6 下午8:32:38 8 */ 9 public class TestInner { 10 11 /** 12 * @author shaobn 13 * @Describe : 14 * @param args 15 * @Time

Java核心 --- 枚举

Java核心 --- 枚举 枚举把显示的变量与逻辑的数字绑定在一起在编译的时候,就会发现数据不合法也起到了使程序更加易读,规范代码的作用 一.用普通类的方式实现枚举 新建一个终态类Season,把构造方法设为私有,因为枚举值不能随意增加因为不能new出这个类的对象,所以需要定义成员变量,把new写在类的内部这样,就可以在类的外部通过访问类的静态成员变量的方式访问到枚举值通过这样的方式,只能在类的外部使用在枚举类的内部定义的枚举值 类Season里面是可以有方法的,我们设置地球又公转了四分之一方法

Java内部类的使用小结

内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态static的,也可用public,default,protected和private修饰.(而外部顶级类即类名和文件名相同的只能使用public和default). 注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类.对于一个名为outer的外部类和其内部定义的名为inner的内部类.编译完成后出现outer.class和outer$inner.class两类.所以内部类的成员变量/方法名可

Java中枚举的使用

一. JDK5之前的实现方式 在枚举类型出现之前,java是通过在接口或者类中定义public static final 的变量来实现的. 比如对于四季的描述: --------------------------------------------------------------------------------- public interface Season {    public static final int SEASON_SPRINT = 1;    public stati

java内部类和匿名内部类

内部类即是包含在类里面的又一个类. java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 内部类的共性 (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 . (2).内部类不能用普通的方式访问.内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的 . (3).内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量 . 成员内部类

Java内部类的继承

Java内部类的构造器必须连接到指向其外围类对象的引用(构造内部类必须给它一个外部类对象的引用,内部类依赖于外部类对象),所以在继承内部类的时候,需要在导出类的构造器中手动加入对基类构造器的调用. 因为,在导出类实例化时,并不存在一个外围类对象,以让导出类的实例去连接到它. 所以,我们需要创建一个外围类,然后用一个特定的语法来表明内部类与外围类的关系. 在下例子中,需要给导出类InheritInner一个来自内部类的外围类中的引用.普通的继承,只需在导出类构造器中加入super();,而内部类则