Java入门教程(27)——重写和final关键字

简介: 重写和final关键字的介绍及使用

@[toc]

1.重写(override)

  1. 什么是重写呢,顾名思义,子类重写父类的方法,可以用自身行为替换父类行为。
  2. 方法重写需要符合的条件:

方法名、形参列表相同。
返回值类型和声明异常类型,子类小于等于父类。
访问权限,子类大于等于父类。
声明为 final 的方法不能被重写。
声明为 static 的方法不能被重写
构造方法不能被重写。

  1. 实例
/**
 * 方法的重写实例
 */
public class TestOverride {
    public static void main(String[] args) {
        Car h = new Car();
        Plane p = new Plane();
        h.run();
        h.getVehicle();
        p.run();
    }
}

class Vehicle { //交通工具类
    public void run() {
        System.out.println("跑....");
    }

    public Vehicle getVehicle() {
        System.out.println("选择一个交通工具!");
        return null;
    }
}

class Car extends Vehicle {
//重写了run()方法,但是 getVehicle() 还会运行
    @Override
    public void run() {
        System.out.println("地上跑....");
    }
    //如果加上这一串代码, getVehicle() 也会被重写,输出结果为空
/*@Override
    public Car getVehicle() {
        return new Car();
    } */
}

class Plane extends Vehicle {
//重写了run方法()
    @Override
    public void run() {
        System.out.println("天上飞....");
    }
}

2.final关键字

  1. 作用

修饰变量: 被他修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。
final int MAX_SPEED = 90;
修饰方法:该方法不可被子类重写。但是可以被重载!
final void study(){}
修饰类: 修饰的类不能被继承。比如:Math、String 等。

实例1:修饰变量

public class Testfinal{
    public static void main(String[] args) {
            final  int PI=3;
             PI =4;
    }
}

结果如图所示:

这里会报错,PI不能被重新赋值
在这里插入图片描述

实例2.修饰方法

public class Testfinal {
    public static void main(String[] args) {
      Student s=new Student();
      s.run();
    }
}
    class Person {
        public final void run() {
            System.out.println("正在运动");
        }
    }
class Student extends Person{
    public void run(){
        System.out.println("正在打篮球");
    }
}

结果如图所示:
final修饰的方法不能被重写,这里开发工具给我们的报错修改是删掉修饰run()方法的final。
在这里插入图片描述删掉以后我们看看结果如何:

public class Testfinal {
    public static void main(String[] args) {
      Student s=new Student();
      s.run();
    }
}
    class Person {
        public void run() {
            System.out.println("正在运动");
        }
    }
class Student extends Person{
    public void run(){
        System.out.println("正在打篮球");
    }
}

运行结果如图所示:

在这里插入图片描述

实例3.修饰类

public class Testfinal {
    public static void main(String[] args) {
      
    }
}
   final class Person {
        public void run() {
            System.out.println("正在运动");
        }
    }
class Student extends Person{
    
}

结果如下图所示:
Person不能被继承,同样的我们把修饰Person类的final删掉,程序就不会报错了
在这里插入图片描述

相关文章
|
5天前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
18 3
|
3天前
|
存储 安全 Java
了解final关键字在Java并发编程领域的作用吗?
在Java并发编程中,`final`关键字不仅用于修饰变量、方法和类,还在多线程环境中确保对象状态的可见性和不变性。本文深入探讨了`final`关键字的作用,特别是其在final域重排序规则中的应用,以及如何防止对象的“部分创建”问题,确保线程安全。通过具体示例,文章详细解析了final域的写入和读取操作的重排序规则,以及这些规则在不同处理器上的实现差异。
了解final关键字在Java并发编程领域的作用吗?
|
12天前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
19 5
|
18天前
|
缓存 安全 Java
Java中 final、finally、finalize 有什么区别?
本文详细阐述了Java中`final`、`finally`和`finalize`的区别:`final`用于修饰类、方法和变量以表示不可变性;`finally`是用于确保在`try-catch`结构中无论是否发生异常都能执行的代码块;而`finalize`是`Object`类的方法,用于在对象被垃圾回收前执行清理工作,但在JDK 9中已被标记为弃用。
14 0
Java中 final、finally、finalize 有什么区别?
|
18天前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
68 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
1月前
|
Java 编译器 数据安全/隐私保护
Java 重写(Override)与重载(Overload)详解
在 Java 中,重写(Override)和重载(Overload)是两个容易混淆但功能和实现方式明显不同的重要概念。重写是在子类中重新定义父类已有的方法,实现多态;重载是在同一类中定义多个同名但参数不同的方法,提供多种调用方式。重写要求方法签名相同且返回类型一致或为父类子类关系,而重载则关注方法参数的差异。理解两者的区别有助于更好地设计类和方法。
|
16天前
|
存储 安全 Java
了解final关键字在Java并发编程领域的作用吗?
了解final关键字在Java并发编程领域的作用吗?
|
17天前
|
Java 程序员 编译器
【Java】继承、super、final、子类构造方法
【Java】继承、super、final、子类构造方法
18 0
|
18天前
|
安全 Java 编译器
了解final关键字在Java并发编程领域的作用吗?
【10月更文挑战第8天】在Java并发编程中,`final`关键字具有重要作用,包括保证变量的可见性和不可变性,防止对象引用被意外修改,并帮助编译器优化读取操作及消除不必要的同步。通过确保变量不可变,`final`增强了多线程环境下的安全性与性能。
|
2月前
|
Java
描述 Java 中的重载和重写
【8月更文挑战第22天】
17 0