------<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表示不可改变。
1,final修饰变量
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++; } }
2,Final修饰方法:
API类中的许多方法,如print()和println(),以及Math类中的所有方法都定义为final方法。在具体应用软件开发中,一些执行特殊性运算和操作的方法,可以定义为final方法。
在方法的返回值类型前加入关键字final,则定义该为final。使用final关键字向编译器表明子类不能覆盖此方法。
例:
下面定义两个类为父类和子类关系,其中子类要重写父类被final修饰过的方法时,会出现错误。
class TestFinal{ final void f(){} } class Further extends TestFinal{ final void f(){}//错误,final方法不能被覆盖 }
3,final修饰类
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学习型技术博客、期待与您交流!------------