1.final
1.当final修饰基本数据类型时,他们是编译时常量,编译后,在使用时直接替换为常量。
例如:
public static final int a = 1;
/*
*典型的对常量定义的方式
*public:可以被用于包之外
*static:不属于任何对象,强调只有一份
*final:修饰基本类型,表示该对象是一个常量
*/
2.当final修饰非基本数据类型时,表示该对象的引用不可变,但是该对象还是可以修改的。
例如:
public class JavaTest {
//声明并初始化一个final修改的Subclass对象sub
final Subclass sub = new Subclass();
@Test
public void finalTest(){
//sub对象的引用为final修改,故不可变,不能重新赋值
sub = new Subclass();//error
//a为final修饰,不可变,不能重新赋值
sub.a = "1234";//error
//b没有final修饰,可变,能重新赋值
sub.b = "1234";
}
//Subclass类,String不是基础类型!!!
class Subclass{
//a为final修饰
public final String a = "123";
//b为普通的String类型数据
public String b = "123";
}
}
3.当方法被final修饰时,不能被重写,锁定方法,以防任何继承类修改他的含义。
2.重写、覆写(override)和重载(overload)
1)重写、覆写(override)
指的是子类重写父类中相同方法的内容,是在子类和父类之间体现了多态性。
@override的作用
@Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处:
1、可以当注释用,方便阅读;
2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。例如,你如果没写@Override,而你下面的方法名又写错了,这时你的编译器是可以编译通过的,因为编译器以为这个方法是你的子类中自己增加的方法。
2)重载
是指在同一类中,写多个方法名相同,但是参数类型或者个数不同的方法,是在同一类中体现多态性。