- 听面试过的朋友说,黑马内部类比较难,问到的时候不知道怎么回答才好。所以我就把内部类的有关知识整理一下,以便面试的时候好知道该怎么做。
- 1、定义:顾名思义,内部类就是在类的内部定义一个类,这种特殊的类可以声明成public或者private,对其访问的限制与成员变量和成员方法完全相同。它的优点就是可以方便的访问外部类的私有属性,缺点就是打乱了一个类的基本结构。下面就是一个内部类的例子:
- class Outer{
- private String info=“hello world”;
- class Inner{
- public void print(){
- System.out.println(info);
- }
-
- };
- public void fun(){
- new Inner().print();
- }
- }
- public class Test{
- public static void main(String args[]){
- new Outer().fun();
- }
- }
- 2、使用static定义内部类
- 使用static也可以声明内部类,不过使用static声明的内部类就变成了外部类,此时不能访问非static的外部类属性。
- class Outer{
- private static String info=“hello world”;
- static class Inner{
- public void print(){
- System.out.println(info);
- }
-
- };
- };
- public class Test{
- public static void main(String args[]){
- new Outer.Inner().print();
- }
- }
- 3、在外部访问内部类
- 一个内部类除了可以通过外部类访问,也可以直接在其他类中进行调用,
- class Outer{
- private String info=“hello world”;
- class Inner{
- public void print(){
- System.out.println(info);
- }
-
- };
- };
- public class Test{
- public static void main(String args[]){
- Outer out=new Outer();
- Outer.Inner in=out.new Inner();
- on.print();
- }
- }
- 4、在方法中定义内部类
- 也可以在方法中定义一个内部类,但是此时内部类不能直接访问方法中的参数,如果方法中的参数要想被内部类访问,则参数前必须加上final。
- class Outer{
- private String info="hello";
- public void fun(final int temp){
- class Inner{
- public void print(){
- System.out.println("类中的属性:"+info);
- System.out.println("类中的属性:"+temp);
- }
- };
- new Inner().print();
- }
- };
- public class Test{
- public static void main(String args[]){
- new Outer().fun(30);
- }
- }
-
- 5、匿名内部类
- 匿名内部类是指没有一个具体名称的内,此概念在接口和抽象类的应用上发展起来的。一下就是一个匿名内部类的使用例子。
- interface A{
- public void printInfo();
- }
- class X{
- public void fun1(){
- this.fun2(new A(){
- public void printInfo(){
- System.out.pritnln("hello");
- }
- });
- }
- public void fun2(A a){
- a.prinInfo();
- }
- }
- public class InnerDemo{
- public static void main(String args[]){
- new X().fun1();
- }
- }
复制代码 |