java java面向对象-final类和final方法

20180319 java java面向对象-final类和final方法


为什么需要使用final修饰符:
在继承关系中,最大的弊端是破坏封装,子类能访问父类的实现细节,而且可以通过方法覆盖的形式修改实现细节。




现在想办法让子类只可以调用父类数据,不可以修改父类数据,final修饰符就是解决这个问题的。


多个修饰符之间是没有先后排列关系的。可以写成如下形式:
public static final

public final static 




final本身的含义是“最终的,不可改变的”,它可以修饰非抽象类、非抽象方法和变量,注意:构造方法不能使用final修饰,因为构造方法不能被继承,肯定是最终的。






1、final修饰的类:表示最终类,表示该类不能再有子类。
eg:
final class SuperClass
{
  
}
class SubClass extends SuperClass
{
}
class FinalDemo
{
  public static void main(String[] args)
  {
    System.out.println("hello");
  }
}
此程序会编译报错,因为父类被final修饰了,而子类却继承了父类。


只要满足以下条件就可以把一个类设计成final类:
(1)某类不是专门为继承而设计的;
(2)出于安全考虑,类的实现细节不需改动(不准修改源代码);
(3)确信该类不会再被拓展。
java里final修饰的类很多,比如8大基本数据类型包装类和String类。




2、final修饰的方法:即最终的方法,该方法不能被子类覆盖。
eg:
 class SuperClass
{
  final public void doWork();
}
class SubClass extends SuperClass
{
     public void doWork();
}
class FinalDemo
{
  public static void main(String[] args)
  {
    System.out.println("hello");
  }
}
此程序会编译报错,因为子类不能覆盖被final修饰的父类方法。


什么时候的方法使用final修饰:
(1)在父类中提供的统一的算法或算法骨架,就不准子类通过方法覆盖来修改,此时需要使用final修饰。
(2)在构造器中调用的方法,即初始化方法,初始化方法一般使用final修饰,这也是怕被子类覆盖。


注意:final修饰的方法子类可以调用,但是不能覆盖。
3、final修饰的变量:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值