(1)内部类
1>内部类的概述
(1)内部类提供了更好的的封装,可以将内部类隐藏在外部类内,不允许同一个包中的其他类访问该类。
(2)内部类成员可以直接访问外部类的私有数据,因为内部类作为其外部类成员,同一个类的成员之间可以相互访问。但外部类不能访问内部类的实现细节,如内部类的成员变量。
(3)匿名内部类适用于创建那些仅需要一次使用的类。
2>内部类的使用
将一个类放在另一个类的内部定义,即为内部类,内部类的定义语法格式如下:
public class OutClass{
//定义内部类
public class innerClass{
}
}
(2)静态内部类
1>静态内部类的实现
使用 static修饰的内部类被称为静态内部类。静态内部类属于外部类本身,而不属于外部类的 某个对象。静态内部类可以包含静态成员也可以包含非静态成员。依据静态成员不能访问非静态成员的规则,静态内部类不能访问外部类的成员,只能访问内部类的成员。即使是静态内部类的实例方法,也不能访问外部类的实例成员,只能访问外部类的静态成员。
静态内部类的示例:
public class OutClass {
private int outPro=5;
private static int outPro2=9;
private static class InnerClass{
private static int innerPro=10;
private int innerPro2=100;
public void accessOutPro(){
System.out.println("外部类实例属性outPro="+new OutClass().outPro);
System.out.println("外部类的静态属性outPro2="+outPro2);
}
}
public void accessInnerPro() {
System.out.println("内部类的静态属性InnerPro="+InnerClass.innerPro);
InnerClass ic=new InnerClass();
System.out.println("内部类实例属性InnerPro2="+ic.innerPro2);
ic.accessOutPro();
}
public static void main(String[] args) {
OutClass oc=new OutClass();
oc.accessInnerPro();
}
}
运行结果:
(3)匿名内部类
1>匿名内部类的实现
匿名内部类适用于仅需要一次使用的类,匿名内部类的语法较为特别,创建匿名内部类时,会立即创建一个该类的实例,创建完毕之后该类的定义会立即消失,匿名内部类不能重复使用,定义匿名内部类的语法格式如下:
new父类构造器(参数列表)|实现接口(){
//匿名内部类的类体部分
}
关于匿名内部类有以下两条规则:
(1)匿名内部类不能是抽象类,因为系统在创建匿名内部类时,会立即创建匿名内部类的对象,因此不允许将匿名内部类定义成抽象类。
(2)匿名内部类不能定义构造器,因为匿名内部列没有类名,所以无法定义构造器,但匿名内部类可以定义实例化初始块,通过实例化初始快来完成构造器需要完成的事情。
(4)泛型
1>泛型的概述
泛型的主要原理是声明类时通过标识类中某个属性的类型或某方法的返回值及参数类型,声明和实例化类时只要指定需要的类型即可,使用泛型可以提高数据安全性。