public、private、default、protected总结
来源:互联网 发布:程序员 博客 编辑:程序博客网 时间:2024/05/22 02:05
public > protected > default > private
以前感觉自己也是知其然不知其所以然,就傻傻的背别人说的,但是不知道其中真正意义,看了视频才知道。(不敢说别人是不是这样,反正本菜鸟就是这样)
文字看不懂的建议看 视频课程:Java4Android——课时25-27(包和访问权限)
平常总是百度看public、private、default、protected差别,但是看别人文字总是没有深刻理解其中的含义。个人觉得看了Java4Android的视频教程,才深刻理解了这几个权限的差别。
1、4个权限是跟包相关的(所以必须先了解包package org.marsdroid)-建议看视频,文字描述实在太难
2、【default】String name;当没有任何权限描述是,默认是default,两个类在同一个包,可以随意调用。不在同一个包下,跨包不可以访问,那就不行了。
比如下面:(Person类在包com.marsdroid之外就无法被调用,只有跟Person在同一包下的类才可以使用)
package com.marsdroid;class Person{}
3、【public】不管在哪个包,随意调用
4、【private】仅仅在本类下面调用,就算该类被别的类继承extends了,也无法使用private权限的变量和函数
5、【protected】主要跟继承有关系。
(1)和default区别:
首先拥有和default一样的功能(同一包路径下com.xxx.xxx,不用extends也能用protected修饰的方法),但是该权限只能修饰成员变量和成员函数。允许跨包继承使用,(default不行,只能在本包下继承使用)。
(2)和public区别:
public String name;中的name随便用,不用继承也可以使用。
protected String name;中的name,只有继承了该变量所在类后,才可以使用。
比如:
public class Person{ public String name; protected int age;}
1、在其他类中直接Person p = new Person();就可以用变量name,但是不能用age,
2、想用age的情况,必须是Person的子类,class Student extends Person{} Student才能用,允许跨包使用。
个人觉得Java4Android讲师,是非常棒的,不仅仅只是讲解枯燥的概念。(用一个不懂的概念,去帮你解释另一个概念,纯属扯淡)
老师用例子和实例讲解,真是棒级了,这种授课方式让人恍然大悟。极力推荐免费视频课程《Java4Android》
2016.12.12再总结一下protected权限修饰符
概述:
学习模板方法模式Template Method Pattern,让我真正明白了protected和final的作用。
抽象类:
public abstract class SuberAbstract { public abstract void publicRun(); protected abstract void protectedRun(); final public void run(){ this.publicRun(); this.protectedRun(); }}
继承抽象类的子类(模板):
public class Man extends SuberAbstract { @Override public void publicRun() { System.out.println("Man_publicRun"); } @Override protected void protectedRun() { System.out.println("Man_protectedRun"); }}
final
在写子类Man的时候,明白了final的意思(平时大家也知道是不能修改了,我一般觉得是一个值不能变而已),在这里就是模板Man也不能重写run()方法了,不能改变他了,根本没有代码其实。如果没有final,我们还是可以更改这个方法的,有代码提示敲出来这个方法。
客户要用我们的模板**Man的时候,只让他用那个final修饰的模板方法**run(被final修饰后不能更改的即使模板方法),其他的方法用protected修饰了就不能用了。(但是我们也知道protected是有default的属性的,但是客户类是没有和我们的抽象类SuperAbstract类和模板Man在一个包路径里面的,如果Company和SuperAbstract或Man任意一个在同一包的话,还是想办法可以用protected方法的(注意想办法意思:跟哪个在一起,就用哪个做引用才可以,跟SupAbstract在一起,new Man的时候要向上转型;跟Man在一个包,new Man就不要转型了。不过这种情况不常见。)),一般我们的客户类不可能和SuperAbstract抽象类在一个包路径里面,所以我们的客户类不能用protected修饰的方法。
public class Company { public static void main(String[] args) { SuberAbstract sa = new Man(); sa.run(); sa.publicRun(); ~~sa.protectedRun();//此处其实是报错的,为了方便演示写出来~~ }}
protected
个人感觉如果没有Template Method Pattern,虽然感觉按照概念吧,我也懂protected,知道在一个包,大家可以用,不在一个包,继承了后还是可以用可以复写。但是对不能复写的情况,不太清楚,现在真正理解了protected修饰的方法,不能用的地方的情况(Company和SuperAbstract、Man都不在同一个包,这时候,我们在Company里面new Man的时候,我们是不可以用protected修饰的方法的。)
基本概念还是要弄清楚
- public、private、default、protected总结
- private protected public default
- public,private,protected,default
- public、private、protected、default区别
- 复习public default protected private
- public protected default private 区别
- public、private、protected、default区别?
- public protected default private 权限
- public,protected,default,private区别
- public private protected default 区别
- public、private、protected、default区别
- private、protected、default、public权限
- public private protected default区别
- public,protected,default和private的权限总结
- Java中的public、 protected、 default、 private
- java基础--->管理权限public protected private default
- J2SE_访问权限(public, protected, default, private)
- Java作用域public、protected、default、private
- Action Bar 如何实现 以及作用
- java多线程Lock Condition生产消费者
- 『sklearn学习』利用 Python 练习数据挖掘
- 用代码实现你来这个世界多少天了.
- jquery的入口函数
- public、private、default、protected总结
- 入门训练 Fibonacci数列
- SpringMVC-HTTP Status 500 - Servlet.init() for servlet springmvc threw exception
- setIconifiedByDefault() setIconified() onActionViewExpanded()对比
- 简单的MapReduce程序wordCount
- UIFramework之功能分析
- 初学者parseInt()和parseFloat()的理解(仅供参考,老司机笔下留情)
- 使用wxWidgets进行跨平台的C++开发
- g_2 + g_3