JAVA学习笔记

 类中所有的private方法都隐式地指定为是final的。如果你试图覆盖一个private方法(隐含是final的),似乎是奏效的,而且编译器也不会提示错误信息:

//: reusing/FinalOverridingIllusion.java

// It only looks like you can override

// a private or private final method.

import static net.mindview.util.Print.*;

class WithFinals {

// Identical to "private" alone:

private final void f() { print("WithFinals.f()"); }

// Also automatically "final":

private void g() { print("WithFinals.g()"); }

}

class OverridingPrivate extends WithFinals {

private final void f() {

print("OverridingPrivate.f()");

}

private void g() {

print("OverridingPrivate.g()");

}

}

class OverridingPrivate2 extends OverridingPrivate {

public final void f() {

print("OverridingPrivate2.f()");

}

public void g() {

print("OverridingPrivate2.g()");

}

}

public class FinalOverridingIllusion {

public static void main(String[] args) {

OverridingPrivate2 op2 = new OverridingPrivate2();

op2.f();

op2.g();

// You can upcast:

OverridingPrivate op = op2;

// But you can’t call the methods:

//! op.f();

//! op.g();

// Same here:

WithFinals wf = op2;

//! wf.f();

//! wf.g();

}

} /* Output:

OverridingPrivate2.f()

OverridingPrivate2.g()

*///:~

 

 

定义为static的东西只会被。加载一次。

只有非private方法才可以被覆盖。

如果某个方法是静态的,它的行为就不具有多态性。静态方法是与类,而并非与单个对象相关联的。

 

接口可以包含域,但是这些域隐式地是staticfinal的。

可以先把在接口中显式地将方法声明为public的,但即使不这么做,它们也是public的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值