笔记
在类中类中,如果内类是被static修饰的类,这个类中可以有静态方法和非静态方法,那么外类的所有成员都默认带有final static 修饰词,
class Outer4{
private int num = 10 ;
private static int num2 = 100;
//成员静态的内部类
// 静态的内部类访问的外部类数据,外部累的相应成员必须是静态的
public static class Inner4{
//非静态方法
public void show(){ //在静态类中当方法为非静态的时候则可以访问静态.静态也只能访问静态
// System.out.println(num); //这里的num是非静态的所以报错.
System.out.println(num2);
}
//静态方法
public static void show2(){
// System.out.println(num); 这里的num访问的是外部的num,由于此方法是静态的,所以他所访问的num也必须是静态的.
System.out.println(num2); 这里的num2访问的是非静态的num2所以报错
}
}
}
在类中类中,如果内类是被static修饰的类,这个类中可以有静态方法和非静态方法,那么外类的所有成员都默认带有final static 修饰词,
class Outer4{
private int num = 10 ;
private static int num2 = 100;
//成员静态的内部类
// 静态的内部类访问的外部类数据,外部累的相应成员必须是静态的
public static class Inner4{
//非静态方法
public void show(){ //在静态类中当方法为非静态的时候则可以访问静态.静态也只能访问静态
// System.out.println(num); //这里的num是非静态的所以报错.
System.out.println(num2);
}
//静态方法
public static void show2(){
// System.out.println(num); 这里的num访问的是外部的num,由于此方法是静态的,所以他所访问的num也必须是静态的.
System.out.println(num2); 这里的num2访问的是非静态的num2所以报错
}
}
}
总结: 在静态内类中不管方法是静态还是非静态都只能访问静态.
//测试类
如果内类是被private修饰的类,那么外类中的方法使用内类中的数据时要进行多态类的实例化.而内类使用外类中的数据时不需要实例化.
如果是本类中的private的话就直接可以用.
class Body{
* //写一个成员内部类
* private class Heart{
* public void operator(){
* System.out.println("心脏搭桥....");
* }
* }
*
* public void work(){
* if(你是医生){
* Heart h = new Herat(); //跨类使用private数据时要进行实例化
* h.Operator();
* }
* }
* }
当内类为静态类时,若要访问本类成员时,则需要用 外部类名.内部类名 对象名=new 外部类名.内部类名();
当内类为非静态类时,若要访问本类成员时,则用 外部类名.内部类名 对象名=new 外部类名().new 内部类名();
局部内部类中内类在局部位置,而且局部变量都为final 型,变为常量.
class Outer6{
private int num = 20 ;
//外部类成员方法
public void method(){
//局部变量
// int num2 = 20 ;//不正确的
final int num2 = 20 ;//局部变量必须是常量
//局部位置
//局部内部类
class Inner6{
public void show(){
System.out.println(num);//外部类成员变量
System.out.println(num2);//访问这个数据
}
}
//访问show()方法
Inner6 i = new Inner6() ;
i.show();
}
}
public class InnerClassDemo5 {
public static void main(String[] args) {
//创建外部类对象
Outer6 o = new Outer6() ;
o.method();
}
}