private与static的方法是不是默认为final的测试

读了thinkinjava后,说private与static的方法是final的,只是把final关键字给隐藏了。自己测试了下,


public class Father {
	private void privateSay(){
		System.out.println("father private say!");
	}
	public static void staticSay(){
		System.out.println("father static say");
	}
	public void publicSay(){
		System.out.println("father public say");
	}

	public static void main(String[] args) {
		Father f = new Sun();
		f.privateSay();
		f.publicSay();
		f.staticSay();
	}
}

public class Sun extends Father{

	@Override
	public void publicSay() {
		super.publicSay();
		System.out.println("sun public say!");
	}
	private void privateSay(){
		System.out.println("sun private say!");
	}
	public static void staticSay(){
		System.out.println("sun static say");
	}
	public static void main(String[] args) {
		Father f = new Sun();
		//f.privateSay();  //-->编译错误
		f.publicSay();
		f.staticSay();
	}
}

father类中打印出

father private say!

father public say

sun public say!

father static say
sub类打印出

father public say

sun public say!

father static say


可以看出private与static的方法是默认带有final的,是不能被 重载的,而只有非final的方法是才是后期绑定(执行期绑定)。所以private与static方法没有被重写。

而在Sun类内调用privateSay方法编译时报错 也就 验证了private方法是在前期绑定(编译期绑定)的,报错是因为privateSay是父类的私用方法,就算在子类内重新写了一个同名的方法也不能调用,这样才能保证父类中的私有方法不被覆盖。

staticSay是public但是final所以不能覆盖,最终打印出来的是:father static say。



再说下interface中的变量



public interface StaticVar {
	String  var = "interface var";	
}
public class StaticVarImp implements StaticVar {
	String  var = "implements var";
	
	public static void main(String[] args) {
		StaticVar sv = new StaticVarImp();
		System.out.println(sv.var);
	}
}

打印出来的是

interface var

接口中的成员变量 默认 是写成public static final的

public:接口是要被其它类实现的所以要用public关键字。

static:每个实现类都公用这个变量,static后内存中就只有一个变量。

final: 不能说在打印sv.var,会因为不能的实现,打印出来的值不同。这样就失去了接口的意义。

接口是概念级抽象,它不表示任何实体,而属性是用于表示某个对象特征,如果接口拥有非静态属性,那岂不违背了接口高度抽象的原则。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值