美文网首页
java中的四种内部类

java中的四种内部类

作者: 刘岳森 | 来源:发表于2017-10-13 00:43 被阅读43次

成员内部类

  • 成员内部类作为外部类的成员,能够无条件访问外部类的变量,即使是private的,但是外部类不能直接访问成员内部类中的变量,只能通过创建一个对象的方法去访问。
  • 成员内部类在构造之前会先构造外部类
class Outter {
    private int age = 12;
      
    class Inner {
        private int age = 13;
        public void print() {
            int age = 14;
            System.out.println("局部变量:" + age);
            System.out.println("内部类变量:" + this.age);
            System.out.println("外部类变量:" + Outter.this.age);
        }
    }
}
  
public class test1 {
    public static void main(String[] args) {
        Outter out = new Outter();
        Outter.Inner in = out.new Inner();
        in.print();
    }
}

局部内部类

  • 定义在方法中或者一个作用域中的内部类,他的访问权限仅限于他的作用域。
  • 局部内部类所在的函数的参数类型只能是final类型的。
class Outter {
 
    private int age = 12;
      
    public void Print(final int x) {    //这里局部变量x必须设置为final类型!
        class Inner {
            public void inPrint() {
                System.out.println(x);
                System.out.println(age);
            }
        }
        new Inner().inPrint();
    }
      
 
}
  
public class test1 {
    public static void main(String[] args) {
        Outter out = new Outter();
        out.Print(10);
    }
}

静态嵌套类

  • 在内部类的前面加上static
  • 这样的内部类相当于是和外部类没有什么关系的,

class Outter {
    private static int age = 12;
    static class Inner {
        public void print() {
            System.out.println(age);
        }
    }
}
  
public class test1 {
    public static void main(String[] args) {
        Outter.Inner in = new Outter.Inner();
        in.print();
    }
}

匿名内部类

public abstract class Bird {  
    private String name;  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
      
    public abstract int fly();  
}  
  
public class Test {  
      
    public void test(Bird bird){  
        System.out.println(bird.getName() + "能够飞 " + bird.fly() + "米");  
    }  
      
    public static void main(String[] args) {  
        Test test = new Test();  
        test.test(new Bird() {  
              
            public int fly() {  
                return 10000;  
            }  
              
            public String getName() {  
                return "大雁";  
            }  
        });  
    }  
}  

如上图例子,匿名内部类的父类是一个抽象的类或者接口,而当子类去实现这个父类的时候,new的是这个父类的名字,这个子类的名字根本就没有出现,所以这也是匿名内部类的来由。
在匿名内部类中必须实现抽象的函数,可以重写父类的函数。

public class OutClass {  
    public InnerClass getInnerClass(final int age,final String name){  
        return new InnerClass() {  
            int age_ ;  
            String name_;  
            //构造代码块完成初始化工作  
            {  
                if(0 < age && age < 200){  
                    age_ = age;  
                    name_ = name;  
                }  
            }  
            public String getName() {  
                return name_;  
            }  
              
            public int getAge() {  
                return age_;  
            }  
        };  
    }  

在匿名内部类中虽然没有构造函数,但是可以通过构造代码块完成工作

  • 匿名内部类不能有访问修饰符以及static修饰
  • 匿名内部类是唯一一种没有构造函数的类,所以匿名内部类的使用范围非常有限,大部分匿名内部类用于接口回调。
  • 匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写。
  • 匿名内部类为局部内部类,几步内部类的所有的约束都对匿名内部类生效。
  • 匿名内部类之所以叫匿名内部类是因为他是在你的类的函数中new了一个新的类。

相关文章

  • Java中的内部类的种类及其使用

    Java中的内部类共分为四种: 静态内部类static inner class (also called nest...

  • Java 内部类、静态内部类、方法内部类(未完待续)

    内部类 什么是内部类?内部类其实就是在一个类中创建的类。内部类有四种: 成员内部类 静态内部类 局部内部类 匿名内...

  • java中的内部类

    java中内部类非为四种: 成员内部类: 和类的成员在同一级 静态内部类: 和成员内部类的区别是使用了static...

  • Java内部类

    Java中,可以将一个类定义到另一个类或者方法中,这样的类被称为内部类。 四种内部类 一、成员内部类 成员内部类是...

  • Java 内部类

    java内部类分为成员内部类、局部内部类、匿名内部类、静态内部类四种。 1.成员内部类 内部类以外部类成员形式定义...

  • Java 中的方法内部类

    Java 中的方法内部类 方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内...

  • Java自学-接口与继承 内部类

    Java 内部类 内部类分为四种: 非静态内部类静态内部类匿名类本地类 步骤 1 : 非静态内部类 非静态内部类 ...

  • Java内部类

    Java 内部类 分四种:成员内部类、局部内部类、静态内部类和匿名内部类。 1、成员内部类: 即作为外部类的一个成...

  • 内部类

    内部类分为四种: 1.成员内部类 2.局部内部类 3.静态内部类 4.匿名内部类 1.成员内部类 Java cod...

  • java 内部类

    一般有四种内部类的使用方式: 嵌套的内部类 方法内的内部类 静态内部类 匿名内部类 什么时候用内部类: 有时候明显...

网友评论

      本文标题:java中的四种内部类

      本文链接:https://www.haomeiwen.com/subject/phwoyxtx.html