`
837062099
  • 浏览: 112647 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java中protected的权限

阅读更多
首先说明:父类和之类在不同包中,那么父类中的default和private方法都不能被子类继承。

java中protected

1. protected 访问控制符能被用于方法和成员变量。
    2. 声明为protected的方法和成员变量能被同一个包里的所有类所访问,就像默认修饰符package一样。
    3. 能被该类的子类所访问,子类可以和父类不在一个包中。
    这样,当你想让一个类中的某个方法或成员变量在包中都可见,而且其子类也能访问(子类有可能和父类不在同一个包中)但又不想让所有类都可以访问该类时,就可以用protected修饰符。
    可访问性:
    public > protected > package >private

    注意:
    4. But a subclass in another package can access the protected members in the super-class via only the references of subclass or its subclasses. A subclass in the same package doesn’t have this restriction. This ensures that classes from other packages are accessing only the members that are part of their inheritance hierarchy.
   
    下面的例子可以说明上述几点:(特别注意第4点)
    我们将创建一个父类Bird.java,放在birdpack包中,父类中有一个protected int的成员变量nFeathers;
    再分别创建4个Bird类的子类Duck1.java,Duck2.java,Duck3.java,Swan.java,放在duckpack包中,通过在每个子类中调用nFeathers的不同方法说明上述几点


下面的程序并不用于运行,因为访问控制在编译期间就要确定,我们只需编译下述文件,看是否能通过。在编译下述文件前,先想想能不能编译通过?

//Bird.java------------------------------
package birdpack;

public class Bird{
 protected int nFeathers;
 
}

//Duck1.java-----------------------------
package duckpack;

import birdpack.Bird;

public class Duck1 extends Bird{
 public void setn(int duck1n){
  //在子类中直接访问父类中的protected变量
  nFeathers=duck1n;
 }
}
//Duck2.java------------------------------ 
package duckpack;

import birdpack.Bird;

public class Duck2 extends Bird{

 public void construct(int newduck2){
  Duck2 d2 = new Duck2();
  //在子类中通过子类的对象访问父类中的protected变量
  d2.nFeathers=newduck2;
  Bird d = new Duck2();
  d2.nFeathers=newduck2;//(编译错误)
  //父类引用指向之类对象是无法调用protected变量的。
 }
}

//Duck3.java------------------------------
package duckpack;

import birdpack.Bird;

public class Duck3 extends Bird{

 public void construct(int newduck3){
  Bird b = new Bird();
  //子类中用父类对象反而不能访问父类中的protected变量
  b.nFeathers=newduck3;
 }
}

//Swan.java--------------------------------
package duckpack;

import birdpack.Bird;

public class Swan extends Bird{

 public void construct(int swan){
  Duck1 d1 = new Duck1();
  //子类中用另外一个子类的对象也不能访问父类中的protected变量
  d1.nFeathers=swan;
 }
}


编译上述几个文件,后2个不能通过。编译器提示:
" nFeathers has protected access in birdpack.Bird"。


第4点说明,就算在子类中,也只能通过子类(或子类的子类)的引用来访问父类中的protected方法和成员变量.
在Duck3和Swan两个子类中,直接通过父类和另一个子类来访问父类中的protected方法和成员变量就不行.
但是,如果子类Duck1重写了protected变量或方法,那么Swan.java中d1对象可以访问该变量或方法



附:编译技巧
当编译含有包声明的源文件时,使用 -d 选项会带来很多方便,它能保证编译后的class文件存放在正确的目录路径下。
我们可以把上述5个文件都放在protectedtest目录下,然后用 -d 选项去编译:
javac -d . Bird.java
javac -d . Duck1.java
.....
其中.表示以当前目录创建包结构的目录层次。编译成功后,会在protectedtest下生成2个目录:birdpack和duckpack,里面是生成的class文件。
分享到:

相关推荐

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

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

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

    Java 中的访问修饰符是 Java 语言中一种基本概念,用于控制类、方法、变量、构造方法等成员的访问权限。 Java 中有四种访问修饰符:public、protected、默认(default)和 private。这四种修饰符的作用域从大到小...

    java权限实现实例

    在Java编程语言中,权限管理是系统安全的重要组成部分,它涉及到如何控制不同用户或程序对资源的访问。本文将深入探讨Java中的权限实现,并结合一个数据库设计的实例,阐述其思路。 首先,Java的安全模型是基于类...

    Java访问权限控制源代码

    在Java编程语言中,访问权限控制是至关重要的一个部分,它确保了代码的封装性和安全性。本主题将深入探讨Java中的访问修饰符及其在源代码中的应用。 首先,Java提供了四种基本的访问权限控制修饰符: 1. **public*...

    Java里的权限实现

    在Java编程语言中,权限控制是确保程序安全性和完整性的重要机制。Java的权限实现主要依赖于访问修饰符、包机制、类加载器以及安全管理器。本文将深入探讨这些概念,帮助开发者理解如何在Java中有效地实施权限管理。...

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

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

    java权限设计

    在Java编程语言中,权限设计是构建安全、可维护的应用程序的关键组成部分。权限设计涉及到对系统资源的访问控制,确保只有授权的用户或程序才能执行特定的操作。这通常通过使用角色-based访问控制(RBAC)、访问控制...

    Java类protected继承链访问控制机制研究.pdf

    Java类的访问控制机制是面向对象编程中的一个重要概念,它定义了类及其成员的可见性和访问权限。本文主要探讨了Java中的`protected`继承链访问控制机制,这是Java封装特性的一个重要组成部分。下面将详细介绍这个...

    java 访问权限验证

    在Java编程语言中,访问权限控制是至关重要的一个部分,它确保了代码的封装性和安全性。本文将深入探讨Java中的访问权限验证,包括其概念、种类以及如何在实践中应用。 **一、访问权限概述** Java提供了四种不同的...

    java访问权限修饰符public.doc

    在 Java 语言中,访问权限修饰符是指用来限定类、成员变量和方法的可访问范围的关键字。访问权限修饰符分为四种:public、protected、friendly 和 private。每种修饰符都有其特定的访问权限和使用场景。 一、public...

    Java开发小案例之权限控制

    在Java编程语言中,权限控制是一项至关重要的任务,它确保了代码的安全性和模块之间的隔离性。这个"Java开发小案例之权限控制"旨在帮助初学者理解如何在Java中实现访问控制,这对于任何Java开发者来说都是必备的基础...

    浅析Java中的访问权限控制Java开发Java经验技巧共

    在Java编程语言中,访问权限控制是至关重要的一个概念,它确保了代码的封装性和安全性。本文将深入探讨Java中的访问权限控制,以及其在实际开发中的应用和重要性。 首先,Java提供了四种不同的访问级别,分别是:...

    关于Java访问权限表的一个总结

    在Java编程语言中,访问权限控制是至关重要的,它决定了类、接口、字段以及方法的可见性和可访问性。理解Java的访问权限表对于编写健壮、安全且易于维护的代码至关重要。以下是对这一主题的详细说明: 1. **公共...

    java 通用权限管理

    在Java中,权限管理通常涉及到身份验证(Authentication)和授权(Authorization)两个核心概念。 身份验证是确认用户身份的过程,例如通过用户名和密码登录。一旦用户身份得到验证,系统便能确定用户是谁。在Java...

    JIFANG.rar_java 权限_struts_权限

    在Java中,权限管理主要通过访问控制修饰符(如public, private, protected, package-private)和角色-基于的访问控制(RBAC)来实现。访问控制修饰符决定了类、方法和变量的可见性,而RBAC则允许系统管理员定义不同...

    Java 中的访问权限控制

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

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

    在Java编程语言中,访问权限控制是面向对象编程的一个核心特性,它确保了代码的安全性和封装性。这个压缩包“基于Java的访问权限控制源代码.zip”很可能包含了一些示例代码,展示了如何在Java中实现不同级别的访问...

    详解Java编程中protected修饰符与static修饰符的作用

    在Java编程中,`protected`和`static`是两个非常重要的修饰符,它们分别控制着类成员的访问权限和静态属性的行为。本文将详细阐述这两个关键字的作用,帮助初学者更好地理解和运用。 首先,我们来讨论`protected`...

Global site tag (gtag.js) - Google Analytics