您的位置:首页 > 编程语言 > Java开发

关于内部类的一些总结。

2017-10-15 23:18 225 查看
http://andy136566.iteye.com/blog/1061951/ 原文在这里,但是因为排版问题,自己在这里修改并完善。

首先介绍内部类有什么用,这是最重要的,毕竟知道应用场景之后,以后遇到可以使用。

1.内部类可以很好的实现隐藏(一般的非内部类,是不允许有 private 与protected权限的,但静态内部类、成员内部类可以)

2.内部类拥有外部类的所有元素的访问权限

3.可以实现多重继承

4.可以避免修改接口而实现同一个类中两种同名方法的调用。

以下为例子:

1、实现隐藏

public class Outter {

private class Inner{

}
private static class Inner2{

}
}


2、可以无条件地访问外围类的所有元素

public class Outter {

private int num;

private class Inner{
public void test(){
System.out.println(num);
}
}

}


3.可以实现多重继承

这个特点非常重要,个人认为它是内部类存在的最大理由之一。正是由于他的存在使得Java的继承机制更加完善。大家都知道Java只能继承一个类,它的多重继承在我们没有学习内部类之前是用接口来实现的。但使用接口有时候有很多不方便的地方。比如我们实现一个接口就必须实现它里面的所有方法。而有了内部类就不一样了,它可以使我们的类通过内部类继承不同的类以达到伪多重继承。

类一
public class Example1 {

public String name()
{
return "ghy";
}
}

类二
public class Example2 {

public int age()
{
return 25;
}
}

类三
public class Outter{

private class Inner1 extends Example1{

public String name(){
return super.name();
}
}

private class Inner2 extends Example2{
public int age(){
return super.age();
}
}

public String name(){
return new Inner1().name();
}

public int age(){
return new Inner2().age();
}

}


四、 避免修改接口而实现同一个类中两种同名方法的调用

大家假想一下如果,你的类要继承一个类,还要实现一个接口,可是你发觉你继承的类和接口里面有两个同名的方法怎么办?你怎么区分它们?这就需要我们的内部类了。

public interface MyInterface {
public void test();
}

public abstract class MyAbstract {
public abstract void test();
}

public class MyTest extends MyAbstract implements MyInterface{
public void test() {
}
}


想问一下大家test()这个方法是属于覆盖MyAbstract这里的方法呢?还是MyInterface这里的方法。显然这是不好区分的。而我们如果用内部类就很好解决这一问题了。

public class MyTest extends MyAbstract {
@Override
public void test() {
}

public class Inner implements MyInterface{
@Override
public void test() {
//do something
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java