/*
 * Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
 */

package cases.nestedClasses

public abstract class PublicAbstractClass {
    protected object ObjProtected

    protected class NestedProtected

    protected interface NestedProtectedInterface

    protected inner class InnerProtected
}

