`
langgufu
  • 浏览: 2307106 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java静态变量和静态函数是否可以被继承,重写!

阅读更多
可以的,做个实验就可以证明了:
//Test.java
class A{
static int i=9;
static void print(){System.out.println(i);}
}

class B extends A{}

public class Test{
public static void main(String[] args){
B.print();//这里B的print()就是A里面的
System.out.println(B.i);//这里B.i就是A.i
}
}

结果:
>java Test
9
9
>Exit code: 0


可以被继承的,但是不可以被重构
一个Java方法不能被子类override,也不支持多态性,并不奇怪。构造方法就是如此。TIJ说构造方法是隐含的静态方法,我同意这个说法。


举一个例子:
class Base
{
   public static void someMethod()
   {
     System.out.println("in static method of Base");
   }

}

class Derived extends Base
{
   public static void someMethod()
   {
     System.out.println("in static method of Derived");
   }

}

class Client
{
     public static void main(String[] args)
     {
Derived.someMethod();

Derived d = new Derived();
d.someMethod();

Base o = new Derived();
o.someMethod();

     }

}

执行时会打印出
in static method of Derived

in static method of Derived

in static method of Base

显然,到底执行哪一个静态方法,是由变量的明显类型决定的,而不是由对象的真实类型决定。这不是多态性的。
谁调用静态函数,执行的静态函数就属于谁!
分享到:
评论

相关推荐

    C++静态成员函数小结

    静态成员函数可以分为两部分:静态数据成员和静态函数成员。 一、静态数据成员 静态数据成员是类中的全局变量,它们遵守public、protected和private访问规则。静态数据成员的定义需要在cpp文件中进行,而不能在...

    JAVA函数使用手册

    在Java编程语言中,函数是实现特定功能的代码块,可以被多次调用,从而提高代码的重用性。这份“JAVA函数使用手册”可能是针对Java编程中的函数使用方法、设计原则以及常见问题的详细指南。以下是关于Java函数的一些...

    Java动态绑定和静态绑定.doc

    在Java中,非虚方法(final、private和静态方法)以及构造函数都是静态绑定的。例如: ```java class Animal { void sound() { System.out.println("Animal is making a sound"); } } class Dog extends Animal...

    课堂笔记08(静态代码块-继承-对象构造-方法重写-关键字

    静态代码块常用来初始化静态变量,确保在类的任何实例创建之前,这些变量已经被正确设置。例如: ```java class MyClass { static int counter = 0; static { counter++; System.out.println("Static block ...

    JAVA继承类求几何图形面积周长代码.doc

    1. Java继承:在Java中,继承是指一个类可以继承另一个类的成员变量和方法。继承可以代码重用和简化代码的编写。 2. 多态:在Java中,多态是指一个类可以有多种不同的行为方式。多态可以通过方法重写和方法重载来...

    java 函数速查CHM

    静态函数可以直接通过类名调用,而非静态函数必须先创建对象再调用。 11. **访问修饰符**:如`public`, `private`, `protected`和默认(包访问),控制函数的访问权限。 12. **default方法**:在接口中定义的方法...

    java基础类与继承.ppt

    静态变量被所有类的对象共享,而静态方法可以直接通过类名调用,无需创建对象。 - **final**:`final`关键字用于声明不可变的变量或方法。一旦变量被声明为`final`,其值就不能更改。对于方法,如果声明为`final`,...

    JAVA进阶-Java继承,多态,重写,修饰符以及super与this使用,Oject对象

    在Java编程语言中,继承、多态、重写、修饰符以及`super`和`this`的使用是面向对象编程的核心概念。这些知识点对于理解和编写高效、可维护的代码至关重要。 1. **Java继承**: Java继承允许一个类(子类)继承另一...

    java_中的_final_变量[文].pdf

    静态变量的初始化顺序先于非静态变量,而构造函数的执行顺序遵循继承链,从父类到子类。 多态是面向对象编程的一个核心概念,它允许父类类型的引用指向子类对象。非`final`方法可以被子类覆盖,因此在运行时根据...

    非自动继承的函数

    因此,它们不参与继承,子类不能重写或覆盖父类的静态成员函数,但可以定义自己的静态成员函数。 4. **模板成员函数**:模板成员函数不是在编译时为每个类型实例化,所以子类也不会自动继承它们。如果子类需要相同...

    java关键字总结

    关键字static用于定义类级别成员,比如静态变量和静态方法。这些成员属于类本身,而不是类的实例。静态变量被所有实例共享,且在类加载时就分配了存储空间。静态变量的初始化通过static代码块完成,这个代码块仅在类...

    C++虚函数、this指针相关知识

    虚函数的主要特点是可以在子类中被重写,使得子类可以具有父类的各种属性和方法。虚函数的定义需要在基类中使用virtual关键字,子类中使用override关键字来重写虚函数。 谈 this 指针 this指针是C++中一个非常重要...

    java继承详解

    - 在静态方法中,不能直接访问非静态成员变量或非静态方法,但可以访问静态成员变量和静态方法。 总结来说,通过继承可以有效地复用代码并建立类间的层次结构,`final`和`static`关键字可以帮助控制代码的行为和...

    Java 程序显示类中 Static 关键字的用法.docx

    静态变量是 Java 中的一种特殊类型的变量,当变量被声明为静态时,就会创建该变量的单个副本,并在类级别的所有对象之间共享。静态变量本质上是全局变量。该类的所有实例共享相同的静态变量。 静态变量的要点: 1....

    Qt绘制sin函数静态波形

    总结来说,"Qt绘制sin函数静态波形"项目是学习Qt编程和图形绘制的一个好起点,它涵盖了Qt的UI设计、自定义绘图、事件处理以及用户交互等多个核心概念。通过实践,开发者可以深入理解Qt框架,并能将其应用于更广泛的...

    java学习笔记 继承 重载 覆盖

    类变量(静态变量)是所有类实例共享的,可以通过类名直接访问,而实例变量是每个对象独有的。类方法(静态方法)同样可以被类名直接调用,它无法访问非静态成员,因为静态方法与特定实例无关。 封装是面向对象编程...

    Java岗面试核心MCA版.pdf

    1. 静态变量和实例变量的区别:静态变量是类的变量,而实例变量是对象的变量。 2. 静态方法和实例方法的区别:静态方法是类的方法,而实例方法是对象的方法。 内部类 1. 内部类的分类:静态内部类、成员内部类...

    《java面向对象程序设计-继承和多态》教案.doc

    面向对象编程是Java的核心特性,本教程主要涵盖了三个关键概念:封装、继承和多态,以及相关的访问修饰符和方法修饰符。 封装是面向对象编程的基础,它涉及到将数据(属性)和操作这些数据的方法(行为)组合在一个...

    Java计算机语言函数应用

    Java计算机语言函数应用是编程学习中的重要组成部分,它涉及到如何在Java程序中高效地组织和执行特定任务。函数,也称为方法,在Java中扮演着核心角色,它们是代码的可重用模块,允许我们通过调用一个名字来执行一...

Global site tag (gtag.js) - Google Analytics