---
schema_version: "1"
id: 9a4586d9ff9999a0ce48c5b441a99c1544716538a09f1c2a19d93a35b7bd7fa9
title: Apex Code Items That Aren’t Versioned
collection: legacydeveloper
version: current
locale: en-us
portal_url: https://docs.salesforce.com/legacydeveloper/current/en-us/apexcode/apex_manpkgs_behavior_not_versioned.md
canonical_url: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_manpkgs_behavior_not_versioned.htm
source_site: developer.salesforce.com
content_type: documentation
content_hash: 6eaf1be711516d63953839248a3a1b8d95e2ee34c39ff8c744233ea4498beec8
description: Some Apex items in managed packages can’t be versioned. The changes that you make to these items are reflected across all package versions. Additionally, there are limitations to the changes that you can make to some of these items when they are used in Apex code in managed packages.
---
# Apex Code Items That Aren’t Versioned

Some Apex items in managed packages can’t be versioned. The changes that you make to these items are reflected across all package versions. Additionally, there are limitations to the changes that you can make to some of these items when they are used in Apex code in managed packages.

As a package developer, you can add or remove these items from Apex in manage packages.

- @Future
- @IsTest
- with sharing
- without sharing
- transient

You can make limited changes to these Apex items in managed packages.

- private—can be changed to global
- protected—can be changed to global
- public—can be changed to global
- abstract—can be changed to virtual but can’t be removed
- final—can be removed but can’t be added

You can’t remove or change these Apex items in managed packages.

- global
- virtual

You can add the webservice keyword, but once it has been added, it can’t be removed.

![Note](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/images/icon_note.png)

#### Note

You can’t deprecate webservice methods or variables in managed package code.

If a package upgrade includes an explicit global constructor for a released global class that previously only had an implicit constructor, then the new, explicit constructor will be called from the subscriber. Also, you can’t reduce the access modifier on the default constructor on a released global class in a package. See [Best Practices for Using Global Apex in Managed Packages](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_manpkgs_global_best_practices.htm "As an independent software vendor (ISV) developer, understand when and how to use global Apex in managed packages. Learn design patterns that maximize flexibility and comply with the strict manageability rules applied to global Apex after your managed package’s release. By following these best practices, you can improve the stability and maintainability of your API.").