Java静态属性和方法的继承问题

原创 2016年06月01日 13:46:03

今天在看《Head First设计模式》的工厂方法时,文中提到简单工厂方法采用静态方法的不足:不能通过继承来改变创建方法的行为。平时没有注意到这一点,查了些资料和做了些实验,特此记录下来。

Parent.java类

public class Parent {
    public String normalStr = "Normal member of parent.";
    public static String staticStr = "Static member of parent.";

    public void normalMethod(){
        System.out.println("Normal method of parent.");
    }

    public static void staticMethod(){
        System.out.println("Static method of parent.");
    }
}

Child.java类

public class Child extends Parent {
    public String normalStr = "Normal member of child.";
    public static String staticStr = "Static member of child.";

    public void normalMethod(){
        System.out.println("Normal method of child.");
    }

    public static void staticMethod(){
        System.out.println("Static method of child.");
    }
}

测试类Main.java类

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        System.out.println(child.normalStr);
        System.out.println(Child.staticStr);
        child.normalMethod();
        Child.staticMethod();

        System.out.println("-------------------------------------------------");

        Parent child1 = new Child();
        System.out.println(child1.normalStr);
        System.out.println(Parent.staticStr);
        child1.normalMethod();
        Parent.staticMethod();
    }
}

得到的结果:

Normal member of child.
Static member of child.
Normal method of child.
Static method of child.
-------------------------------------------------
Normal member of parent.
Static member of parent.
Normal method of child.
Static method of parent.

结论

对于非静态的属性和方法

  • 对于非静态属性,子类可以继承父类的非静态属性。但是当子类和父类有相同的非静态属性时,并没有重写并覆盖父类的非静态属性,只是隐藏了父类的非静态属性。
  • 对于非静态的方法,子类可以继承父类的非静态方法并可以重写覆盖父类的非静态属性方法。

对于静态的属性和方法

  • 对于静态的属性,子类可以继承父类的静态属性。但是和非静态的属性一样,会被隐藏。
  • 对于静态的方法,子类可以继承父类的静态方法。但是子类不可重写覆盖父类的静态方法,子类的同名静态方法会隐藏父类的静态方法。
版权声明:本文为博主原创文章,未经博主允许不得转载。

Java静态属性和方法的继承问题

对Java静态属性和静态方法继承的一个总结。
  • LiuConey
  • LiuConey
  • 2016年06月01日 13:46
  • 1915

JAVA静态方法是否可以被继承?

结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 原因: 1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用...
  • zhouhong1026
  • zhouhong1026
  • 2014年02月12日 13:05
  • 30791

Java中子类是否可以继承父类的static变量和方法而呈现多态特性

静态方法通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明为static的方法有以下几条限制: 它们仅能调用其他的static 方法。 ...
  • u010412719
  • u010412719
  • 2015年10月19日 19:45
  • 4766

java中静态属性和和静态方法的继承问题 以及多态的实质

转载地址:点击打开链接 首先结论是:java中静态属性和和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏。 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成的,不需继...
  • lwang_IT
  • lwang_IT
  • 2017年12月23日 19:45
  • 80

Java静态属性与静态方法能否被继承的问题

原文链接:点击打开链接 结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 原因: 1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完...
  • Carmelo_Z
  • Carmelo_Z
  • 2017年03月27日 23:25
  • 267

java中静态属性和和静态方法的继承问题 以及多态的实质

来源http://blog.sina.com.cn/s/blog_7ffb8dd5010120qn.html 首先结论是:java中静态属性和和静态方法可以被继承,但是没有被重写(overwrite)...
  • shanshan_blog
  • shanshan_blog
  • 2016年12月14日 20:04
  • 218

java中静态块,静态属性,方法的加载顺序(网友反映有问题,请仔细验证,不想误人子弟,有空再改改)

这两天遇到几个类似的问题,就是一个程序到底是怎么运行的,而且这些问题很具有迷惑性,这里两个例子做分析( 实际上一切都在黑马的免费视频中有体现 ) ! 问题一:如下代码的执行顺序是什么样的!一定理...
  • yufaw
  • yufaw
  • 2012年07月17日 06:55
  • 11564

Java静态方法继承问题

原文结论:   java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 原因: 1)   静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要...
  • baidu_26557521
  • baidu_26557521
  • 2016年09月25日 16:51
  • 69

java继承时候关于父类中的静态方法的问题

通过eclipse的代码测试,得到如下的结论: 1.我写了个父类,又写了个子类,子类中没有任何方法,父类中有一个静态方法,然后我在main方法中创建了一个子类的对象,并且是用子类的引用去指向...
  • qq_36159851
  • qq_36159851
  • 2017年03月19日 19:41
  • 113

java的静态方法继承问题

结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏.   原因:           1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法...
  • qq_35448976
  • qq_35448976
  • 2017年07月10日 11:18
  • 2760
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java静态属性和方法的继承问题
举报原因:
原因补充:

(最多只允许输入30个字)