java零基础入门-面向对象篇(十五) 内部类
内部类经常用在编写图形界面,比如swing和安卓的程序,所以在我们通常的web程序中使用较少,但是我们还是有必要来认识一下他。
内部类,顾名思义,就是定义来类内部的类。
内部类有以下几种,成员内部类,局部内部类,匿名内部类,静态内部类,下面一个个来介绍他们。
成员内部类
名字起得很好,看名字就知道是干啥的。成员内部类就是将内部类作为一个外部类的成员,地位跟变量,方法一样。
内部类一个很大的特点就是,就算我在外部类定义了一个私有变量,外部无法访问,但是内部类依然可以访问。
就好像你的微信信息和银卡密码对外人来说是绝对保密的,但是对你的女票来说就完全是另外一回事了。
你的女票可以随时随地的访问你的手机,看看微信里面有些啥消息,看看聊天记录,短信记录等等。如果零花钱不够了,还可以直接用你的手机给他的微信发红包,这操作是不是有一种很熟悉的感觉。
内部类来看一下内部类的一些特点
1.内部类的实例化与普通类的实例化有区别,因为内部类是外部类的成员,所以使用 外部类 . 内部类 的方法表示要实例化的内部类。使用外部类对象 . new 来表示new关键字来表示要创建内部类对象。
2.当内部类属性和外部类属性相同的时候,要在内部类调用外部类的同名属性,需要使用 外部类 . this 表示外部类的this,然后用外部类的this来调用外部类的属性。
3.内部类和外部类还有一个比较有意思的特点,那就是,内部类可以直接访问外部类的属性,而外部类需要通过内部类的对象来调用内部类属性,而不能直接访问。
这个特点是不是理解起来比较麻烦?那么这样理解吧,你女票想要看你的微信随时可以看,而你要看你女票的微信需要你女票同意才行。感觉这个内部类设计的好人性化。
看私房钱看到了没有,内部类是可以直接引用到外部类的成员变量的,就算他是私有的。而外部类想要访问到内部类的成员变量,直接引用会报错,需要先将内部类实例化,再用实例去引用。
理解到这里就差不多了,我们看下一个。
局部内部类
名字依然很好,局部内部类跟局部变量很相似,一般定义在方法里面,而且只能在方法内部使用。出了方法,方法内的变量就没法使用了,局部内部类也一样,在方法外不可以调用。
局部内部类局部内部类有点像一次性使用的类,因为如果需要公用和重复调用,最好设计成外部类,而局部内部类只在方法内可以使用,方法调用完了,局部内部类也就没作用了。
这里要注意的是,局部内部类前面没有加 public,其实不仅仅是public ,所有的访问权限修饰符都不能加,因为没有意义。局部内部类只在方法中有效,所以开发访问权限没有意义。
总之记住一点,怎么使用局部变量,就怎么使用局部内部类。
匿名内部类
局部类有点像一次性使用的内部类,其实还有一种就是一次性使用的内部类,那就是匿名内部类。
匿名内部类的使用有个前提,要么继承一个父类,要么实现一个接口。
匿名内部类的使用情况就是只用一次的实现类或者只用一次的子类,有了匿名内部类就不用再去定义一个子类或者实现类。
匿名内部类首先有一个人的类,有一个花钱的方法,我们不能直接去实现他,如果直接实现它,然后在实现类里面写了花私房钱的方法,就会留下证据。所以我们要想一个方法一次性的实现花私房钱的方法。
前面讲接口的时候说过,接口是不能实例化的,所以不能使用new关键字,但是这里如果使用了匿名内部类,可以在new关键字后面跟上接口名,因为在后面写的是匿名内部类,他实现了接口。所以看上去好像是实例化了接口,实际上是创建了一个实现类去实现了接口并且实例化了一个对象。
如果Person是父类,不是接口,匿名内部类也可以使用,方法类似,因为继承和接口都是实现多态的一种方式,所以匿名内部类的使用也相似。
静态内部类
程序开发中基本用不上。知道有这货就行了。
关于内部类大致了解到这个程度就可以了。
本章是面向对象篇的最后一章。
从下一章开始我会开始介绍更多的java特性,将面向对象的基础打好很重要,后面很多的高级特性和一些工具都是以面向对象为基础的。
后面章节的难度会明显的加大,但是我当然有办法能够让你轻松的学会,所以赶紧点个关注吧。
网友评论