final修饰符(5)-final方法

  final修饰的类的方法不能被重写,例如如果父类不希望子类重写某个方法,则可以使用final修饰符修饰该方法

  在java的Object类里面有一个final方法:getClass(),因为Java不希望任何类重写这个方法,所有使用final方法封装起来,但对于该类提供的toString()和equals()方法,都允许子类重写,因此都没有用final修饰

代码示例:

package com.j1803.finalTest;
public class FinalMethodTest1 extends Test{
    //编译错误
    public void show(){};
    public static void main(String[] args) {
    }
}
class Test{
    public final void show(){};
}

  子类试图重写父类的final方法,编译错误

  对于一个private修饰的父类方法,因为其仅在当前类中可见,其子类无法访问该方法,所以子类无法重写该方法,如果在子类中定义了一个与父类private方法有相同方法名,参数列表相同,返回值相同的方法,

也不是重写,只是定义了一个新方法,因此,即使使用final修饰一个private访问权限的方法,依然可以在其子类中定义与该方法具有相同方法名,相同参数列表,相同返回值类型的方法

package com.j1803.finalTest;

public class FinalMethodTest1 extends Test{
    //编译错误
    public void show(){};
    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }
}
class Test{
    //修改public 为private
    private final void show(){};
}

  final修饰的方法仅仅是不能被重写,并不是不能被重载

package com.j1803.finalTest;
public class FinalMethodTest1{
    public final void show(){};
    public final void show(Object obj){};
    public static void main(String[] args) {
    }

}

原文地址:https://www.cnblogs.com/shadow-shine/p/9614072.html

时间: 2024-10-16 07:40:01

final修饰符(5)-final方法的相关文章

final修饰符(6)-final类

final修饰的类不可以有子类,例如:java.lang.Math类就是一个final类,它不可以有子类 子类继承父类,可以访问父类的内部数据,可以重写父类的方法来改变父类方法的实现细节,可能导致不安全因素:为了保证某个类不可被继承,则可以使用fianl修饰这个类, 代码示例: public final class FinalClass{} //下面的类定义将出现错误 class Sub extends FinalClass{} FinalClass为final类,不能被继承,编译错误 ====

Java中的(构造方法、方法重载、final修饰符使用及继承和抽象)

构造方法: 构造方法的名称和类名相同,没有返回类型,参数列表(类型.个数)不同 方法重载:成员方法和构造方法都可以进行重载 方法名相同但是参数列表(类型,个数)不同,成为方法的重载. 继承:直支持单继承,一个类只能有一个父类 继承要用extends关键字修饰 public class Dog extends Pet{ //方法体 } 子类调用父类公用的成员变量和方法需使用关键字super 如super.方法名 super(成员变量,成员变量....) 方法重写: 方法重写的需求: 1.重写方法和

方法重写、方法重载、final修饰符

方法重载(两同一不同) 同一个类中,方法名相同,形参列表不同 至于返回值类型,访问修饰符与方法重载没有任何关系 可变参数列表 可变参数必须是最后一个参数 带可变参数的方法最后被访问(调用) 数组可以传给可变参数,反之不行 同类型数组与可变参数无法构成方法重载 一个方法只能有一个可变参 方法重写(两同两小一大) 方法名 相同,形参列表 相同 子类方法 返回值类型 必须比父类方法返回值类型“更小”或相等: 子类方法 抛出的异常 比父类方法声明抛出的异常“小”或相等 子类方法的 访问权限 比父类大或相

final修饰符

final修饰变量时,表示该变量一旦获得了初始值就不可改变, 由于final变量获得初始值之后不能被重新赋值,因此final修饰成员变量和修饰局部变量时有一定的不同. 5.4.1final成员变量 成员变量是随类初始化或对象初始化而初始化的, 当类初始化时,系统会为该类的类变量分配内存,并分配默认值: 当创建对象时,系统会为该对象的实例变量分配内存,并分配默认值. java语法规定:final修饰的成员变量必须由程序员显式地指定初始值 归纳: final修饰的类变量,实例变量 能指定初始值的地方

final修饰符,多态,抽象类,接口

1.final修饰符 final可以修饰类,该类不能被继承. final可以修饰方法,该方法不能被重写.(覆盖,复写) final可以修饰变量,该变量不能被重新赋值.因为这个变量其实常量 2.多态 同一个对象(事物),在不同时刻体现出来的不同状态. 举例:        猫是猫,猫是动物.        水(液体,固体,气态). 多态的前提: A:要有继承关系.        B:要有方法重写.            其实没有也是可以的,但是如果没有这个就没有意义.              

static修饰符与final修饰符

■ static修饰符与final修饰符: ★ static修饰符: 1. 修饰的对象: 类中的成员(属性[静态变量或类变量]和方法[静态方法或类方法]) 2. 静态属性的特点: 1. 静态变量被所有对象共享 2. 随着类的加载而加载,随着类的消失而消失,和对象的创建无关 3. 可以直接被类名调用 3. 静态方法的特点: 1. 静态方法优先于对象存在,在静态方法中无法访问与对象相关的实例变量(这时候对象还没有创建,其属性也就没有) 2. 静态方法无法访问实例变量 3. 静态方法可以访问静态变量

JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配

Java栈与堆 堆:顺序随意 栈:后进先出(Last-in/First-Out). Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放.堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据.但缺点是,由于要在运行时动态分配内存,存取速度较慢. 栈的优势是

final修饰符—不可变

final 修饰符 修饰类 不可以有子类 修饰变量 变量一旦获得初始值就不可改变,不能被重新赋值 成员变量:初始值必须有程序员显式设置,系统不会对其隐式初始化 类变量:静态初始化块 | 声明该类变量时      实例变量:非静态初始化块 | 声明该实例变量时 | 构造器中      局部变量:初始值必须有程序员显式设置,系统不会对其隐式初始化                 定义变量时指定 | 后面代码中指定                 形参变量由传入参数值来完成初始化,故不能被赋值    

final修饰符的难点记录

今天看到了final字段这块,把不会的或者难点记录下来. 第一,空白final. 书上说的有点绕,说空白final更灵活.但之前又说过final变量必须进行初始化,这是什么意思呢,二者难道有冲突吗? 其实空白final的核心就是:构造器赋值. <script src="https://code.csdn.net/snippets/401447.js"></script> 第二,static final 同 final 的区别. 以前我提过,static字段只会初