这是什么啊

5.java内部类和设计模式笔记

~~~~~~~~~~内部类~~~~~~~~~~~~~~
*方法重载是静态多态,向上转型是动态多态
*内部类可以使用它所在方法的局部变量,但必须声明为常量
*最大优点,可以方便的访问外部类的私有属性
*成员内部类也叫实例内部类,不能定义static成员变量,静态内部类可以定义静态内部成员,持有外部类的引用
*A$B.class内部类编译后字节码文件名,$后面+数字表示匿名内部类
*访问外部类的成员变量 外部类名.this.变量名
*其他外部类访问某类内部类对象  out.in a=new out().new in(); 静态的后面少个new和()
*格式 Outer.Inter a=new Outer.Inter();,静态内部类要使用外部类的成员,要先new外部类对象
*局部内部类,局部变量不能是静态的,要访问外部类的变量,则必须声明为常量 不能加访问修饰符
**使用局部内部类时,想要局部内部类生效,局部内部类外层的方法必须new该内部类对象来调用内部类的方法
*内部类在整个操作过程中只使用一次,就可以定义为匿名内部类
*匿名内部类 实现方法,new接口后面接{里面直接填方法} 可以理解为匿名内部类可以new抽象类和接口,但后面要加{},里面的方法可根据情况进行复写
**成员内部类持有外部类对象的引用,静态内部类不持有
*静态内部类实例化时不需要持有外部类对象的引用.
~~~~~下午~~~~~~~~~~~
*设计模式  解决固定问题的固定方法
***单例设计模式(饿汉式)1new一个私有静态最终的本类对象2构造函数私有化3提供一个共有静态方法返回本类对象
***懒汉式1声明私有静态最终本类对象2构造方法私有化3提供方法返回本类对象
**工厂设计模式 工厂中的方法都是公共静态的返回接口类型的
*工厂类的主要职责是生产对象,主要在接口中应用
*接口回调,调用接口中的方法,其实执行的是接口实现类中的方法,这个回调过程就是接口回调
~~~~~~~~~~~~~~~~~~~~~~~~~~~作业:~~~~~~~~~~~~~~~~~~~~~~~~~~
1.常用的内部类有哪些?请编写相关示例?
静态内部类:
class Person{
 private int i=1;
 static class Man{
  public static void pay(){
   System.out.println("我会付钱"+new Person().i);
  }
 }
}
局部内部类:
class Person{
 private int i=1;
  public  void pay(){
   class Man{
    public void say(){
    System.out.println("我会付钱"+new Person().i);
    }
   }
   new Man().say();
  }
}
匿名内部类:
interface Person{
 
  public void pay();
}
class Student{
 public static void main(String a[]){
 new Person(){
  public void pay(){
  System.out.println("我会付钱");
  }
 }.pay();
}
}
2. 什么是设计模式,如何设计出单例设计模式的类,请编写程序演示并进行测试?
class Person{
 private static final Person instance=new Person();
 private Person(){
  System.out.println("===private Person()====");
 }
 public static Person getInstance(){
  return instance;
 }
}
3.请编写工厂设计模式的使用示例?
import java.util.*;
interface Animal{
 void sleep();
}
class Dog implements Animal{
 void look(){
  System.out.println("看家");
 }
 public void sleep(){
  System.out.println("狗睡觉");
 }
}
class Cat implements Animal{
 void catchfash(){
  System.out.println("抓鱼");
 }
 public void sleep(){
  System.out.println("猫睡觉");
 }
}
class Factory{
 
 public static Animal fact(String a){
  if(a.equals("cat")){
   return new Cat();
  }else if(a.equals("dog")){
   return new Dog();
  }else{
   return null;
  }
 }
 
}
class Demo103{
public static void main(String[] a){
 Factory fa=new Factory();
 System.out.print("请输入狗或猫:");
 Scanner sc=new Scanner(System.in);
 fa.fact(sc.next()).sleep();
}
}
posted @ 2015-12-03 22:16  陈旭缘  阅读(449)  评论(0编辑  收藏  举报
这是什么