JAVA—匿名内部类和基本数据类型的包装类

一.匿名内部类:

内部类指的是在一个类的内部定义了另外的类结构,利用内部类可以方便地实现私有属性地互相访问,但是内部类需要明确地使用class定义。而匿名内部类是没有名字地内部类,其必须在抽象类或接口基础上才可以定义。

1.分析匿名内部类的产生动机:
interface Message {
    public void print() ;
}
class MessageImpl implements Message {
    public void print() {
        System.out.println("Hello,World!");
    }
}
public class TestDemo {
    public static void main(String args[]) {
        fun(new MessageImpl()) ;
    }
    public static void fun(Message msg) {
        msg.print();
    }
}

本程序首先在主方法中实例化MessageImpl子类,然后将实例化对象传递到fun()方法中,在fun()方法中利用接口对象调用print()方法。

2.采用匿名内部类简化类的定义:
interface Message {
    public void print() ;
}
public class TestDemo {
    public static void main(String args[]) {
        fun(new Message() {
            public void print(){
                System.out.println("Hello,World!");
            }
        }) ;
    }
    public static void fun(Message msg) {
        msg.print();
    }
}

本程序利用匿名内部类的概念简化了Message接口子类的定义,在主方法中调用fun()方法时,直接实例化了接口对象,但是由于接口中包含抽象方法,所以需要同时覆写接口中的抽象方法才可以正常完成。

二.基本数据类型的包装类:

java在设计中有一个基本原则,即一切皆对象,也就是说一切操作都要求用对象的形式进行描述。但是就会出现一个矛盾:“基本数据类型不是对象”,为了解决这样的矛盾,可以采用基本数据类型包装的形式描述。

1.包装类雏形:
class MyInt {
    private int num ;
    public MyInt(int num) {
        this.num = num ;
    }
    public int intValue() {
        return this.num ;
    }
}
public class TestDemo {
    public static void main(String args[]) {
        MyInt mi = new MyInt(10) ;
        int temp = mi.intValue() ;
        System.out.println(temp*2);
    }
}

本程序为了实现int基本数据类型的包装,专门定义了一个MyInt类,通过这个类的构造就可以将基本数据类型转化为类对象的形式。

2.装箱和拆箱操作:

1.装箱操作:将基本数据类型变为包装类的形式;
每个包装类的构造方法都可以接收各自数据类型的变量;
2.拆箱操作:从包装类中取出被包装的数据。
利用从Number类中继承而来的一系列xxxValue()方法完成。
使用int和Integer:

public class TestDemo {
    public static void main(String args[]) {
        Integer obj = new Integer(10) ;
        int temp = obj.intValue() ;
        System.out.println(temp*2);
    }
}

首先利用Integer类的构造方法将基本数据类型装箱为Integer类对象,然后利用从Number类继承的intValue()方法可以直接从包装类对象中取出所包装的int型数据。

使用double和Double:

public class TestDemo {
    public static void main(String args[]) {
       Double obj = new Double(10.2) ;
       double temp = obj.doubleValue() ;
       System.out.println(temp*2);
    }
}

本程序与上一个程序功能完全相同,唯一区别就是将int型数据变为了double型数据。

使用Boolean和boolean(不是Number子类)

public class TestDemo {
    public static void main(String args[]) {
       Boolean obj = new Boolean(true) ;
       boolean temp = obj.booleanValue() ;
       System.out.println(temp);
    }
}

虽然Boolean时对象型的包装,但是在使用过程中可以发现其代码的处理结构都是相似的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值