美文网首页
final关键字

final关键字

作者: gczxbb | 来源:发表于2019-05-27 22:02 被阅读0次

一、修饰方法

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修饰变量,仅初始化一次,无法修改。引用类型变量,可以改变对象内容,不能改变引用值。


任重而道远

相关文章

网友评论

      本文标题:final关键字

      本文链接:https://www.haomeiwen.com/subject/jmeqtctx.html