JavaEE_day_14 (内部类、设计模式)

1.局部内部类

  • 局部内部类等同于局部变量
  • 注意 : 局部内部类 在访问外部方法中的局部变量的时候需要加final修饰(1.8之前),从1.8开始 final可以省略
  • 局部内部类中,不能有静态声明
  • 如果是成员方法中的局部内部类,可以访问外部类中所有 的属性
  • 如果是静态方法中局部内部类, 不可以直接访问外部类的成员属性
public static void m2() {
  int i = 2;
  class InnerClass {
   // 不能有静态声明
   // public static void m3(){}
   
   public void m3() {
    System.out.println(s1);
    // 因为是静态方法中 的内部类,所以不能直接访问外部类的成员属性,需要创建对象
    // System.out.println(s2);
    OuterClass_03_ a = new OuterClass_03_();
    System.out.println(a.s2);
    System.out.println(new OuterClass_03_().s2);
   }
  }
  InnerClass ic = new InnerClass();
  ic.m3();
 }

2.匿名内部类

匿名内部类 : 指在方法调用时,实参需要传入某个接口对象的时候,不传入对象,传入一个匿名的实现类

  • 如果方法定义形成 一般是个接口,那么调用的时候,就需要传入其实现类的对象
  • 但是可以不实现这个接口,不传递实现类对象,传递一个匿名内部类,这个类,没有名字,不能复用
  • 默认的匿名内部类类名 : 外部类类名$1 一次类推
  • 那么既然是没有名字的类,那么我们自然无法创建对象,但是传入匿名内部类的 时候回自动创建一个对象
m1(new ICustomerService() {
   int i = 2;
   @Override
   public void logout() {
    System.out.println("已退出登陆" + this);
   }
  });
 m2(new A(){
   public void m3(){
    System.out.println("sssssss");
    super.m3();
   }
  });
 public static void m1(ICustomerService cs) {
  cs.logout();
 }
 public static void m2(A a) {
  a.m3();
 }

3.单例设计模式

//懒汉式,类名调用才创建对象
class single{
 private static single s;
 
 //构造方法私有化,不能再别的类直接new创建
 private single(){
  
 }
 //若没创建对象,则创建一个,若创建了,就用创建的那个,不新创建了
 public static single getInstance(){
  if (s == null) {
   s = new single();
  }
  return s;
 }
}

//饿汉式,类加载后就创建对象
class hungry{
 private hungry(){
  
 }
 
 //在类加载时即创建对象
 private static hungry h = new hungry(); 
 
 public static hungry getInstance1(){
  return h;
 }
}

4.工厂模式

火箭筒类
//许多实现类继承武器接口
public class RPG implements Weapon {
 public void fire() {
  System.out.println("hong~");
 }
}
武器接口
//武器接口,抽象方法
public interface Weapon {
 public void fire();
}
武器工厂
public class Weapon_Factory {
 //返回值多态, 返回一个子类,返回任意武器,但是用户不知道是什么,运行了才晓得
 public static Weapon getWeapon(){
  return new RPG();
 }
}
//主类调用方法
public static void main(String[] args) {
  fight(Weapon_Factory.getWeapon());
 }
 public static void fight(Weapon w){
  w.fire();
 }

如下图所示:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值