Java 作用域修饰符

Java作用域修饰符

在java语言中,可以使用访问修饰符来规定对类、变量、方法和构造方法的访问。

一、访问修饰符

1.私有的访问修饰符private:

声明为私有访问类型的变量只能通过类中的公共方法被外部类访问。

被声明为private的方法、变量和构造方法,只能被所属类访问,并且类和接口不能被声明为private。

public class PrivateTest{
    private String name;//私有成员变量
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
    //下面说明了:声明为私有访问类型的变量只能通过类中的公共方法被外部类访问。
    public static void main(String[] args){
        PrivateTest p = new PrivateText();//创建类的对象
        p.setName("private访问修饰符");//调用对象的set方法,为私有成员变量name赋值。
        System.out.println("name = " + p.getname());
    }
}

2.无访问修饰符:

不使用访问修饰符声明的变量和方法,可以被这个类本身或者与类在同一个包内的其他类访问。

接口中变量隐式声明为 public stastic final。

接口中的方法默认访问权限为 public。

public class PrivateTest{
    String name;//默认访问修饰符的成员变量
    String getName(){
        return name;
    }
    void setName(String name){
        this.name = name;
    }
    public static void main(String[] args){
        DefaultTest d = new DefaultText();
        d.setName("default test");
        System.out.println("name = " + d.getname());
    }
}

3.受保护的访问修饰符protected

protected修饰符不能修饰类和接口,方法和成员变量能够声明为protected。接口的成员变量和方法不能声明为protected。

可以被这个类本身、与类在同一个包内的其他类、不同包中的子类访问。

package create;
public class Person{				//父类
    protected String name;			
    protected void sing(){			
        System.out.println("父类")}
}

package child;						//与父类不在一个包中
import create.Person;				//引入父类
public class Women extends Person{  //继承父类的子类
    public static void main(string[] args){
        Women w = new women();
        w.sing();					//调用子类在父类中继承的方法
        w.name = "protected";		//可见不同包中的子类可以访问protected修饰的变量。
        System.out.println(w.name);
    }
}

4.公有的访问修饰符public

被声明为public的类、方法、构造方法和接口能够被任何其他类访问。

几个相互访问的public类分布在不同的包中,则需要用import导入相应public类所在的包。

类所有的公有方法和变量都能被其子类继承。

package create;
public class Person{
    public void test(){
        System.out.println("父类:public test");
    }
}

package child;
import creat.Person;
public class PublicTest{//两个类之间没有继承关系
    public static void main(String[] args){
        Person p = new Person();
        p.test();//调用person类中public方法。
    }
}

二、非访问修饰符

1.static修饰符

static修饰符用来修饰类的成员变量和成员方法,也可以形成静态代码块。

static修饰的成员变量和成员方法也成为静态变量、静态方法,可以直接通过类名访问他们。

静态变量也称为类变量,局部变量不能被声明成static变量。

无论一个类实例化多少个对象,它的静态变量就只有一份,静态变量独立于该类的任何对象。

JVM加载类时,就会执行静态代码块。

package create;
public class StaticTest{
    public static final String BANANA = "香蕉";
	//用static和final修饰的成员变量一旦初始化,其值就不能修改,它的名字建议用大写字母。
    public static float price = 5.2f;
    static{//JVM在加载类时会执行这些静态代码块,每个代码块只会被执行一次。
        System.out.println("static 静态块");
    }
    public static void test(){
        //静态方法只能访问所属类的静态成员变量和静态成员方法。
        System.out.println(StaticTest.BANANA + "的价格是:" + StaticTest.price);
    }
    public static void main(String[] args){
        StaticTest st = new StaticTest();
        st.test();
        System.out.println("main()中," + st.BANANA + "的价格 = " + st.price);//通过对象st调用类的静态成员变量和常量。
    }
}

2.final修饰符:

final可以修饰类、方法、变量。

final可以修饰类中的变量,分别是静态变量、成员变量、局部变量。

变量初始化可以在定义时初始化,也可以在构造方法中赋初值。final修饰的成员变量表示常量,值一旦给定就无法改变。

一个类不允许其子类覆盖某个方法,可以把这个方法声明为final方法。

final声明的类不能被继承。

/*
如下:编译报错:
错误:无法为最终变量f分配值
错误:Son中的work()无法覆盖Father中的work(),被覆盖的方法为final

*/
public class Father{
    final int f = 9;//值一旦给定就无法改变
    final void work(){//final定义的成员方法不能被重写
        System.out.println("上班");
    }
}
public class Son extends Father{
	public static void main(String[] args){
    	Son s = new son();
        s.f = 12;//错误
        System.out.println(s,f);
    }    
    void work(){//错误
        
    }
}
发布了224 篇原创文章 · 获赞 133 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/qq_40828914/article/details/104237944
今日推荐