静态方法不能重写

1.静态方法是使用公共内存空间的,就是说所有对象都可以直接引用,不需要创建对象再使用该方法。

class Cat{
    protected static String color ="random";

    public void showCatColor(){
        System.out.println("Cat : "+color);
    }
    public static void staticShowColor(){
        System.out.println("Cat static  : "+color);
    }
}

class WhiteCat extends Cat{
    protected static String color ="white";

    public void showCatColor(){
        System.out.println("WhiteCat :"+color);
    }
    public static void staticShowColor(){
        System.out.println("WhiteCat static :"+color);
    }
}

2.测试

面试官看了结果后,直接叫我回去。

    public static void main(String[] args) {

//            WhiteCat whiteCat = new WhiteCat();
//            Cat cat = whiteCat;
//            cat.staticShowColor();
//            cat.showCatColor();
            /**
             * Cat static  : random
             * WhiteCat :white
             */

//        Cat cat = new WhiteCat();
//        WhiteCat whiteCat = (WhiteCat)cat;    //其实和上面的那段代码是相同的
//        cat.staticShowColor();                //都是调用父类的静态方法,输出父类的静态变量
//        cat.showCatColor();
        /**
         * Cat static  : random
         * WhiteCat :white
         */

//            Cat cat = new Cat();
//            WhiteCat whiteCat = cat; //cannot convert from Cat to WhiteCat
//            cat.staticShowColor();
//            cat.showCatColor();

    }

静态方法不能重写

时间: 2024-11-03 00:32:00

静态方法不能重写的相关文章

java静态方法的重写,为什么不能?

JAVA静态方法形式上可以重写,但从本质上来说不是JAVA的重写.因为静态方法只与类相关,不与具体实现相关,声明的是什么类,则引用相应类的静态方法(本来静态无需声明,可以直接引用),看下例子: Java代码   class Base{ static void a( ){System.out.println("A");  } void b( ){System.out.println("B"); } } public class  Inherit extends Bas

Java 静态方法不能重写

强调 静态方法是属于类的,只存在一份,会被该类的所有对象共享 静态方法可以被子类继承,但是不可以被子类重写 class door{ } class wood_Door extends door{ } class math{ static public door getMes() { return new door(); } } public class HelloWorld extends math { public static wood_Door getMes() { return new

继承中静态方法不能被重写

本文链接:https://blog.csdn.net/gao_zhennan/article/details/72892946 解释的很清楚 答案很明确:java的静态方法不能被重写. 静态成员(方法或属性)是类的成员存放在栈中,类可以直接调用(是属于类的静态成员,当然对象也可以调用,只是说你可以使用而已):实例成员是对象的成员,存放在堆中,只能被对象调用. 重写的目的在于根据创造对象的所属类型不同而表现出多态.因为静态方法无需创建对象即可使用.没有对象,重写所需要的“对象所属类型” 这一要素不

类与接口(五)java多态、方法重写、隐藏

一.Java多态性 面向对象的三大特性:封装.继承.多态. 多态的类型,分为以下两种: 编译时多态: 指的是 方法重载.编译时多态是在编译时确定调用处选择那个重载方法,所以也叫 静态多态,算不上真正的多态.所以,一般说的多态都是运行时的多态. 运行时多态: 由于 方法重写,所以想要确定引用变量所调用的方法的入口,必须根据运行时的引用变量所指向的实例对象来确定.从而使得同一个引用变量调用同一个方法,但不同的实例对象表现出不同的行为.再简单点来说,就是在运行时,可以通过指向基类的指针,来调用实现子类

java-方法重写的注意事项

1.父类中私有方法不能被重写.因为父类的私有方法子类根本就无法继承. 2.子类重写父类方法时,访问权限不能更低.最好就一致. 3.父类静态方法,子类也必须通过静态方法进行重写.其实这个算不上方法重写,但是现象确实如此.(静态只能覆盖静态) 4.子类重写父类方法的时候,最好声明一模一样. 原文地址:https://www.cnblogs.com/hfumin/p/10134391.html

Java常见面试题02-方法重写和方法重载的区别?方法重载能改变返回值类型吗?

方法重写和方法重载的区别?方法重载能改变返回值类型吗?       A:Override方法重写和Overload方法重载的区别? Overload是否可以改变返回值类型?可以 方法重写 •  子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写. •  使用特点: •   如果方法名不同,就调用对应的方法 •   如果方法名相同,最终使用的是子类自己的 父类方法重写格式:super.父类成员方法名 •  方法重写的注意事项   父类中私有方法不能被重写   子类重写父类方法时,访

重写(override)

override也叫做覆盖 子类方法名称必须与父类方法名称一致 参数列表一致 返回类型一致或父类方法返回类型的子类类型 修饰符不能缩小范围 构造方法不能重写 属性不能重写 静态方法不能重写 私有方法不能重写 原文地址:https://www.cnblogs.com/huochemeiyouhuo/p/12165816.html

java面试一定会遇到的56个面试题

1.问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示"main方法不是public的". 2.问题:Java里的传引用和传值的区别是什么? 答案:传引用是指传递的是地址而不是值本身,传值则是传递值的一份拷贝. 3.问题:如果要重写一个对象的equals方法,还要考虑什么? 答案:hashCode. 4.问题:Java的"一次编写,处处运行"是如何实现的? 答案:Java程序会被编译成字节码组成的class文件,这些字节码可以

类与对象

1.1 类和对象的关系   为什么要采用面向对象思想进行程序设计与开发 1.可以实现代码的复用 2.符合人思考的方式   类和对象的定义 1.类的定义:用class关键修饰的叫做类 2.对象的定义:类名定义的数据类型   类和对象之间关系 1.由对象归纳为类,是归纳对象共性的过程 2.在类的基础上,将状态和行为实体化为对象的过程为实例化   1.2 定义类   定义类的语法,类主要由成员变量和成员方法构成(暂不提构造函数) eg: publicclassStudent { //成员变量 intn