package cn.itcast.demo01;
/*final 最终的,不可变的
* 常见四种用法
* 1.用来修饰类
* 2.修饰方法
* 3.修饰局部变量
* 4.修饰成员变量
* */
public class Demo01Final {
public static void main(String[] args) {
int num1 = 10;
System.out.println(num1);//10
num1 = 20;
System.out.println(num1);//20
final int num2 = 200;//一次赋值,终身不变
System.out.println(num2);//200
//num2 = 250;//错误,不可改变赋值
}
}
package cn.itcast.demo01;
/*对于成员变量来说,若用final修饰,此变量不可变
* 由于成员变量有默认值,所以用final修饰后必须手动赋值,不会再给默认值了
* final的成员变量要么直接赋值,要么通过构造方法赋值
* */
public class Person {
private final String name;//保证所有构造方法对之赋值
//private final String name = "LH";//默认赋值后尝试修改name的方法都会报错
//private final String name;//错误
public Person() {
name = "gxt";
}
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
// public void setName(String name) {
// this.name = name;
// }
}
package cn.itcast.demo01;
/*final修饰方法时,此方法为最终方法,不能被 覆盖重写
* 修饰符 final 返回值类型 ...
*
* final 与 abstract 不可同时出现,互为矛盾
* */
public class Fu {
public final void method(){
System.out.println("父类方法执行");
}
}
package cn.itcast.demo01;
public class Zi extends Fu {
//不可重写final修饰的方法
/*@Override
public final void method(){
}*/
}
package cn.itcast.demo01;
/*public final class MyClass{
}
这个类不能有任何子类
*/
public final class MyClass /*extends Object*/ {
public void method(){
System.out.println("方法执行");
}
}
package cn.itcast.demo01;
/*final类中的所有成员方法都无法覆盖重写
* 但是可以对父类进行覆盖重写*/
public class MySubClass /*extends MyClass*/ {
//不可继承final类
}