[java]抽象方法不能使用的修饰符

抽象方法不能使用的修饰符

private

private 修饰的方法不能被子类继承, 而抽象方法要求必须由子类实现, 因此互相矛盾.

final

final 修饰的方法不能被子类重写, 而抽象方法必须由子类实现, 互相矛盾.

static

如果一个方法既是 abstract 又是 static,则意味着这个方法应该在类层级上存在(因为是 static),同时还必须由具体子类实现(因为是 abstract)。这在逻辑上是矛盾的:静态方法不需要依赖实例,抽象方法却需要通过实例来实现,这就导致冲突。

private 注意点

private修饰的函数无法被子类重写, 如果子类中有同名函数, 则这两个函数不是各自独立的, 不是重写关系.
(1)

public class Test {
    public static void main(String[] args) {
        BB b=new BB();
        b.callT1();
    }
}

class AA {
    private void t1(){
        System.out.println("AA:t1");
    }
    public void callT1(){
        t1();
    }
}
class BB extends AA{
    public void t1(){
        System.out.println("BB:t1");
    }
}

输出:

AA:t1

(2)

public class Test {
    public static void main(String[] args) {
        BB b=new BB();
        b.callT1();
    }
}

class AA {
    public void t1(){
        System.out.println("AA:t1");
    }
    public void callT1(){
        t1();
    }
}
class BB extends AA{
    public void t1(){
        System.out.println("BB:t1");
    }
}

输出:

BB:t1

两份代码只是AA类中t1()的修饰符private改为public, 根据动态绑定机制可知, 在(1)中如果BB中有重写AA类的t1()的话, 那么就应该调用BBt1(), 但是, (1)中调用的是AAt1(), 说明BB中的t1()并不是对AAt1()的重写.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值