文档章节

JAVA内部类(一)

 会飞的豆子
发布于 2016/09/08 12:02
字数 572
阅读 27
收藏 1

        说到java基础那么就不能不说内部类,随着JDK版本的升级如今到JDK1.8对于内部类也做出了一定的改进,那么接下来就慢慢道来。

在我的认知下内部类分为四种:成员内部类,局部内部类,匿名内部类,静态内部类。

  1. 成员内部类

成员内部类是最为常见的内部类,因为它在类的内部定义,是这个类的成员。成员内部类可以无条件的访问外部类的所有成员属性和成员方法。

public class People {
    private int age;
    private int height;
    public Eye getEyeInstance(){
        return new Eye();
    }
    
    private class Eye{
        void look(){
            System.out.println(age);
            System.out.println("Hi,I'm looking at you!");
        }
    }

    public People(int age, int height) {
        super();
        this.age = age;
        this.height = height;
    }

    public static void main(String[] args) {
        People peo = new People(18, 178);
        People.Eye eye = peo.new Eye();
        eye.look();
        peo.getEyeInstance().look();
    }
}

需要注意的是:当内部类的变量或者方法与外部类的成员的名字相同的时候使用方式:

外部类.this.变量(或者方法名);

从上面的代码可以看出:当外部类想使用内部类成员的时候需要先创建一个内部类的对象然后通过对象引用

People peo = new People(18, 178);

 People.Eye eye = peo.new Eye();

  public Eye getEyeInstance(){ return new Eye(); }

通过这两种方式都能产生内部类对象,由于内部类是依赖于外部类的,所以需要先创建一个外部类对象。内部类可以被private,protected,public修饰。

   2.局部内部类

局部内部类是定义在一个方法或者任何一个作用域中的类,对于使用它的地方是相当有限的,访问仅限于方法内或者作用域内。由于局部内部类是方法中的一个局部变量,所以不能用public,protected,private,static的修饰符,下面是使用方法:

public People getTeacher(){
        class Teacher extends People{
            public Teacher(int age, int height) {
                super(age, height);
            }
        }
        return new Teacher(1, 1);
    }

3.匿名内部类

匿名内部类没有类名,匿名内部类只能使用一次,匿名内部类必须继承一个父类或者实现一个接口

写法:

interface Person {
        public void eat();
    }
    
    public class Demo {
        public static void main(String[] args) {
            Person p = new Person() {
                public void eat() {
                    System.out.println("eat something");
                }
            };
            p.eat();
        }
    }

 

© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 3
码字总数 2242
作品 0
海淀
程序员
私信 提问
【目录导航】JAVA零基础进阶之路

【JAVA零基础入门系列】(已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day6 Java字符串 Day7 Java输入与输出...

MFrank
2018/06/21
0
0
【Scala】Scala高级使用技巧之一

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/gongxifacai_believe/article/details/82110617 1、Scaladoc的使用 Scaladoc是Scala的API文档,包含了Scala所有的A...

魏晓蕾
2018/08/27
0
0
大概优秀的java程序员都要会分析class文件吧

相信大家在学java的时候都会听到这样的一些结论: enum 是一个类 泛型的实现使用了类型擦除技术 非静态内部类持有外部类的引用 需要将自由变量声明成final才能给匿名内部类访问 ... 初学的时候...

嘉伟咯
03/22
0
0
Java中的内部类实例初始化匿名函数(JLS7 8.6:Instance Initializers)

偶尔发现了一段好玩的java代码,关于Java内部类的,觉得很有意思,但是想不明白这段代码是java语法的特性哪?还是别的什么。最后发现还是对java了解的不够深啊。先上代码: import java.util...

qalong
2013/09/02
0
0
给使用 Kotlin 开发 Android 小伙伴的一些小建议

转眼间使用 Kotlin 已经有两个月了,时间不长,我也算搭上了 Google 宣布 Kotlin 作为官方支持语言的一波末班车。可能大家早已从纯 Java 开发 Android 转为了混合使用开发甚至是 Kotlin 开发...

nanchen2251
2018/10/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

dockerfile 镜像构建(1)

通用dockerfile 利用已经编译好的.jar 来构建镜像。要构建的目录如下: [root@iZuf61quxhnlk9m2tkx16cZ demo_jar]# docker build -t demo:1 . 运行镜像: [root@iZuf61quxhnlk9m2tkx16cZ de...

Canaan_
25分钟前
0
0
Redis radix tree源码解析

Redis实现了不定长压缩前缀的radix tree,用在集群模式下存储slot对应的的所有key信息。本文将详述在Redis中如何实现radix tree。 核心数据结构 raxNode是radix tree的核心数据结构,其结构体...

阿里云云栖社区
28分钟前
5
0
vue import 传入变量

在做动态添加component的时候,传入变量就会报错,出现以下错误信息: vue-router.esm.js?fe87:1921 Error: Cannot find module '@/components/index'. at eval (eval at ./src/components ......

朝如青丝暮成雪
30分钟前
0
0
Flutter开发 Dio拦截器实现token验证过期的功能

前言: 之前分享过在Android中使用Retrofit实现token失效刷新的处理方案,现在Flutter项目也有“token验证过期”的需求,所以接下来我简单总结一下在Flutter项目中如何实现自动刷新token并重...

EmilyWu
31分钟前
6
0
final Map可以修改内容,final 常量不能修改

1.final Map 可以put元素,但是不可以重新赋值 如: final Map map = new HashMap(); map = new HashMap();//不可以 因为栈中变量map引用地址不能修改 2.final str = “aa”; str = "bb";/......

qimh
34分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部