Java final类

final 具有“不可改变”的含义,他可以修饰非抽象类、非抽象成员方法和变量。

1、用final修饰的类不能被继承,没有子类。

2、用final修饰的方法不能被子类的方法重写或隐藏。

3、用final修饰的变量表示常量,只能被赋值一次。

4、父类中的用private修饰的方法不能被子类的方法重写,因此private类型的方法默认为是final类型的。

final类的使用

1、不是专门为继承而设计的类,类本身的方法之间有复杂的调用关系。如果随意创建这些类的子类,子类有可能错误的修改父类的细节。

2、出于安全的原因,类的实现细节不允许有任何改动。

3.、在创建对象模型时,确信这个类不会再被扩展。

final方法

假如父类允许子类继承父类的某些方法或重写某些方法,但保留某些方法,时这些方法不能被继承,那么父类可以将这些方法声明为final类型。如果父类的某个方法是private,子类将无法继承该方法,自然也就无法重写或隐藏该方法。

package javademo;
class Parent{
	private final void method1(){//定义method1()方法为final方法
		System.out.println("Parent.method1()");
	}
	final void method2(){
		System.out.println("Parent.method2()");
	}
	public void method3(){
		System.out.println("Parent.method3()");
	}
}
class Son extends Parent{
	public final void method1(){//在子类中定义一个method1()方法
		System.out.println("Son.method1()");
	}
//	final void method2(){ //final方法不能被重写
//		System.out.println("Son.method2()");
//	}
	public void method3(){
		System.out.println("Son.method3()");
	}
}
public class FinalMethod {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Son s  = new Son(); 
		s.method1();
		Parent p = s; //执行向上转型操作
//		p.method1(); //不能调用private方法
		p.method2();
		p.method3();
	}

}

作为final方法不能被子类重写或隐藏,例如method2()方法就不能在子类中被重写,但是在父类中定义了一个private final 的method1()方法,同时子类中也定义method1()方法,但这不是方法的重写。方法的重写的前提条件是只有子类能继承的实例方法才会被重写,而父类的method1()方法是不能被继承的,因此这个方法不能被重写,只是在子类中定义的新方法而已,着来年各个方法之间毫无法关系的。

final变量

一个变量被限定为final,其实是将它定义为一个符号常量。

final变量具有以下特点:

1、final修饰符可以修饰静态变量、实例变量、局部变量,分别表示静态常量、实例常量、局部常量。

2、final成员百年来那个应该是显式初始化,否则final类型的实例变量会导致编译错误


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值