美文网首页
java的内部类

java的内部类

作者: slicn | 来源:发表于2018-02-07 14:53 被阅读0次

前言

面向对象程序设计中,可以在一个类的内部定义另一个类(静态嵌套类和非静态嵌套类)。静态嵌套类使用很少,最重要的是非静态嵌套类,也即是被称作为内部类(inner)。内部类是JAVA语言的主要附加部分。内部类几乎可以处于一个类内部任何位置,可以与实例变量处于同一级,或处于方法之内,甚至是一个表达式,完善了多种继承、实现了事件驱动、闭包。

  1. 内部类只在第一次使用的时候加载。
  2. 非静态类内部不能出现静态模块(方法,属性,代码块)
  3. 非静态类的使用需要借助外部类的对象。
  4. 内部类拥有外围类所有元素的访问权限

好处详解

  1. 内部类实现了隐藏式封装,可以对外部类有不可见性
  2. 实现多继承

实例

  1. 隐藏行为,以借钱为例
定义借钱的接口
public interface IMoney {
    void lendMoney();
}
实现类

public class IMoneyImpl implements IMoney {
    @Override
    public void lendMoney() {
        System.out.println("没有钱了");
    }
}
主人
public class Owner {
    public IMoney lend(boolean canPay){     //如果能还我就借或者我愿意我就借
        if (!canPay) return new IMoneyImpl();
        return null;
    }
}

测试代码
如果不熟我就不借,会有如下代码
@Test
    public void test(){
       IMoney i = new Owner().lend(false);    //不借
       i.lendMoney();
    }

  i 就是一个不肯借钱的实例(暴露接口),但是他不想你知道,伤和气。把接口隐藏到Owner内部就可以解决这个问题如下:
public class Owner {

    //内部类隐藏接口
    private  class RealLend implements IMoney{

        @Override
        public void lendMoney() {
            System.out.println("可以借钱");
        }
    }
    public class FalseLend implements IMoney{

        @Override
        public void lendMoney() {
            System.out.println("不可以借钱");
        }
    }
}

测试
    @Test
    public void test2(){
        Owner owner = new Owner();
        Owner.FalseLend falseLend = owner.new FalseLend();    //需要外围类的对象。隐藏了接口
        falseLend.lendMoney();
    }
  1. 利用内部类第一次调用的时候加载的特性实现优雅的单利模式
/**
 * Created by: jun on 2018/2/7.
 * description: 内部类实现优雅的单利模式
 */
public class Singleton1 {
    private Singleton1(){};

    private static class SingletonHoder{
        private static Singleton1 instance = new Singleton1();
    }

    public static Singleton1 getInstance(){
        return SingletonHoder.instance;
    }
}

相关文章

  • Java 中的方法内部类

    Java 中的方法内部类 方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内...

  • PHP转JAVA的记录

    Java 数组 内部类 内部类的创建:内部类可以对包内其他类隐藏想实现一个接口时, 不想新建类文件 内部类可以访问...

  • Java内部类

    Java内部类,简单来说就是将一个类定义在另一个类或者方法里面,主要分为成员内部类,局部内部类,匿名内部类和静态内...

  • Java内部类

    Java内部类 大纲: java内部类有什么特点?为什么需要内部类? 非静态内部类持有外部类的引用 内部类的分类。...

  • Java静态内部类

    Java静态内部类 博客分类: java 两种内部类 Java的内部类有两种,一种是静态内部类,另一种是普通内部类...

  • 内部类

    内部类可以分为:非静态内部类;静态内部类;匿名内部类。 一、内部类 首先要说,Java为什么要使用内部类?java...

  • JavaSE基础知识学习-----内部类

    内部类 类的五个成分:属性,方法,构造器,代码块,内部类。什么是内部类?在java中,允许一个类定义在另一个类的内...

  • Kotlin内联类、内部类、嵌套类

    Kotlin内联类、内部类、嵌套类 在开始介绍Kotlin内联类、内部类、嵌套类之前,先简要回顾一下java中的内...

  • Java 内部类和泛型的理解

    Java 内部类 Java非静态内部类持有对外部类的引用,可以访问外部类的状态使用方法 OuterClass.th...

  • kotlin之内部类,匿名内部类与伴生对象

    个人博客:haichenyi.com。感谢关注 内部类   kotlin的内部类与java的内部类有点不同java...

网友评论

      本文标题:java的内部类

      本文链接:https://www.haomeiwen.com/subject/jtmszxtx.html