java内部类

Posted JunMain

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java内部类相关的知识,希望对你有一定的参考价值。

文章目录

什么是内部类

在一个类的内部在定义一个类

用法

例如我们定义一个People类

package com.test;

public class People 
    public void speak()
        System.out.println("I'm People");
    

    class teacher
        private   String s = "I'm a teacher";

        public void speak()
            System.out.println(s);
        

    


怎么用?

people.new 内部类() 来创建内部类

package com.test;

import org.junit.Test;

public class test01 

    //测试内部类
    @Test
    public void test()
        People people = new People();
        people.speak();
        people.new teacher().speak();
    


内部类的作用?

  1. 内部类方法可以访问该类定义在作用域内的所有数据,包括private修饰的

  2. 内部类可以对同一个包的其他类隐藏起来

  3. 内部类可以解决java单继承的缺陷

  4. 当我们想定义一个回调函数却又不想写大量代码的时候,可以写匿名内部类

内部类可以对同一个包的其他类隐藏起来

有这么一个例子,当有接口需要去实现,我们又不想让其他类知道怎么实现这个接口,

我们就可以使用内部类。然后进行向上转型 让接口类型只想 实现类型,这样实现类就可以实现保密了

ISon接口

package com.test;

public interface ISon 
    public void speak();

    public void eat();


Father类

package com.test;

public class Father 
    public void say()
        System.out.println("I'm father");
    

    private class Son implements ISon
        @Override
        public void eat()
            System.out.println("我在吃饭");
        

        @Override
        public void speak()
            System.out.println("父慈子孝");
        
    

    public Son getSon()
        return new Son();
    



  //测试内部类作用
    @Test
    public void test01()
        Father father = new Father();
        father.say();

         ISon son = father.getSon();
         son.eat();
         son.speak();
    

如上述的例子,我们把ISon实现类的实现类放入Father类的内部,并把它设置为private,然后通过一个封装方法getSon()来获取

Ison的实现类,并且由于Son不能被其他类访问,所以我们利用ISon只想ISon的实现类,进行向上转型

内部类可以解决java单继承的缺陷

众所周知,java只能单继承一个类,而我们通常要实现多继承的时候,是用过接口实现的,但是接口有一个地方比较麻烦,就是

要实现接口接口中的所有方法,有的时候会觉得有一点繁琐,而内部类就可以实现再java之中的“多继承”

Example1

package com.test;

public class Example1 
    public void name()
        System.out.println("我是Example1");
    


Example2

package com.test;

public class Example2 
    public void name()
        System.out.println("我是Example2");
    


MultiExtend

package com.test;

public class MultiExtend 

    class One extends Example1

    

    class Two extends Example2

    


测试

 //测试内部类作用 多继承
    @Test
    public void test02()
        MultiExtend multiExtend = new MultiExtend();
        multiExtend.new One().name();
        multiExtend.new Two().name();
    

如上所述,我们在MultiExtend类之中有两个内部类,分别继承了Example1和Example2,这样MultiExtend间接的多继承了Exa2ple1

和Example2

以上是关于java内部类的主要内容,如果未能解决你的问题,请参考以下文章

Java内部类

java中关于内部类和匿名内部类

JAVA基础之包装类,static,final,abstract ,接口 和 内部类

从零开始的Java开发1-4-4 多态与内部类:接口:定义并测试抽象方法常量默认方法静态方法重名默认方法和重名静态方法的解决方案继承;成员静态方法匿名 内部类

Java内部类

java教程:什么是匿名内部类?怎样创建匿名内部类?