Java中的修饰符final和接口
final修饰符,意为最终的,无法修改的,一旦一个变量被final修饰,那么它将无法再被赋值,一个方法被final修饰,它将无法被重写。例如:
public class Truck extends Car {
public final int v1=0;
@Override
public void Speedup() {
System.out.println("卡车加速");
v1=100;
}
}
在将速度v1用final修饰后,在加速方法中我们想给速度v1再次赋值,会发现系统报错,显示无法给被final修饰的变量v1赋值,显然被final修饰的变量此时已经相当于一个常量了。
public class Truck extends Car {
@Override
public void Speedup() {
final int v1=0;
System.out.println("卡车加速");
v1=100;
}
}
连局部变量被final修饰后也无法再赋值
public class Car {
public final void Speedup(){
System.out.println("车子加速");
}
}
public class Truck extends Car {
@Override
public void Speedup() {
System.out.println("卡车加速");
}
}
此时,在子类Truck中报错。显示被final修饰的父类Car中的方法不能被重写。
但当我们用final修饰引用变量时,又会发生不同的情况。
public class Test {
public static void main(String[] args) {
final Truck t=new Truck();
t.v1=100;
System.out.println(t.v1);
t=new Truck();
}
}
此时我们可以给引用变量t的速度赋值,并且输出新的数值,这是因为final修饰的是引用变量t的地址,t里面储存的属性v1并没有被final修饰,可以被重新赋值。
由此,我们可知,被final修饰的方法不能被重写,成员变量和局部变量也无法被赋值,它修饰的引用类型的地址也不能改变,但是地址里储存的内容可以修改。
接口是一种公共的规范,只要符合了规范,就能实现通用。
接口用关键字interface修饰,定义接口的格式如下:
public interf 接口名{};
类调用接口用implement修饰,调用接口的格式如下:
public class 类名 implement 接口名{}
public interface Speedup {//定义一个接口Speedup
public abstract void speedup();
}
public class Car implements Speedup {//创建一个子类Car调用Speedup接口
@Override
public void speedup() {
System.out.println("汽车加速!");
}
}
public class Train implements Speedup{//创建一个子类Train调用Speedup接口
@Override
public void speedup() {
System.out.println("火车加速!");
}
}
public class Test {
public static void main(String[] args) {
Car c=new Car();
c.speedup();
Car c1=new Train();
c1.speedup();
}
}
另外,在接口中如果定义了变量,会发现在Test测试类中无法再次为它们赋值:
public class Car implements Speedup{
}
public interface Speedup {
int speed=40;
int time=5;
}
public class Test {
public static void main(String[] args) {
Car c=new Car();
System.out.println(c.speed);
System.out.println(c.time);
c.speed=30;
}
}
我们可以看到系统提示这是一个被final修饰的变量,他是无法被再次赋值的,也就是说在接口中定义的其实都是常量,它们的完全写法应该是public static final int speed=40;
接口中也不能存在构造方法,跟默认值存在常量一样,只能存在抽象方法。
下一篇:
OpenCV——在线视频读取
