这个似乎都是老生常谈了,特别是找工作第一轮笔试的时候很爱考这些,再罗列一次,特别要注意继承的情况:

    默认状态:即是不加修饰符的时候,所谓的default状态,在类内部可以被访问,在相同的包下面的类也可以互相被使用,跨包则不可访问。

    public:这个当然是访问权限最宽的时候了,不仅可以在类内部进行访问,也可以在同一包中进行访问,还可以跨包来进行访问。

    private:被private修饰符修饰的属性与方法只能在该类的内部进行使用,在同一个包下的不同类也不能被互相访问,子类不会继承父类的private方法以及private属性。

    protected:这个总是忘记,特殊性就是体现在继承关系存在的时候。类内部肯定可以访问,也可以在同一个包下进行访问,该类的子类也可以进行访问,子类与父类不在同一个包中的时候不可以访问父类的protected属性或者是调用父类的protected方法。

特别注意一下protected以及public的区别,特别是跨包的时候,protected指的是受保护类型,继承关系存在的前提下,子类可以访问父类的受保护的方法和属性(但这个前提是在同一个包下),public则不会受到这个限制,即使是跨包的情况,也能互相访问。

//下面的例子是在同一个包里面的继承情况
//子类可以调用父类的 crow 方法
package testa; public class Animal {
protected void crow(){
System.out.println("animal howl");
}
}
package testa; public class Cat extends Animal {
public static void main(String[] args) {
Animal c=new Cat();
c.crow();
}
} //下面这个就是在不同的包中来继承
//在testb包中的Dog类继承 了在testa包中的Animal类 之后再调用父类的方法
//这样就会报编译错误
package testb;
import testa.Animal;
public class Dog extends Animal{
public static void main(String[] args) {
Animal a=new Dog();
//compile error:The method crow() from the type Animal is not visible
a.crow();
}
}

  

关于clone()方法使用的时候正式类似于上面的情况,虽然clone()是在Object类中定义的方法,修饰符是protected,但是在自己写的类中(继承了Object类但不在同一个包下),如果想使用clone()方法,则一定要重新把它覆盖了,并且继承Cloneable接口,否则会有编译错误。具体可以参考这个:http://hxraid.iteye.com/blog/522171。

关于public private protected访问修饰符的更多相关文章

  1. 解析Visual C# 7.2中的private protected访问修饰符

    去年12月份,随着Visual Studio 2017 Update 15.5的发布,Visual C#迎来了它的最新版本:7.2. 在这个版本中,有个让人难以理解的新特性,就是private pro ...

  2. [译]C# 7系列,Part 5: private protected 访问修饰符

    原文:https://blogs.msdn.microsoft.com/mazhou/2017/10/05/c-7-series-part-5-private-protected/ C#有几个可访问性 ...

  3. 简述public private protected internal修饰符的访问权限

    public 关键字是类型和类型成员的访问修饰符.公共访问是允许的最高访问级别.对访问公共成员没有限制. protected 关键字是一个成员访问修饰符.受保护成员在它的类中可访问并且可由派生类访问. ...

  4. Java 中的 protected 访问修饰符你真的了解吗?

    protected Java 中的 protected 访问修饰符 总结 在同一个包中,类中 protected 或 default 修饰的属性或方法可以在类外被其对象 (实例) 外部访问,也可以被子 ...

  5. Java基础——protected访问修饰符探讨

    Java基础——protected访问修饰符探讨 根据官方说法:(如图) protected修饰符是可以修饰其他包中的子孙类的,但是我做了个实验,结果发现了一个有趣的现象! 具体请往下看: packa ...

  6. 什么是封装? ----------------php中"public"类似的访问修饰符分别有什么作用?----什么是抽象?抽象的关键字以及用法----- 什么是接口?接口的关键字以及用法-------------

    什么是封装? ------------------------------------封装是php面向对象的其中一个特性,将多个可重复使用的函数封装到一个类里面.在使用时直接实例化该类的某一个方法,获 ...

  7. Java中的protected访问修饰符

    在某个类中定义的protected 方法和属性和默认权限方法和属性是一样的.比如,某类的protected 方法和属性在包外是不能通过该类实例进行访问的(你能在包外访问一个类的默认权限的方法和属性吗? ...

  8. protected访问修饰符

    子类可以调用, 但实例化的对像不可调用  new object;

  9. 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)

    访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...

随机推荐

  1. 中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结

    中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结 标签:数学方法--数论 阅读体验:https://zybuluo.com/Junlier/note/1300035 前置浅讲 前 ...

  2. 被我误解的max_connect_errors

    第一节  什么是max_connect_errors 一开始接触这个参数的时候,感觉他和max_connections的含义差不多,字面意思简单明了,这个参数的含义是最大连接错误数,翻翻mysql的文 ...

  3. redis-Nosql

    Nosql: CAP:C(Consistency):强一致性.A(Availability):可用性.P(Partitio Tolerance):分区容错性 CAP 理论的核心是: 一个分布式系统,不 ...

  4. linux针对TCP和 UDP的调优

  5. Less 混合(mixin)

    Less的混合:混合可以将一个定义好的class A轻松的引入到另一个class B中,从而简单实现class B继承class A中的所有属性.我们还可以带参数地调用,就像使用函数一样. .bord ...

  6. [python 学习] sys模块

    sys.stdout sys.stdin

  7. DispatcherServlet的工作原理

    下面是DispatcherServlet的工作原理图,图片来源于网络. 下面是我从DispatcherServlet源码层面来分析其工作流程: 1.请求到达后,调用HandlerMapping来查找对 ...

  8. 包装CGFloat和用NSNumber初始化的区别?

    @(CGFloat)和[NSNumber numberWith:CGFloat]的区别?

  9. Linux的磁盘分区

    大于2T分区 Linux-GCAPP1:/ # parted /dev/sdb GNU Parted 2.3 Using /dev/sdb Welcome to GNU Parted! Type 'h ...

  10. yum源更换

    折腾了半天,怀疑自己能力 的时候,发现原来不是我的错.树莓派换源国内的aliyun,163都不能用,最好找到这个 # CentOS-Base.repo # # The mirror system us ...