匿名对象和内部类

匿名对象:

匿名对象是对象的简化形式;


匿名对象的使用情况:

1)当对对象方法仅进行一次调用的时候使用;如果需要调用多次,还需要创建对象。如果对一个对象进行多个成员的调用,就必须给这个对象起个名字。

2)匿名对象可以作为实际参数进行传递(点击事件监听里面的参数)

3)匿名对象是没有被其他对象所引用

4使用一次就变成垃圾了,被垃圾回收器收回了。

理解:

创建一个匿名对象,调用类中的方法   new People().say();

这里需要传递一个监听对象,我们直接给一个匿名对象;使用匿名对象,如果直接new接口要实现接口中的抽象方法(相当于 创建了一个子类对象,并实现其中的抽象方法)

          top_right_left_img.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
               }
           });

           top_right_left_img.setOnClickListener(listener);
            View.OnClickListener listener = new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            };


 

内部类:

java内部类使用总结:

1)一个类中还包含着另外一个类,内部类有自己的属性和方法。

2)程序编译过后会产生两个.class文件。

3)内部类其实严重破坏了良好的代码结构,但为什么还要使用内部类呢?因为内部类可以随意使用外部类的成员变量(包括私有)而不用生成外部类的对象,这也是内部类的唯一优点。

常规用法:

1)创建内部类对象

2)内部类可以直接使用外部类的成员变量,在android 点击事件跳转页面中有用到,页面之间传递参数

3)如果存在同名变量,访问内部类本身的成员变量可用this.属性名

4)如果存在同名变量,访问外部类的成员变量需要使用Out.this.属性名

5)如果用static 将内部内静态化,那么内部类就只能访问外部类的静态成员变量,具有局限性

在变量前面加private 表示类的私有属性,只可以在类内部访问使用,即只能在本类中进行使用,也不能够在子类中使用,子类只能继承公有的成员变量和成员方法。

内部类中的变量访问形式案例

package com.crs.demo.ui.innerclass;

/**
 * Created on 2016/9/26.
 * Author:crs
 * Description:内部类成员变量使用特点
 */
public class Demo2 {
    private int age = 12;

    class Inner {
        int age = 13;

        void print() {
            int age = 14;
            System.out.print(age + "\n");

            //2)如果存在同名变量,访问内部类本身的成员变量可用this.属性名
            System.out.print(this.age + "\n");

            //3)如果存在同名变量,访问外部类的成员变量需要使用Out.this.属性名
            System.out.print(Demo2.this.age + "\n");
        }
    }
}

package com.crs.demo.ui.innerclass;

/**
 * Created on 2016/9/26.
 * Author:crs
 * Description:静态内部类的使用以及注意事项
 */
public class Demo3 {
    private int age = 16;
    private static int score = 16;

    static class Inner {
        //1)在变量前面加private 表示类的私有属性,只可以在类内部访问使用,即只能在本类中进行使用,也不能够在子类中使用,子类只能继承公有的成员变量和成员方法。
        //2)一定要区分好匿名对象与内部类的区别。
        public void print() {
            //4)如果用static 将内部内静态化,那么内部类就只能访问外部类的静态成员变量,具有局限性.
            //System.out.print(age);会报错。
            System.out.print(score);
        }
    }

}

package com.crs.demo.ui.innerclass;

/**
 * Created on 2016/9/26.
 * Author:crs
 * Description:测试内部类的使用
 */
public class TestInnerClass {
    public static void main(String[] args) {
        Demo1 demo1 = new Demo1();
        //创建内部类对象
        Demo1.Inner inner = demo1.new Inner();
        inner.print();

        //主要用于测试内部类的变量访问形式
        Demo2 demo2 = new Demo2();
        Demo2.Inner inner1 = demo2.new Inner();
        inner1.print();

        //测试静态内部类的使用
        Demo3.Inner inner3= new Demo3.Inner();
        inner3.print();
    }
}





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值