一、修饰方法
1,父类public final方法,子类无法重写。
public class Parent {
public final void methodOne() {
}
public void methodTwo() {
}
}
public class ChildOne extends Parent{
//报错,final方法无法重写
public void methodOne() {
}
}
2,父类定义一个public方法,子类可以重写,方法名和参数相同,访问权限必须和父类一样public。
public class ChildOne extends Parent {
//错误,应该是public。
private void methodTwo() {
}
}
3,访问权限private的方法只能类内部使用,隐式指定final修饰,父类定义一个private方法,子类不能使用,子类可以有相同方法,访问权限不限制,它与父类的方法无关,父类private方法加上final关键字,对子类无影响。
public class Father {
//加上final也不影响。
private void methodTwo() {
}
}
public class ChildOne extends Father {
//和父类methodTwo方法无关,也可以是public或protected
private void methodTwo() {
}
}
二、修饰类
类不能被继承,类方法隐式指定final修饰,Android系统类ViewRootImpl、ActivityThread类都是final修饰。
三、修饰变量
1,final修饰的变量一定要初始化,且只能初始化一次(构造方法或定义时),不能修改。
public class ChildOne extends Parent {
final boolean mFlag =true;
final String mVoice;
public ChildOne(String voice) {
super();
this.mVoice = volce;
}
}
2,final修饰基本类型时,值不能修改,引用类型时,地址不能修改,指向对象的内容可以修改。
final ChildOne childOne =new ChildOne(null);
childOne.setChildValue(7);
System.out.println(childOne.getChildValue());
打印7,final childOne变量指向对象内部数据发生了改变,将childOne变量重新赋值非法。
childOne = null;//再次赋值,非法。
3,定义一个final修饰的变量并初始化,编译期间可获取其值,编译器将它作为编译常量。
四、总结
final修饰类无法被继承。
final修饰public方法不能被子类重写。
父类private方法,私有,子类不能使用,子类可以有同名方法,与父类无关,不属于继承。父类private方法加final修饰,子类也可有同名方法。
final修饰变量,仅初始化一次,无法修改。引用类型变量,可以改变对象内容,不能改变引用值。
任重而道远
网友评论