`
passion99
  • 浏览: 12746 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java访问控制权限protected和default

    博客分类:
  • JAVA
 
阅读更多

Java基础之访问控制权限protected和default

包和类、接口的访问权限控制比较简单,在此不讨论。仅记录一下protected和default修饰的成员变量和成员方法的访问权限控制问题。

假设定义了一个顶层类:

 package com.zjc;
public class FatherClass{
    //保护类变量
    protected int protected_int;
    //保护类方法
    protected void display_protected(){
        System.out.println("这是保护类的方法");
    }
    //默认类变量
    int default_int;
    //默认类方法
    void display(){
        System.out.println("这是默认友好类的方法");
    }
    public int getProtected_int() {
        return protected_int;
    }
    public void setProtected_int(int protected_int) {
        this.protected_int = protected_int;
    }
    public int getDefault_int() {
        return default_int;
    }
    public void setDefault_int(int default_int) {
        this.default_int = default_int;
    }
}

主要分两种情况:

一、引用FatherClass的类与之在同一包下

1、FatherClass类的子类及其子类将继承protected、default型变量和方法;

2、FatherClass类、子类及其子类创建的实例可以直接访问protected、default型变量和方法。

 

//子类SonClass

package com.zjc;
public class SonClass extends FatherClass{
    public void sy(){
        //1、在同一个包中,子类体内部,保护和默认成员均可见。
      this.default_int = 1;
      this.protected_int = 2;
      this.display();
      this.display_protected();
    }
}

 

package com.zjc;

public class TestDefaultProtected {
    public static void main(String[] args) {
        // 创建实例对象
        FatherClass ft = new FatherClass();
        SonClass st = new SonClass();
        //2、在同一个包中,顶层类、子类创建的实例对象中保护型和默认型变量和方法均可见
        ft.default_int = 1;
        ft.protected_int = 2;
        ft.display();
        ft.display_protected();
        st.default_int = 1;
        st.protected_int = 2;
        st.display();
        st.display_protected();
    }

}

 

二、引用FatherClass的类与之不在同一包下   

1、子类及其子类将继承protected成员,不继承default成员;

2、FatherClass类、子类及其子类创建的实例均不能直接访问protected、default型变量和方法(子类体内创建实例除外);

3、可以通过Father类的public方法操纵protected/private/default变量。

//子类SonClassOnDiffPackage

package com.caimeng;

import com.zjc.FatherClass;
import com.zjc.SonClass;

class SonClassOnDiffPackage extends FatherClass{
    public void test(){
    //3、不同包下,FatherClass类的子类内,继承了保护型变量和方法、不继承默认型变量和方法
     this.protected_int = 2;
     this.display_protected();
     SonClassOnDiffPackage temp = new SonClassOnDiffPackage();

     temp.protected_int =3;    //5、子类体内创建的自身对象可以直接访问保护型变量
    }
}

 

//测试实例对象

public class UseDefaultProtected  {
    public static void main(String[] args) {
        FatherClass ft = new FatherClass();
        SonClassOnDiffPackage sd = new SonClassOnDiffPackage();
        SonClass sc = new SonClass();
        //4、在不同包中,FatherClass类、SonClassOnDiffPackage类、SonClass类
        //的实例对象中,保护型和默认型变量和方法均不能直接访问
        //6、可以通过Father类的public方法操纵protected/private/default变量
        ft.protected_int = 1; //编译错误
        sd.protected_int = 1; //编译错误
        sc.protected_int = 1; //编译错误
    }

}

结论:

1、在同一包中,protected和default修饰效果相同;即在子类均继承这些成员,顶层类、子类创建的实例

      均可以直接访问这些成员;

2、而在不同包下,子类只继承了protected成员,可以在子类体内直接访问这些成员,但顶层类、子类创建的实例均不能直接访问这些成员;

3、对于不同包下protected的访问权限,记住Java7规范中的一个原则即可

A protected member or constructor of an object may be accessed from outside
the package in which it is declared only by code that is responsible for the
implementation of that object.

也就是,只能在类的实现体内访问,类创建的实例内是不可达的。

分享到:
评论
1 楼 passion99 2016-11-06  
本人抛砖引玉,欢迎各位Java爱好者根据自己的理解各抒己见!

相关推荐

    java中protected的权限

    在Java编程语言中,访问修饰符是控制类成员(如变量、方法和构造器)访问权限的关键要素。`protected`是Java中四种访问权限之一,它在类的封装和继承中扮演着重要的角色。本篇文章将深入探讨`protected`关键字的含义...

    Java访问权限控制源代码

    在Java编程语言中,访问权限控制是核心概念之一,它决定了类、接口、方法和变量的可见性。这个概念对于确保代码的封装性、安全性和维护性至关重要。本篇文章将深入探讨Java中的访问权限控制,并结合提供的源代码进行...

    用java代码来解析private、public、default、protected的权限问题

    在Java编程语言中,访问修饰符是控制类成员(如变量、方法和构造器)访问权限的关键要素。本文将深入探讨`private`、`public`、`default`(默认)和`protected`这四种访问权限,并通过代码示例来解析它们在实际编程...

    Java访问权限控制源代码.zip

    在Java编程语言中,访问权限控制是至关重要的一个概念,它确保了代码的封装性和安全性。这个"Java访问权限控制源代码.zip"压缩包可能包含了示例代码,用于演示Java中的不同访问修饰符如何工作以及如何实施访问控制。...

    Java 中的访问权限控制

    在Java编程语言中,访问权限控制是至关重要的概念,它决定了类、接口、字段和方法的可见性。这种控制机制确保了代码的封装性和安全性,防止未经授权的访问和操作。以下是对这一主题的详细探讨: 1. 访问修饰符: ...

    【IT十八掌徐培成】Java基础第07天-04.权限-public-private-protected-default.zip

    权限-public-private-protected-default”深入讲解了Java中的四种主要访问权限:public、private、protected以及默认(无修饰符)。这四个修饰符对于理解和编写高质量的Java代码至关重要。 1. **public**:公共访问...

    Java开发小案例之权限控制

    压缩包中的"实例83 访问权限控制"可能包含一个实际的Java程序,演示了如何使用不同访问修饰符创建类、方法和变量,并展示了它们的访问效果。通过运行和分析这个案例,你可以更好地理解Java访问控制的实际应用。 ...

    Java零基础-访问控制权限修饰符.md

    本文旨在全面解析Java中的访问控制权限修饰符,具体涉及`public`、`private`、`protected`及默认访问级别(即不使用任何显式修饰符时的情况)。通过本篇文章的学习,读者将能够深入理解这些修饰符的具体作用与应用...

    java中public、protected、默认、private关键字

    Java 中有四种访问修饰符:public、protected、默认(default)和 private。这四种修饰符的作用域从大到小依次降低。 1. public 修饰符 public 修饰符是最宽松的访问修饰符,它允许从任何地方访问修饰的成员,...

    理解java中的类的各种权限修饰符

    本文将详细探讨Java中的五种权限修饰符:`public`、`protected`、`default`(也称为包访问权限)、`private`以及`static`修饰类的情况,并通过实例来展示这些修饰符的具体应用。 #### 1. Public - **概述**: - `...

    java 权限控制轻量版

    Java提供了访问控制修饰符(public, private, protected, default),用以限制类、方法和变量的访问级别。这有助于确保代码的封装性和安全性。 2. **角色-基于的访问控制(RBAC)**: 在轻量级权限控制中,角色-...

    基于Java的实例源码-访问权限控制源代码.zip

    在Java编程语言中,访问权限控制是至关重要的一个部分,它确保了代码的封装性和安全性。这个"基于Java的实例源码-访问权限控制源代码.zip"文件很可能包含了一些示例,展示了如何在Java中使用不同的访问修饰符来管理...

    Java4Android 27_包和访问权限(三)

    在Java编程语言中,包(Package)是一种组织类和接口的方式,它提供了命名空间和访问控制的功能。包的使用能够避免命名冲突,并帮助我们...在实际开发中,合理规划包结构和控制访问权限是优秀代码实践的重要组成部分。

    java之jvm学习笔记十而(访问控制器的栈校验机制)

    在Java中,类、接口、字段和方法都有各自的访问修饰符,如public、private、protected和default(无修饰符)。这些修饰符定义了它们的可见性和可访问性,以实现封装和保护。访问控制器确保了只有被允许的访问级别...

    继承和接口和java访问权限修饰符总结.doc

    常见的访问权限修饰符有:public、private、protected 和 default。 五、static 修饰符 static 修饰符是指在 Java 中用来修饰类、方法和变量的关键字。static 修饰符可以使得方法或变量在类加载时就被初始化,并且...

    Java修饰符使用整理(含实例)

    Java 修饰符是 Java 语言中的一种基本语法元素,用于控制访问权限、继承关系、抽象类和静态成员变量等方面。Java 修饰符可以分为两大类:访问修饰符和非访问修饰符。访问修饰符包括 public、protected、default 和 ...

    java访问权限修饰符[参考].pdf

    Java语言提供了四种不同的访问权限修饰符:`public`、`protected`、`default`(也称为包私有或包默认)以及`private`。这些修饰符用于控制类、方法、变量等成员的可见性和可访问性。 - **public**:公共访问级别,...

    java四种访问权限实例分析

    Java 中一共有四种访问权限控制,其权限控制的大小情况是这样的:public > protected > default(包访问权限)> private。 1. public 访问权限:所修饰的类、变量、方法,在内外包均具有访问权限。 public 权限是...

    java访问权限修饰符public.doc

    Java 作为一种面向对象的编程语言,提供了四种访问权限修饰符,它们分别是 `public`、`protected`、`default`(通常称为“包访问”或“友好访问”,文中提到的 `friendly` 实际上就是 `default`)和 `private`。...

    Java基础权限控制与final,内部类

    在Java编程中,权限控制是一个重要的话题,它涉及到变量、方法和类的访问权限,以确保代码的封装性和安全性。Java使用不同的权限修饰符来控制成员的可访问性。另一个重要的概念是final关键字,它用于声明类、方法和...

Global site tag (gtag.js) - Google Analytics