内部类(怀孕的妈妈和孩子,妈妈有的孩子都可以享受)
问:什么是内部类呢?
答:内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。
问:那为什么要将一个类定义在另一个类里面呢?清清爽爽的独立的一个类多好啊!!
答:内部类的主要作用如下:
1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
问:内部类有几种呢?
答:内部类可分为以下几种:
成员内部类
静态内部类
方法内部类
匿名内部类
public class Car {
public class Smallcar{
public void show(){
System.out.println("内部类");
}
}
public static void main(String[] args) {
Car c=new Car();
Smallcar s=c.new Smallcar();
s.show();
}
}
用内部类方法访问外部私有数据
public class Car {
private inta=19;
public class Smallcar{
intb=99;
public void show(){
System.out.println("a "+a);//访问外部私有数据
System.out.println("b "+b);
}
}
public static void main(String[] args) {
Car c=newCar();
Smallcar s=c.new Smallcar();
s.show();
}
}
public class Car {
private int a=19;
public class Smallcar{
int a=99;
public void show(){
System.out.println("a "+Car.this.a);//成员变量相同时,内部类访问外部类的成员变量
System.out.println("a "+a);
}
}
public static void main(String[] args) {
Car c=newCar();
Smallcar s=c.newSmallcar();
s.show();
}
}
Java 中的静态内部类
静态内部类是 static 修饰的内部类,这种内部类的特点是:
1、 静态内部类不能直接访问外部类的非静态成员,但可以通过new 外部类().成员的方式访问
2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员
3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建内部类 对象名= new 内部类();
public class Car {
static int a=19;
int b=98;
public static class Smallcar{
int a=99;
public void show(){
System.out.println("a "+Car.a);//成员变量相同时,内部类访问外部类的静态成员变量
System.out.println("a "+a);
Car c=newCar();
System.out.println("b "+c.b);//内部类访问外部类的非静态成员变量,所以把b的妈妈car叫来
}
}
public static voidmain(String[] args) {
// Car c=new Car();
Smallcar s=new Smallcar();
s.show();
}
}
a 19
a 99
b 98
java中的方法内部类
方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。
一定要注意哦:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。
public classCar {
intb=98;
public voidshow(){
final intsd=234;//外部类方法中的常量
intad=34;//外部类方法中的变量
classSmallcar{// 注意: 内部类没有public
intcar=23;//内部类方法中的变量
public voidprint(){//内部类的方法
System.out.println("car"+car);
}
}
Smallcar s=newSmallcar();//注意:创建内部类的对象
s.print();
}
public static voidmain(String[] args) {
Car c=newCar();
c.show();
}
}