深入理解内部类

(一)内部类基础
        在java中,广泛意义上的内部类一般来说包括四种:成员内部类,局部内部类,匿名内部类,静态内部类
        1> 成员内部类
                成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形式如下:
               
public class Circle{
                        double radius=0;
                        public Circle(double radius){
                                this.radius=radius;
                        }

                        public Class Draw{
                                public void draw(){
                                        System.out.println("content");
                                }
                        }
                }
                高能:成员内部类可以无条件使用外部类的所有成员属性和成员方法(包括private成员和静态成员).不过要注意的是,当成员内部类拥有和外部类同>名的成员变量或者方法的时候,会发生隐藏现象,即默认情况下访问的是成员内部类的成员.如果要访问外部类的同名成员,则需要:
                外部类.this.成员变量
                外部类.this.成员方法

                虽然内部类访问外部类随心所欲,但是外部类访问内部类则是有所条件的:
                        必须首先创建一个成员内部类的对象,再通过对象的引用来访问.
                        也就说成员内部类是依附外部类而存在的,也就是说,如果要创建成员内部类的对象,前提是必须有一个外部类对象.
                内部类可以拥有private protected public访问权限,private只能由外部类的内部访问,protected则只能在同一个包下或者继承外部类的情况下访>问;public 是任何地方都能访问.默认访问权限是只能在同一个包下访问.
        2> 局部内部类
                局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别就是在于局部内部类的访问仅限于方法内或者该作用域内
              
 class Extendclass{
                        public Outclass(){}
                }
                class OutClass{
                        public OutClass(){}
                        public Extenclass getsubclass(){
                                class subClass extends ExtendClass{
                                        int age=10;
                                }
                                return new subClass();
                        }
                }


                注意局部内部类中的方法和一个局部变量一样,不能有public private protected以及static修饰符修饰的.
        3>静态内部类
                静态内部类只不过是在成员内部类之前加上了一个static 修饰,和静态变量相似,不需要创建外部类的实例进行调用,可以直接调用
        4> 匿名内部类
                匿名内部类顾名思义是没有名字的内部类,直接看例子:
              
 public abstract person{
                        public abstract void set();
                }
                public class People{
                        public static void main(String[] args){
                                person p=new person(){
                                        pulic void set(){
                                                System.out.println("hello");
                                        }
                                }
                                p.eat();
                        }
                }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值