关于android开发中涉及到的java知识:面向对象(六)

面向对象(六)
今天要整理有关内部类的相关知识。
先来熟悉下内部类和外部类的定义,内部类,顾名思义就是定义在其它类中的类,也可称为嵌套类,这里说的其它类就是外部类,也可称之为宿主类。内部类的主要作用是为了更好地实现封装,同一个包中的其他类不能访问一个类中的内部类,内部类可以访问外部类中private修饰的成员变量和方法等,但是外部类却不能访问内部类中的实现细节。
1.非静态内部类
先来看下非静态内部类定义的语法形式:
public class OutClass
{
     public class InClass
     {
          //内部类的方法等
     }
}
注:内部类为外部类的成员,所以可以使用private,protect,public等修饰。如果一个外部类不使用访问修饰符进行修饰,则这个类只能被其同一个包内的其他类调用,而内部类的上级是外部类,所以它具有4个作用域:同一个包,同一个类,父子类和任何位置,所以可以使用4种访问控制权限。
我们再来看下非静态内部类的方法访问某个变量时的访问步骤吧:
首先在该方法内寻找--其次在该内部类中寻找--然后在外部类中寻找--若还未找到则系统出现编译错误。还要注意的是不允许在外部类的静态成员中使用非静态内部类,而且不能在非静态内部类中包含静态成员。
2.静态内部类
它的定义就比较好理解了,即用static修饰的内部类,显而易见该内部类属于外部类本身,而不属于外部类的某个对象。
注:static不可修饰外部类,但可修饰内部类,因为内部类的上级是外部类,而外部类的上级包。
与非静态内部类相比,静态内部类的外部类依然不能直接访问静态内部类的成员,但可以使用静态内部类的类名作为调用者来访问静态内部类的类成员,也可使用静态内部类对象作为调用者来访问静态内部类的实例成员。
3.使用内部类
a.在外部类内部使用内部类
与平时使用普通类没多大区别,唯一区别是不能再外部静态类成员中使用非静态内部类,因为静态成员不能访问非静态成员
b.在外部类以外使用非静态内部类
若想在外部类以外访问内部类,则内部类不能用private修饰,private修饰的内部类只能在外部类进行访问,省略访问控制符的内部类只能被与外部类同在一个包下的其他类访问;使用protect修饰的内部类可被与外部类同在一个包下的其他类和外部类的子类访问;若是public修饰的,则可以在任何地方被访问。
在外部类以外定义内部类变量的语法格式为:OutClass.InClass In
创建非静态内部类实例的语法格式为:OutInstance.new InConstructor()
继承非静态内部类的语法形式为:
Public class FuClass extend Out.In
{
     //......
}
c.在外部类以外使用静态内部类
在外部类以外创建静态内部类实例的语法格式为:new OutClass.InConstruction()
继承静态内部类的语法形式为:
Public class FuClass extend Out.In()
{
     //......
}
4.局部内部类
如果把一个内部类放在方法中定义,则该类为局部内部类,因为局部内部类只能在定义该内部类的方法中使用,所以,局部内部类不能使用访问控制符和static修饰符修饰。
注:如果想使用局部内部类定义变量或创造实例或派生子类,都只能在定义该局部内部类的方法中进行。5.匿名内部类
匿名内部类适用于只需要使用一次的类,注意,匿名内部类不能重复使用。
其定义格式为:
new 父类构造器(实参列表)或实现接口()
{
     //类体
}
注:匿名内部类必须且只能继承一个父类或实现一个接口
定义匿名内部类的规则:
匿名内部类不能是抽象类,因为在创建匿名内部类时会立即创建匿名内部类的对象;匿名内部类不能定义构造器,因为匿名内部类没有类名,无法定义构造器。
还要注意:如果匿名内部类需要访问外部类的局部变量则必须使用final修饰符来修饰外部类的局部变量。
关于内部类的内容就这些了,希望对今后java的学习有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值