子类可以重写父类的静态方法吗


面试时遇到的,在此记录,以备后查!

答案:不可以。

解析:重写是为了实现多态,而多态是实例方法的动态绑定。与静态无关。当然,在子类中定义一个和父类同名的静态方法,编译器不会报错,其实这仅仅是在子类中定义了一个趋同的静态方法,与重写无关。

public class TestStaticMethodExtends { 
    public static void main(String[] args) { 
         A a = new B(); 
         a.p() ;
   } 
} 
 
class A { 
  public static void p() { 
       System.out.println("基类"); 
  } 
} 

class B extends A {
   public static void p() { 
      System.out.println("子类");
   } 
} 


输出:基类

调用的还是自己所在类的静态方法。

在Java中,如果你想让子类覆盖或重写父类中的同名方法,你需要使用关键字`override`或者`final`关键字(对于私有方法)。这通常发生在子类需要提供不同于父类特定行为的情况。以下是重写方法的基本步骤: 1. **方法声明**:首先,在子类中声明一个新的方法,方法名、返回类型和参数列表都必须与父类中的方法完全匹配。例如: ```java public class ParentClass { public void myMethod() { ... } // 父类中的方法 } public class ChildClass extends ParentClass { @Override // 标记为重写 public void myMethod() { ... } // 子类的实现 } ``` 2. **`@Override`注解**:为了明确告诉编译器这是对父类方法的重写,你应该在方法声明上添加`@Override`注解。如果省略这个注解,虽然编译器不会报错,但在运行期间可能会出现问题。 3. **访问权限**:除非父类方法是`private`,否则子类都可以重写它。如果父类方法是`protected`,那么子类可以直接重写;如果是`public`,则所有子类都能重写。 4. **实现逻辑**:子类可以提供新的功能或者修改父类的行为,但必须保持与父类接口的一致性。 5. **异常处理**:重写的方法可以有自己的异常处理策略,也可以选择保留父类的方法异常处理。 6. **静态方法和构造函数**:静态方法和构造函数不能被子类直接重写,只能通过覆写父类实例方法来间接达到类似效果。 注意:尽管你可以覆盖几乎所有的非静态方法,但有一些特殊的方法,如equals()、toString()、hashCode()等,如果你重写了它们,需要遵守特定的规则,否则可能导致意外的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值