内部类,设计模式

内部类,被包含或者被嵌套在另一个类里,叫内部类

内部类分为:

成员内部类

局部内部类

静态内部类

匿名内部类

 

 

成员内部类:

作为外部类的成员,与成员变量成员方法平级

成员内部类访问权限任意

创建成员内部类

成员内部类是外部类的成员,需要通过外部类对象创建

//创建外部类对象

Out o=new Out();

//通过外部类创建内部类对象

Out.In inner=o.new In();

或者

Out.in inner =new Out.new In();

在成员内部类访问外部类成员

外部类属性和内部类属性不同名可以直接访问

外部类与内部类属性同名访问格式

外部类名.this.属性名

以此种格式来从内部类访问外部类属性

成员内部类不能包含静态成员

成员内部类的字节码格式

外部类名$内部类名.class

局部内部类

和类中方法的局部变量平级

局部内部类的访问只能是默认

创建局部内部类对象

直接在局部内部类所在的方法中创建对象并调用方法

在局部内部类中访问外部类的属性

不同名直接访问

同名外部类.this.属性名

局部内部类中不能包含静态成员

局部内部类中访问的局部变量必须是final常量jdk1.8之后final可以省略

字节码文件

外部类名$编号内部类名.class

静态内部类

static修饰成员变量成员方法,代码块

static关键字修饰是内部类

static修饰的内部类是静态内部类

static只能修饰类成员

使用static修饰的成员内部类是静态内部类

访问权限一般public

使用static修饰的内部类自动提升为普通类,相当于一个独立的类和外部类的级别相同

创建对象格式

不需要外部类的对象,可以直接创建静态内部类的对象

外部类.内部类 表示符=new 外部类.内部类构造方法

访问外部类成员

静态内部类能直接访问外部类的静态成员

非静态 的成员只能通过创建外部类的对象访问

静态内部类中可以包含静态成员

字节码文件格式

外部类名$内部类名.class与内部类一样

匿名内部类

没有名字的内部类

产生的原因,

接口和抽象类不能创建对象如果一个接口的实现类只需要使用一次或者一个抽象类只需要使用子类一次可以使用匿名内部类只能创建一个对象

匿名内部类必须把抽象方法全部实现

匿名内部类中可以声明独有的属性和方法

由于接口引用不能访问现实类中独有的属性和方法,所以一般不在匿名内部类中声明独有的属性和方法

匿名对象若在匿名内部类中声明了独有的方法或属性可以使用匿名对象访问不能通过对象.方法名访问

匿名内部类只能使用一次即使两次声明的匿名内部类完全一致也是两个匿名内部类

设计模式

特定的问题的特定解决方法

一个类只需要一个实例不能出现多个实例就叫单例

单例模式动机

一个系统或平台某个类的实例只需要有一个

实现原理:封装

得到一个类的对象需要通过new关键字调用构造方法创建对象

某个类只能有一个对象,但是构造方法一经调用就会产生新的对象,我们将构造方法私有化

此时类在外部不能创建对象,需要在类的内部创建对象

添加一个公开的方法返回这个对象

1私有化构造方法

2在类内创建对象

3提供一个共有的方法,用来获取本类对象

单例分为懒汉式和饿汉式

核心

构造方法私有,不能在类外随意创建对象,

在类内部声明一个本类静态对象作为属性

提供一个共有静态的方法来获取本类对象

懒汉式调用方法时初始化对象饿汉时声明同时初始化

使用上没有区别

存储空间,在第一次获取单例类对象前懒汉比恶汉节省空间

多线程操作时,懒汉存在线程安全,恶汉没有线程安全问题

简单工厂设计模式

把对象的创建交给一个独立的工厂类创建,把对象的创建和使用隔开

1父类产品   抽象类把需要的属性方法抽象出来

2子类产品   父类庞杂的方法细分

3工厂  实现具体的方法

4客户程序   调用方法

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值