黑马程序员——Java基础---访问修饰符

                  ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!------                                                                                     

                                                                                                  访问修饰符

      在定义类,属性,方法时都需要指定访问修饰符,以此来限定类,属性,方法的可访问的范围。Java中的访问修饰符有一下几个关键字。

        (1)private:私有。只有在类的主体中才可以访问。只能修饰属性和方法,不能修饰类。

        (2)protected:受保护。该类及其子类的成员均可以访问,同一个包中的类也可以访问。只能修饰属性和方法,不能修饰类。

        (3)public:公共。该类或非该类均可访问。

        (4)默认:不使用修饰符。只有相同包中的类可以访问。

  

    位置

Private

  默认

  Protected

   public

同一个类

   是

   是

    是

    是

同一个包内的类

   否

   是

    是

    是

不同包内的子类

   否

   否

    是

    是

不同包并且不是子类

   否

   否

    否

    是

  

 

                     Final修饰符

Final修饰符可修饰类,方法和变量。Final在修饰类,方法和变量时表示的意义是不同的,但本质是一样的,即final表示不可改变。

 

1final修饰变量

  Final修饰变量时,有如下规定:

   1,一个变量可以声明为final,这样做的目的是阻止它的内容被修改。

   2,声明final变量后,变量只能被初始化一次,然后就不能对其进行修改了。

   3,一个final变量实质上是一个常量。

 

例:Final修饰变量的示例代码:

 

 1 public class FinalDemo {
 2 
 3   public static void main(String[] args) {
 4 
 5 final int noChange = 20; //因为只能赋值一次,所以赋值后就根常量一样
 6 
 7 noChange =30;//不能改变其值
 8 
 9 }
10 
11 }

 

 

如果设置final变量声明与初始化是分开操作的,则要提醒用户空的final变量必须在实例化过程尚未结束前赋值。要达到这个目的,空的final变量必须在构造方法中赋值,但是只能赋值一次。

如:

public class FinalDemo {

final int noChange;

public FinalDemo(){

noChange = 30;

}

}

 

 

如果修饰引用类型变量,此变量将无法引用任何其他对象。但是可以改变对象的内容。

class Student{

public int age = 5;

}

public class Grade {

public static void addStudent(final Student st){

//修饰引用类型参数与修饰引用类型变量效果一致

st = new Student();

st.age++;

}

}

 

 

2Final修饰方法:

API类中的许多方法,如print()println(),以及Math类中的所有方法都定义为final方法。在具体应用软件开发中,一些执行特殊性运算和操作的方法,可以定义为final方法。

在方法的返回值类型前加入关键字final,则定义该为final。使用final关键字向编译器表明子类不能覆盖此方法。

 

例:

下面定义两个类为父类和子类关系,其中子类要重写父类被final修饰过的方法时,会出现错误。

class TestFinal{

final void f(){}

}

class Further extends TestFinal{

final void f(){}//错误,final方法不能被覆盖

}

 

 

3final修饰类

 API中的某些类,如String以及Math等,就是final类的典型例子。Final修饰的类不能被子类继承。

例:

final class TestFinal{

int i = 51;

int j = 7;

void f(){}

}

尝试下面的类继承,是不能通过编译的:

class Further extends TestFinal{

//..

 //编译错误,final类不能被继承!

}

 

如果在IDE中编写上述代码,则IDE工具会提示编译错误。

在这里应注意:TestFinal类中的变量可以是final类型,也可以不是。

而TestFinal类中的方法都为隐式的final方法。

                     -----------android培训、java培训、java学习型技术博客、期待与您交流!------------ 

转载于:https://www.cnblogs.com/hmchengxuyuan/p/5002732.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值