内部类的作用

一、 作用

  1. 内部类可以很好的实现隐藏,一般的非内部类,是不允许有 private 与protected权限的,但内部类可以加上这几个修饰词。

  2. 内部类拥有外围类的所有元素的访问权限,可以直接访问外部类的私有属性及方法

  3. 可以间接实现多重继承,多个内部类继承不同的类形成了一个类中复用了多个类的方法。

  4. 可以避免在继承一个父类和一个接口的时候导致的方法重复定义。

二、详解

1.实现隐藏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Example {

//private 修饰词

private class InsideClass implements InterfaceTest

{

public void test()

{

System.out.println("这是一个测试");

}

}

}

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

1
2
3
4
5
6
7
8
public class TagBean {
private String name="lwen";
private class InTest{
public InTest(){
System.out.println(name);
}
}
}

3.可以间接实现多重继承

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

1
2
3
4
5
6
7
8
class Test{
class A extends C {

}
class B extends D{

}
}

四、 避免同名方法的冲突。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public interface Incrementable {
void increment();
}

public class Test{
public void increment() {
System.out.println("Other increment()");
}
}

public class Callee2 extends MyIncrement implements Incrementable {
public void increment() {

}
}

increment()这个方法是属于覆盖MyIncrement这里的方法呢?还是Incrementable这里的方法。我怎么能调到MyIncrement这里的方法?显然这是重复定义。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2015 - 2021 昨夜凛雨 All Rights Reserved.

UV : | PV :