final关键字的使用
final修饰类
表示该类不能够被重写
public class Person
{
String name;
int age = 1;
boolean isMale;
public void eat()
{
System.out.println("人可以吃饭");
}
public void sleep()
{
System.out.println("人可以睡觉");
}
public void talk(String language)
{
System.out.println("人可以说话,使用的是:"+language);
}
};
class Chinese extends Person{
private String nation;
public void setNation(String nation) {
this.nation = nation;
}
public String getNation() {
return nation;
}
public void sleep()
{
System.out.println("中国人会睡觉");
}
public void eat()
{
System.out.println("中国人会睡觉");
}
public void talk(String language)
{
System.out.println("中国人可以说话,说的是"+ language);
}
}
此时如图所示的两个类都是可以被继承的,但是如果此时在Chinese的父类Person前加上final
会报“Cannot inherit from final 'Person'”,即为无法从final类Person中继承
final修饰方法
final修饰过的方法是无法重写的
在以上两个类中,将Person类中的eat()方法的前面加上final
在Chinese类的eat()方法弹出“'eat()' cannot override 'eat()' in 'Person'; overridden method is final”即为eat()方法不能从Person类中重写,重写的方法是最终方法
final修饰属性或常量
final修饰的属性或者常量不能再次更改
例如以下操作就是错误的
public class Person
{
final int age=18;
age=20;
};
如图上的操作就会报出“Unknown class: 'age'”即为对age不被允许的操作
被final修饰过的变量或者属性意味着该变量和属性只能赋值一次,被赋值之后就不能再修改。
注:关于static final修饰的变量或者属性为全局常量,先于类加载,并且可以在全局使用但不可修改
抽象类
1、此类不能实例化
2、抽象类中仍然有构造器,虽然其本身并不实例化,但是当有子类继承该抽象类的时候,仍需要被调用
3、会提供抽象类子类,使之实例化,若子类没有重写父类的方法,则子类也是抽象类(重写抽象类的方法可以不是抽象方法)
注:抽象类的作用就是模型化一部分父类无法实现的功能,需要子类重写完成)
抽象类的实现就关系到abstract关键字的使用
abstract
1、不能修饰属性和构造器
2、不能用来修饰私有方法(private方法不能够被重写)、静态方法
3、final和abstract也没有办法一起使用
abstract public class AbstractCalss {
private int age;
private String name;
abstract int getAge();
abstract String getName();
abstract void setName(int name);
abstract void setAge();
}
如上则是标准的抽象类,被abstract修饰的方法是不能够有方法体的
注:当有子类出现继承抽象类的时候,一定要将继承类中的所有方法全部重写,否则没有办法完成继承,此时我们创建一个类去继承AbstractClass类,当我们没有对其中的任何一个方法进行重写的时候,会出现“Class 'AbstractSon' must either be declared abstract or implement abstract method 'getAge()' in 'AbstractCalss'”即为AbstractSon类必须声明抽象方法或者施行AbstractCalss类中的抽象方法getAge()