java多态教程_java入门教程(六)多态

如何实现多态(域和静态方法是不具有多态性的,只有普通的方法调用可以是多态的)

重载:同一个类通过定义方法名相同且参数不同来实现多态

通过继承、重写、父类指向子类对象实现多态

class Super{

public int field=0;

public int getField(){return field;}

}

class Sub extends Super{

public int field=1;

public int getField(){return field;}

public int getSuperField(){return super.field;}

}

public class FieldAccess{

public static void main(String[] args){

Super sup=new Sub();

System.out.println("sup.field="+sup.field+",sup.getField="+sup.getField());

Sub sub = new Sub();

System.out.println("sub.field="+sub.field+",sub.getField="+sub.getField()+",sub.getSuperField="+sub.getSuperField());

}

}

输出结果:sup.field=0,sup.getField=1

sub.field=1,sub.getField=1,sub.getSuperField=0

解析:当Sub对象转型为Super引用时,任何域访问操作都由编译器解析,因此不是多态的,本例中,为Super.field和Sub.field分配了不同的存储空间。这样,Sub实际上包含两个称为field的域:它自己的和它从Super处得到的。然而,在引用Sub中的field时所产生的默认域并非Super的field域,因此为了得到Super.field,必须显示地指明super.field.

构造器中的多态

634665c4753f

图片.png

输出结果为:22 34 17

解析:

① 子类B中重写了父类A中的setValue方法

super(5) //调用了父类构造器,其中构造函数里面的setValue(value),调用的是子类的setValue方法

finally块中的this.setValue(value) //调用的也是子类的setValue方法

而子类setValue方法中的super.setValue(2*value); //调用的是父类A的setValue方法

② try...catch...finally块中有return返回值的情况

finally块中虽然改变了value的值,但try块中返回的应该是return之前存储的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值