final方法 类的使用和陷阱,final private 与继承重写的陷阱

final方法

  • 将方法定义为final,可以防止子类重写覆盖。同时定义为final的方法的执行效率,将远大于非final方法
  • 如果一个方法被设置为private 那个这个方法就无法被子类(其他类)调用,自然无法重写,所以定义为private的方法被隐式的定义为final 因此无需将一个final的方法再修饰为private,否则还会有其他情况发生。
  • final方法可以被子类继承。
public class Temp {
	public static void main(String[] args) {
		Student stu = new Student();
		stu.study(); //学习
		
	}
}

class Person{
	String name;
	int age;
	final void study() {
		System.out.println("学习");
	}
}
class Student extends Person{
//	 public void study() {  final修饰的方法不可以被重写
//		// TODO Auto-generated method stub
//
//	}
}

实例:
这里:重写必须满足一个条件:一个对象向上转型为它的基本类型并能调用相同方法

public class Test02 {
/**这里表面上子类的doit3方法覆盖了父类的doit3
 * 但是重写必须满足一个条件:一个对象向上转型为它的基本类型并调用相同方法,*/
public static void main(String[] args) {
	Child ch = new Child();
	ch.doit1();
	Father f = ch;
//		f.doit1();  //报错 子类向上转型后无法调用doit1方法 说明子类的doit1只是新建了一个方法
	f.doit2();
	f.doit3();
}
}
class Father{
	final private void doit1() {
		System.out.println("父类doit1");
	}
	final void doit2() {
		System.out.println("父类doit2");
	}
	void doit3() {
		System.out.println("父类doit3");
	}
}
class Child extends Father{
	public final void doit1() {
		System.out.println("子类doit1");
	}

	//	final void doit2() {  			final方法不能被重写
	//		System.out.println("子类doit2");
	//	}

	@Override
	void doit3() {
		System.out.println("子类doit3");
	}
}

所以说明子类的doit1只是新建了一个方法。

final类

1.如果希望有个类不被继承,并且不允许其他人对这个类进行任何改动。可以将这个类的设置为final
2.final类中的方法都被隐式的设置为final形式,但是final类中的成员变量可以被定义为final或非final。

public class Test3 {
	public static void main(String[] args) {
		Temp1 tt = new Temp1();
		System.out.println(tt.i); //4
		System.out.println(tt.e);  //88
		tt.method1(); //方法1
		tt.method2(); //方法2
	}
}
final class Temp1{
	int i = 4;
	final int e = 88;
	void method1() {
		System.out.println("方法1");
	}
	final void method2() {
		System.out.println("方法2");
	}
}

final private 与继承重写的陷阱

1.当一个方法被定义为final的时候,在子类中无法被重写,但是由于子类继承了父类的所有方法属性(不能调用私有方法和构造方法),在子类中可以直接调用,在其他类创建该类对象后,也可以调用。
在这里插入图片描述
2.当一个方法被定义为private的时候,那个这个方法就无法被子类(其他类)调用,自然无法重写,所以定义为private的方法被隐式的定义为final
在这里插入图片描述
再来看private方法能否被重写
在这里插入图片描述
3.将方法定义为 private final ,则无法被子类重写,无法被子类调用无法被其他类调用

将方法定义为private final,无法被子类重写。
在这里插入图片描述
无法被子类调用,无法被其他类调用
在这里插入图片描述

总结:
方法被final修饰:无法被重写,子类可以直接调用,其他类创建对象后可调用

方法被private修饰:无法被重写,子类无法调用,其他类也无法调用

方法被private final修饰:无法被重写,子类无法调用,其他也没法调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值