java基础2:组合和内部类

组合

组合是一种代码复用机制,组合的是对象,通俗的理解是在一个类中创建或引用另一个类的对象。

使用多个已有的对象组合为一个功能更加复杂强大的新对象,因为在对象之间,各自的内部细节是不可见的,所以也说这种方式的代码复用是黑盒式代码复用。

组合模式:组合多个对象形成树形结构以表示有整体-部分关系层次结构,组合模式可以让客户端统一对待单个对象和组合对象。

内部类

    内部类是一种代码隐藏机制,通俗的理解是在一个类的内部定义另一个类。根据定义位置的不同,可以分为:成员内部类、局部内部类、匿名内部类和静态内部类

内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员);外部类需要创建内部类的对象,才能访问内部类的成员和方法。

class Circle {

    //1、成员位置

    double radius = 0;             //成员变量

    

    public Circle(double radius) { //构造方法

        this.radius = radius;

    }

   

    class Draw {                    //成员内部类,可以有修饰符

        double radius = 1;

        public void drawSahpe() {

            System.out.println("drawshape");

        }

}

 

Static class Draw2 {                   //静态内部类,一种特殊的成员内部类

        public void draw2 () {

            System.out.println("draw2");

        }

}

 

   public double getArea(){    //方法

    //2、局部位置

        double pai=3.14;        //局部变量

       

        class A{                //局部内部类:不能有修饰符

            ……

        }

        return pai*radius*radius;

    }

}

成员内部类

①修饰符public、protected、private以及static(静态内部类)

②当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问:

外部类.this.成员变量

外部类.this.成员方法

③成员内部类是依附外部类而存在,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象

Circle c = new Circle();

Circle.Draw d = c.new Draw();

或者可以写成:

Circle.Draw d = new Circle().new Draw();

 

静态内部类

        静态内部类是一个static修饰的成员内部类。

   ①静态内部类和静态成员变量类似,不需要依赖于外部类,即不用创建外部类对象就能访问。

   Circle.Draw2 d2 = new Circle.Draw2();

   ②静态内部类不能访问外部类的非static成员变量或者方法。因为非静态的成员变量和方法,必须用类对象访问。

局部(方法)内部类

①访问仅限于方法内或者该作用域内,所以在方法内部创建对象

②不能有修饰符

匿名内部类

匿名内部类就是一个没有名字的局部(方法)内部类。

①匿名内部类必须继承一个抽象类或者实现一个接口。

②匿名内部类没有类名,因此没有构造方法。

//接口

interface myItface{

    void test();

}

class Outer{

    private int n = 5

    public void dispaly(int temp)

    {

        new myItface()//实现并调用了test()方法

        {

            public void test()

            {

                System.out.println(temp);

            }

        }.test();

    }

}

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值