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();
内部类的作用?
-
内部类方法可以访问该类定义在作用域内的所有数据,包括private修饰的
-
内部类可以对同一个包的其他类隐藏起来
-
内部类可以解决java单继承的缺陷
-
当我们想定义一个回调函数却又不想写大量代码的时候,可以写匿名内部类
内部类可以对同一个包的其他类隐藏起来
有这么一个例子,当有接口需要去实现,我们又不想让其他类知道怎么实现这个接口,
我们就可以使用内部类。然后进行向上转型 让接口类型只想 实现类型,这样实现类就可以实现保密了
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基础之包装类,static,final,abstract ,接口 和 内部类
从零开始的Java开发1-4-4 多态与内部类:接口:定义并测试抽象方法常量默认方法静态方法重名默认方法和重名静态方法的解决方案继承;成员静态方法匿名 内部类