内部类通俗的来讲就是在类的内部定义的类。内部类一般分为四种:1.成员内部类,2.局部内部类,3.静态内部类,4匿名内部类。
接下来让我们依次来看下四种内部类。成员内部类表示定义在另一个类的内部,具体的代码如下。
/**
* 成员内部类的实例
*/
public class InnerClassDemo
/**
* 在类里面声明一个类
*/
class A{
//可以访问外部类的成员属性和方法(无论是私有的还是静态的)
}
}
不过需要注意的是当外部类和内部类有相同的属性名和方法时,需要通过类名.this.属性名来进行区分。当外部类想要访问内部类的属性和方法时就要通过创建内部类的对象来访问。当在外部需要声明内部类的对象时需要创建外部类的对象(a),再通过a进行创建。具体代码如下所示
InnerClassDemo a = new InnerClassDemo();
InnerClassDemo.A inner=a.new A();
静态内部类就是在局部内部类的基础之上在内部类前面加上static,可以看成static修饰的成员内部类,具体代码不再演示,只说它的对象创建方式。
InnerClassDemo.A inner=new InnerClassDemo.A();
局部内部类是声明在方法里的类,由于声明在方法中所以没有public,protected,private等修饰词。局部内部类的访问权限仅限于方法内部,而成员内部类则可以访问类的属性和方法,但是需要注意的是局部内部类访问外部的局部变量必须是final修饰的!!!
public class Outer{
public void in(){
class Inner{
//访问方法内的属性
}
}
}
匿名内部类也是在方法内部中实现,具体的代码如下。
public class Outer{
public void in(){
Outer outer=new Outer(){
//里面写需要重写或实现的方法
};
}
}
最后总结下,内部类有何用?为了解决两个问题:
① 解除单继承的限制(Java中,类和类之间,只能单继承)
② 多个父类型中含有相同方法签名的方法。
再介绍下包装类,由于八大基本数据类型不属于类,不满足万物皆对象的理念,所以大牛们封装了一些类来对应八大基本数据类型,真正做到了万物皆对象的理念。当然包装类也给了我们很多方便,尤其是里面的方法能方便我们的开发。
基本数据类型 <===>包装类(对象)
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean
具体的使用可以参考api文档,在此不详述。
接下来介绍一个概念enum枚举,枚举其实就是一种特殊的class,里面的属性都是public static final修饰,枚举的构造方法是私有的。