4内部类

内部类(怀孕的妈妈和孩子,妈妈有的孩子都可以享受)

问:什么是内部类呢?

答:内部类( 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();

}

}

你可能感兴趣的:(4内部类)