final关键字修饰类——不能被继承(该类没有子类、方法不能重写)
final关键字修饰类——可以继承父类(父类可以是抽象类,本类可以重写父类抽象方法)
抽象父类
public abstract class Animal {
void eat(){
}
public abstract void methodabs();
}
抽象类的实现类、该类被final修饰
因此,这个实现类没有子类
public final class Dog extends Animal {
@Override
public void methodabs() {
}
}
无法从final类继承,inherit from从…中继承
//public class Ha2 extends Dog {
//Cannot inherit from final 'cn.itcast.day11.Test01.Dog'
//无法从final'cn.itcast.day11.test01.dog'继承
//}
测试类
public class Test {
public static void main(String[] args) {
Animal animal=new Dog();
animal.eat();
animal.methodabs();
}
}
final关键字修饰成员方法——最终方法(可以被继承,不能被重写)
抽象父类,最终方法final
public abstract class Animal {
void eat(){
//普通方法可以被继承,可以被重写
}
public final void methodFinal(){
//最终方法,可以被继承,不能被重写
System.out.println("最终方法 ");
}
}
实现类,抽象类中的最终方法只能继承下来,不能重写
public final class Dog extends Animal {
@Override
public void eat() {
System.out.println("重写抽象类普通成员方法");
}
//报错overridden method is final
// @Override
// public final void methodFinal(){
// }
}
测试类
public class Test {
public static void main(String[] args) {
Animal animal=new Dog();
animal.eat();//重写抽象类普通成员方法
animal.methodFinal();//最终方法,继承下来的
}
}
final关键字修饰局部变量——基本类型(只能赋值一次)
final关键字修饰局部变量——引用类型(只能赋一次地址值)
public class Animal {
String name;
int age;
}
public class Test {
public static void main(String[] args) {
// final修饰局部变量基本类型
final int num;
num = 10;
// num = 20;
// 报错Variable 'num' might already have been assigned to
//final修饰局部变量引用类型
final Animal animal = new Animal();
animal.age = 10;
animal.age = 20;
// animal = new Animal();
// 报错cannot assign a value to final variable 'animal'
}
}
final关键字修饰成员变量——直接赋值,构造方法无关
final关键字修饰成员变量——构造器赋值,需要空参全参
直接赋值
public class Student {
final String name=10;
}
构造器赋值
(1)this.xxx=具体值
public class Student {
final String name;
String str;
public Student() {
name = "abc";
}
public Student(String str) {
this.name = "具体值";
}
}
(2)this.xxx=xxx
public class Student {
final String name;
String str;
public Student() {
name = "abc";
}
public Student(String name, String str) {
this.name = name;
this.str = str;
}
}