美文网首页
java——内部类

java——内部类

作者: 打死你的小乌龟 | 来源:发表于2018-08-29 23:58 被阅读0次

内部类

定义:

内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。

为什么需要内部类?

典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建
其的外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。

使用内部类最吸引人的原因是:

每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。

从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。

根据位置的不同,Java中的内部类分为四种:

静态内部类。

1、使用static修饰,声明在类体中。
2、静态内部类中可以访问外部类的静态成员。

class Outer {
    private static int num = 6;

    static class Inner {
        void show() {
            System.out.println(num);
        }
    }
}

public class Test {
    public static void main(String[] args) {

        Outer.Inner inner = new Outer.Inner();
        inner.show();
    }
}
成员内部类。

1、声明在类体中,不使用static,具有类的成员特征,也就是,必须有类的实例才能创建内部类实例。
2、内部类实例可以访问共享外部类的成员变量(很常用)。
3、如:链表的节点就可以定义为内部类。

class Outer {
    private int num = 6;

    public void test() {
        class Inner {
            void show() {
                System.out.println(num);
            }
        }
        Inner in = new Inner();
        in.show();
    }
}

public class Test {
    public static void main(String[] args) {

        Outer out = new Outer();
        out.test();
    }
}
局部内部类

把类声明在方法中,就是局部内部类,作用域。
类似局部变量(很少见)。

匿名内部类。

1、匿名类,非常常见,可以写在任何地方,就像一般的语句。
2、语法更象是创建对象:Date d = new Date(){//...};
3、匿名类是对原类的一个继承,同时创建了实例,{} 就是继承以后的类体。类体中可使用所有类的语法。
4、匿名类不能写构造器。
5、匿名类可以从抽象类或者接口继承,必须提供抽象方法的实现。
任何内部类都编译成独立的class文件。最大的作用:封装!

interface Animal {
    void sleep();
}

public class Test {
    public static void main(String[] args) {
        //匿名内部类作为参数传递给sleep方法
        animalS(new Animal() {
            public void sleep() {
                System.out.println("睡觉");
            }
        });
    }
    public static void animalS(Animal animal) {
        animal.sleep();
    }
}

如果想通过外部类访问内部类需要外部类对象创建内部类对象:

外名.内名 变量名 = new 外名.内名 ();
内部类访问特点:

1,内部类可以直接访问外部类中的成员。
2,外部类要访问内部类,必须建立内部类的对象。

匿名内部类。就是内部类的简写格式。

必须有前提:
内部类必须继承或者实现一个外部类或者接口。

匿名内部类:其实就是一个匿名子类对象。

格式:new 父类or接口(){子类内容}

匿名对象:没有名字的对象
使用方式1.当对象的方法只调用一次时
使用方式2.匿名对象可以当作实例传递

相关文章

  • Java 中的方法内部类

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

  • PHP转JAVA的记录

    Java 数组 内部类 内部类的创建:内部类可以对包内其他类隐藏想实现一个接口时, 不想新建类文件 内部类可以访问...

  • Java内部类

    Java内部类,简单来说就是将一个类定义在另一个类或者方法里面,主要分为成员内部类,局部内部类,匿名内部类和静态内...

  • Java内部类

    Java内部类 大纲: java内部类有什么特点?为什么需要内部类? 非静态内部类持有外部类的引用 内部类的分类。...

  • 内部类

    内部类可以分为:非静态内部类;静态内部类;匿名内部类。 一、内部类 首先要说,Java为什么要使用内部类?java...

  • Java静态内部类

    Java静态内部类 博客分类: java 两种内部类 Java的内部类有两种,一种是静态内部类,另一种是普通内部类...

  • Kotlin内联类、内部类、嵌套类

    Kotlin内联类、内部类、嵌套类 在开始介绍Kotlin内联类、内部类、嵌套类之前,先简要回顾一下java中的内...

  • JavaSE基础知识学习-----内部类

    内部类 类的五个成分:属性,方法,构造器,代码块,内部类。什么是内部类?在java中,允许一个类定义在另一个类的内...

  • Java 内部类和泛型的理解

    Java 内部类 Java非静态内部类持有对外部类的引用,可以访问外部类的状态使用方法 OuterClass.th...

  • kotlin之内部类,匿名内部类与伴生对象

    个人博客:haichenyi.com。感谢关注 内部类   kotlin的内部类与java的内部类有点不同java...

网友评论

      本文标题:java——内部类

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