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内部类的主要内容,如果未能解决你的问题,请参考以下文章