浅析java修饰符之public default protected private static final abstract
一 修饰符的作用:用来定义类、方法或者变量,通常放在语句的最前端
二 分类(大致分两类)
1.访问修饰符,包括:public default protected private
2.非访问修饰符,包括:static final abstract
三 访问修饰符——Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。
1.public:共有的,对所有类可见
2.default:默认的,在同一包内可见,不使用任何修饰符。
3.protected:受保护的,对同一包内的类和所有子类可
4.private:私有的,在同一类内可见
5.访问控制和继承——请注意以下方法继承的规则:
-
父类中声明为 public 的方法在子类中也必须为 public。
-
父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
-
父类中声明为 private 的方法,不能够被继承。
package bokeyuan; /*同包同类*/ public class Modifier_test1 { public String name="hero"; //public protected int num=188; // protected boolean result=true; //default默认 private String country="china"; //private public void getName(){ System.out.println(name); }; protected void getNum(){ System.out.println(num); }; public void getResult(){ System.out.println(result); }; private void getCountry(){ System.out.println(country); }; public static void main(String[] args) { Modifier_test1 superdemo=new Modifier_test1(); superdemo.getName(); //输出 hero superdemo.getNum(); //输出 188 superdemo.getResult(); //输出 true superdemo.getCountry(); //输出china } }
package bokeyuan; /*同包不同类*/ public class Modifier_test2 { public static void main(String[] args) { Modifier_test1 superdemo=new Modifier_test1(); superdemo.getName(); //输出 hero superdemo.getNum(); //输出 h188 superdemo.getResult(); //输出 true superdemo.getCountry(); //error } }
package bokeyuan1; /*不同包*/ import bokeyuan.Modifier_test1; public class Modifier_test3 { public static void main(String[] args) { Modifier_test1 superdemo=new Modifier_test1();; superdemo.getName(); //输出 hero superdemo.getNum(); //error superdemo.getResult(); //输出 true superdemo.getCountry(); //error } }
四 非访问修饰符
1.static 修饰符,用来创建类方法和类变量
a.当static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量
b.当static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据
2.final 修饰符,用来修饰类、方法和变量。
a.final 修饰的类不能够被继承;
b.修饰的方法可以被子类继承,但是不能被子类修改;
c.修饰的变量为常量,是不可修改的。
3.abstract 修饰符,用来创建抽象类和抽象方法。
a.被abstract 修饰的类叫抽象类,用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充
b.被abstract 修饰的方法叫抽象方法,抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供
c.果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法
4.synchronized 和 volatile 修饰符,主要用于线程的编程