• static关键字修饰后的父类方法不能被重写


       静态的方法可以被继承,但是不能重写。如果父类中有一个静态的方法,子类也有一个与其方法名,参数类型,参数个数都一样的方法,并且也有static关键字修饰,那么该子类的方法会把原来继承过来的父类的方法隐藏,而不是重写。通俗的讲就是父类的方法和子类的方法是两个没有关系的方法,具体调用哪一个方法是看是哪个对象的引用;这种父子类方法也不在存在多态的性质。

    Java不推荐用对象调用static方法,这会使人混淆,请大家注意。

    package august31.Test6;
    
    public abstract class Animal {
        String color;
            
        public Animal() {
            super();
        }
    
        public Animal(String color) {
            this.color = color;
        }
    
        public abstract void shut();
        //cry()方法不能重写
        public static void cry(){
            System.out.println("动物会流泪。");
        }
    }
    View Code
    package august31.Test6;
    
    public class Dog extends Animal{
        //必须要实现父类的抽象方法
        String name;
        
        public Dog() {
            super();
        }
    
        public Dog(String name,String color) {
            super(color);
            this.name = name;
        }
        
        public void shut() {
            System.out.println("汪汪汪");
        }
    
    }
    View Code
    package august31.Test6;
    
    public class Test6 {
    
        public static void main(String[] args) {
            //Animal animal = new Animal();//不能实例化对象
            
            Dog dog = new Dog("小黄","白色");
            dog.shut();
            dog.cry();
        }
    
    }
    View Code

      这也是为什么abstract修饰的method是不可同时是static的原因:

      abstract修饰方法,子类需要重写去实现,主要用于各个子类的实例对象; 
      static修饰方法,则方法不属于某个对象,属于class,可用class名.方法名(),进行调用;简单的说abstract实例对象; 而static属于类。 所以static方法不能是abstract方法

  • 相关阅读:
    flask上下管理文相关
    flask上下管理文相关
    flask上下文管理相关-LocalStack 对象维护栈
    flask上下文管理相关
    flask-wtforms组件
    flask数据库连接池DBUtils
    flask蓝图blueprint是什么
    flask不得不知的基础
    产品的四个主要的要素
    C# 函数式编程:LINQ
  • 原文地址:https://www.cnblogs.com/mibin/p/7459435.html
Copyright © 2020-2023  润新知