java多态性中关于private的一个例子

在java的多态性中有这样一句话,除了static和final方法除外,

java的所有方法都参用了后绑定,但private默认就是final的,所以以下的程序可能有点不好理解

public class Test3 {
    private void f(){
       System.out.println("private f()");
    }
    public static void main(String[] args){
        Test3 obj = new Derived();
        obj.f();
    }
}
class Derived extends Test3{
    public void f(){
        System.out.println("public f()");
    }
}

由于基类中的f()方法被定义成了private,那么他的意思就不具备后绑定了,

实际的结果就是:private f();

但如果把Test3中的private改成public或protected的,那么结果就又不同了

结果是:public f();

这就是采用动态绑定的特点,当然我们也可以用private,根据实际需要是否要采用动态绑定. 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个简单的Java代码示例来说明多的用处: 假设我们有一个基类 `Shape`,和两个派生类 `Rectangle` 和 `Circle`,它们都有一个公共的成员函数 `calcArea()`,但实现方式不同,比如: ```java public class Shape { public double calcArea() { // 基类的默认实现 return 0.0; } } public class Rectangle extends Shape { private double width; private double height; public Rectangle(double width, double height) { this.width = width; this.height = height; } @Override public double calcArea() { return width * height; } } public class Circle extends Shape { private double radius; public Circle(double radius) { this.radius = radius; } @Override public double calcArea() { return Math.PI * radius * radius; } } ``` 现在我们可以创建一个存储基类对象的数组,然后向其添加多个派生类实例,比如: ```java Shape[] shapes = new Shape[2]; shapes[0] = new Rectangle(3.0, 4.0); shapes[1] = new Circle(2.0); ``` 然后我们可以遍历这个数组,调用其每个实例的 `calcArea()` 函数,例如: ```java for (Shape shape : shapes) { System.out.println("Area of " + shape.getClass().getSimpleName() + ": " + shape.calcArea()); } ``` 这里就体现了多的用处:我们只需要用基类引用指向不同的派生类对象,就可以通过调用它们的共同函数来执行不同的实现代码。这样就方便了代码的扩展和维护,也提高了代码的复用和灵活

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值