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中子类是否可以继承父类的static变量和方法而呈现多态特性

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

JAVA的静态变量、静态方法、静态类

静态变量和静态方法都属于静态对象,它与非静态对象的差别需要做个说明。 (1)Java静态对象和非静态对象有什么区别?       比对如下:          ...

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

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

JAVA静态方法是否可以被继承?(对原文做了修改)

结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. (王员外笔记:对,这里官方叫法是hide,牛逼)  原因:   1). 静态方法和属性是属于类的,调...

java中静态代码块的用法 static用法详解

 java中静态代码块的用法 static用法详解 url: http://www.cnblogs.com/panjun-Donet/archive/2010/08/10/1796209....
  • jackpk
  • jackpk
  • 2015-12-09 14:41
  • 5494

类的static成员变量和成员函数能被继承吗

1.   父类的static变量和函数在派生类中依然可用,但是受访问性控制(比如,父类的private域中的就不可访问),而且对static变量来说,派生类和父类中的static变量是共用空间的,这点...

静态(static)方法的继承和重写

静态方法大家应该都比较熟悉,在这里主要谈一下静态方法在继承时的一些注意事项。 1、父类方法如果是静态方法,子类不能覆盖为非静态方法;2、父类方法如果是非静态方法,子类不能覆盖为静态方法;3、父类静态方...

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

来源http://blog.sina.com.cn/s/blog_7ffb8dd5010120qn.html 首先结论是:java中静态属性和和静态方法可以被继承,但是没有被重写(overwrite)...

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

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

java的静态方法继承问题

结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏.   原因:           1). 静态方法和属性是属于类的,调用的时...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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