java 多态的特殊特性

最近一个阶段在学习java的多态特性,按照我个人的理解,首先多态的目的是为了更好的实现类型的兼容,其次如果子类覆盖了的方法时,如果把子类的对象赋给父类的应用,且调用父类接口的方法时,会调用子类中的方法,因为一个父类可能会有多个子类,那么在运行的过程中java是怎么知道具体是要调用那个子类中的方法的了?这个特性是由java中所谓的动态绑定的机制来保证的。就其多态本身而言不是很复杂,但是有三个比较容易绕的问题需要搞清楚,

(1)Pitfall: “overriding” private methods 即对于父类中的private 方法,子类不能进行覆盖,且用父类的引用调用private方法时只能调用父类中的方法

public class PiteFallPrivate {
private void print() {
System.out.println("PeteFallPrivate.....");
}

public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
PiteFallPrivate pfp = new T();
System.out.println(pfp.getClass().getName());

pfp.print();
}
}

class T extends PiteFallPrivate {
// @Override
public void print() {
System.out.println("T method output.....");
}
}

(2)Pitfall: fields and static methods 字段没有多态的特性,字段的值和应用有关系,而不会和具体的对象有关系

public class PiteFallField {
public static void main(String[] args) {
Super sup = new Sub();
System.out.println(sup.i);
System.out.println(sup.getI());
System.out.println(new Sub().getSuper());
System.out.println(new Sub().i);
System.out.println(new Sub().getI());
}
}

class Super {
inti= 0;

public int getI() {
return i;
}

public Super() {
System.out.println("Super init....");
i = 6;
}
}

class Sub extends Super {
inti= 1;

public Sub() {
System.out.println("Sub init....");
}

public int getI() {
return i;
}

public int getSuper() {
return super.i;
}
}

(3)static methods are associated with the class, and not the individual objects. static 方法的特性和字段相同

public class PitFallStaticMethod {
public static void print(){
System.out.println("base static method output....");
}
public void print2(){
System.out.println("base not static method output...");
}

public static void main(String[] args) {
PitFallStaticMethod pfs=new StaticMethodSub();
pfs.print();
pfs.print2();
}
}

class StaticMethodSub extends PitFallStaticMethod{
public static void print(){
System.out.println("sub static method output....");
}
public void print2(){
System.out.println("sub not static method output...");
}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值