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;

接口中也不能存在构造方法,跟默认值存在常量一样,只能存在抽象方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值