java内部类的学习

内部类就是定义在另一个类内部的类。

内部类对于同一包中的其它类来说,内部类能够隐藏起来。

语法:

public class MyOut {
    private int age;
    public  void show(){}
    class MyInner{
       private int name;
    }
}

(1)内部类可以访问其外部类中所有的属性和方法,无需创建外部类的对象。

(2)必须创建内部类的对象,否则无法从外部类访问内部类的变量和方法。

(3)如果内部类中有和外部类同名的变量或方法,则内部类的变量和方法将获得比外部类的变量和方法更高的优先级。

(4)不能定义static变量

一个类只会被这个类所调用,其他类不会使用他,你可以把它定义成一内部类,这样可以隐藏实现细节,避免错误的调用:

public class Outer{
    private int varOuter=100;
    class Inner    {
        int varInner=200;
        public void showOuter() {
            //是否能够输出?
            System.out.println(varOuter); 
        }
    }
    public void showInner() {
        Inner i=new Inner();
        System.out.println(i.varInner);
    }
}
public class MyTest{
  public static void main(String[] args){
     //实例化外部类
     Outer o = new Outer();
     //实例化内部类 
     Outer.Inner oi = o.new Inner();             将内部类进行实例化
     oi.showOuter();
   }
}

输出:100

普通类的访问权限修饰符:default   public

内部类的访问权限修饰符

default     public     protected     private

静态内部类static标识的内部类为静态内部类。

(1)静态内部类作为外部类的静态成员,不能访问外部类非静态成员。

(2)非静态内部类只能定义非静态成员,而静态内部类可以定义静态成员和非静态成员。

静态内部类实例化的方法:

使用Outer.Inner inn=new Outer.Inner()方式实例化静态内部类。

非静态内部类不可以使用上面的方式实例化。

public class MyOut {
    private int age;
    public  void show();
    static class  MyInner{
       private int name;
    }
}

局部内部类:在一个类的方法体中或程序块内定义的内部类

class  A{
    int a;
    public void method(){     
    }
    class B{ }
}
class A{
    int a;
    public void method( int c ){
        int b=0;
        class B{ }
    }
}

在方法定义的内部类中只能访问方法中的final类型的局部变量

public class Outer2 {
      public int a = 1;
      private int b = 2;
      public void method( final int c) {
          int d = 3;
          final int e = 2;
          class Inner {
              private void iMethod( int e) {
                  //System.out.println(e);
              }
          }
      }
  }

匿名内部类:没有定义类名的内部类,称为匿名内部类

aaa

?????????

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值