多态适用性

多态只适用于普通方法,不适用于 private / final 修饰的方法(因为这类方法不能被子类重写),也不适用于域(成员变量) 或静态方法

1. 多态不适用于域(成员变量)


public class FieldAccess {
    public static void main(String[] args) {
        Super sup = new Sub();
        System.out.println("sup.field="+sup.field+",sup.getField = "+sup.getField());
       //   sup.field=1,sup.getField = 2
        Sub sub = new Sub();
        System.out.println("sub.field="+sub.field+",sub.getField = "+sub.getField());
       //    sub.field=2,sub.getField = 2

    }
}

class Super {
    public int field = 1;

    public int getField() {
        return field;
    }
}

class Sub  extends Super{
    public int field = 2;
    public int getField(){
        return field;
    }
}

域访问操作是编译器解析,编译时即决定域的归属,而方法访问是运行时根据对象的具体类型进行动态绑定

2. 多态不适用于静态方法

public class StaticSub extends StaticSuper{
    public static void method(){
        System.out.println("StaticSub");
    }

    public static void main(String[] args) {
        StaticSuper staticSuper = new StaticSub();
        staticSuper.method();  //  StaticSuper
    }
}
class StaticSuper{
    public static void method(){
        System.out.println("StaticSuper");
    }
}

注意: 父类的静态方法/ final 方法可以被继承,但final 方法不能被重写,static 方法:如果子类出现和父类完全一样的方法声明,则认为这个方法是子类特有的,不能被父类引用通过多态调用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 1,844评论 0 10
  • 按照以往的学习方式,每学一种编程语言都要先配置它的环境。因此,在正式写 Ruby 程序之前应该先配置环境。看这里,...
    芝麻香油阅读 443评论 0 1
  • 《 PRD怎么写 》观后笔记 MRD(市场需求文档):市场需求、市场机遇、产品概念 PRD表现形式:word、wi...
    文文文文西阅读 767评论 0 4
  • 对于日常的减肥,经常的吃一些粗粮是较为健康的方式,能够对于肠胃以及清除肠道油脂有着较好的效果,间接的刺激减肥,那么...
    晓宇减肥顾问阅读 340评论 0 0