private:可以定义方法,属性,定义的方法和属性不能被类的外部所看到。
default:可以在本包的任意地方访问。
public:都可以访问,不受任何限制。
protected:保护,不同包的非子类不可以访问。
protected权限,在不同包的它的子类能够被访问:
package org.lxh.demo08.g ; public class HelloDemo{ protected String name = "LXH" ; // 只能在本包及不同包的子类中访问 };
在其他包的子类访问这个属性。
package org.lxh.demo08.h ; import org.lxh.demo08.g.HelloDemo ; class SubHelloDemo extends HelloDemo{ //在其他包中的子类! public void print(){ System.out.println("访问受保护属性:" + super.name) ; } }; public class ProtectedDemo01{ public static void main(String args[]){ SubHelloDemo sub = new SubHelloDemo() ; sub.print() ; } };
运行结果:
访问受保护属性:LXH
如果现在没有使用子类,而是直接在不同类中访问,则会出现无法访问的错误。
package org.lxh.demo08.h ; import org.lxh.demo08.g.HelloDemo ; public class ProtectedDemo02{ public static void main(String args[]){ HelloDemo sub = new HelloDemo() ; System.out.println(sub.name) ; // 错误的,不同包的类无法访问 } };
回顾
当产生一个类之后,为了保证类中的内容不被外部直接看到,则使用private关键字。但是,如果两个有关系的类要进行属性相互访问的话就比较麻烦。
之前只能使用getter(),和setter()方法取得和设置,所以为了减少私有属性的的访问的麻烦,使用了内部类,但是内部类会破坏程序的结构。
为了让一个类的内容可以方便的使用,使用了继承的概念,但是在继承中,private属性也是无法被子类看到,所以此时,为了方便子类的操作,
可以将属性使用protected进行封装,这样一来,外部也无法看到(不同包)。
之后有了继承之后,既然有了父子的关系,所以可以使用向上或者向下的转型,以完成多态性,但是,在开发中,类与类直接直接继承并不多见,而往往
继承抽象类,或实现接口,当若干个操作间需要解耦合的时候,就可以使用接口完成。
既然有内部类了,则如果一个接口或者抽象类的子类只使用一次,则可以将其定义为匿名内部类。
开发中没有包的类是绝对不存在的。
封装-》继承-》多态。
JAVA命名规范
类:所有单词首字母大写。
方法:第一个首字母小写,之后每个单词首字母大写:如:getInfo();
属性:第一个首字母小写,之后每个单词首字母大写:如:studentName;
包:所有单词的字母小写,如:org.lxh.demo08.h
常量:所有字母大写,如:FLAG.
总结:
protected访问权限;
命名规范。