java面对对象-方法重写

一、方法重写(除构造方法之外的方法)

重写方法不要加static

当两个类都有static修饰时 方法的调用只和左边,定义的数据类型有关

重写的关键词只能是public

重写只有在父子关系中存在,子类重写父类的方法

方法重写:子类用特殊的方法实现,替换掉父类继承给它的方法实现

哪些方法,是引用决定的,具体要执行哪个类的方法,是引用指向的对象决定的

在这里插入图片描述在这里插入图片描述

即b是A new出来的对象,因此调用了A的方法

因为静态方法是类的方法而非静态是对象的方法

有static时,b调用了B类的方法,因为b是用b类定义的

没有static时,b调用的是对象的方法,而b是用A类new的

静态属于类 非静态属于对象

引用是B类型,但用的A的方法,这就叫做A重写了B的方法

当IDEA中出现箭头说明重写了

在这里插入图片描述在这里插入图片描述

package com.OOP;

import com.OOP.Demo_05.A;
import com.OOP.Demo_05.B;

public class Application {

    //静态的方法和非静态的方法区别很大!
    //静态方法:方法的调用只和左边,定义的数据类型有关

    //非静态:重写
    public static void main(String[] args) {

        //当A、B类的方法都有static修饰时 方法的调用只和左边,定义的数据类型有关
        A a=new A();
        a.test();//A=>test()

        //父类的引用指向了子类
        B b=new A();
        b.test();//B=>test()

    }
}
package com.OOP.Demo_05;


//重写都是方法的重写,与属性无关
public  class B {
    public  static void test(){
        System.out.println("B=>test()");
    }

}
package com.OOP.Demo_05;

public class A extends B
{
    public  static void test(){
        System.out.println("A=>test()");
    }
}

package com.OOP;

import com.OOP.Demo_05.A;
import com.OOP.Demo_05.B;

public class Application {

    //静态的方法和非静态的方法区别很大!
    //静态方法:方法的调用只和左边,定义的数据类型有关
    public static void main(String[] args) {

        //当A、B都不被static修饰时 方法的调用和右边声明的对象类型有关
        A a=new A();
        a.test();//A=>test()

        //父类的引用指向了子类
        B b=new A();//子类重写了父类的方法
        b.test();//A=>test()

    }
}
package com.OOP.Demo_05;


//重写都是方法的重写,与属性无关
public class B {
    public void test(){
        System.out.println("B=>test()");
    }

}
package com.OOP.Demo_05;

public class A extends B
{
    public  void test(){
        System.out.println("A=>test()");
    }
}

重写方法快捷键

Alt+insert

在这里插入图片描述

在这里插入图片描述

父类的静态方法能够被子类继承,但是不能够被子类重写

1.当父类方法被static修饰时

在这里插入图片描述在这里插入图片描述

2.当父类方法不被static修饰时

在这里插入图片描述

在这里插入图片描述

public class A extends B
{
    @Override//注解  有功能的注解
    
    public void test() {
      //删去super.test()
      //因为默认调用父类方法,可以删去
      //然后重写自己的方法
        System.out.println("A=>test()");
      } 
}

重写:需要有继承关系,子类重写父类的方法!

1.方法名必须相同

2.参数列表必须相同

3.修饰符:范围可以扩大但不能缩小 public>Protected>Default>private 4.抛出的异常,范围,可以被缩小,但不能扩大:ClassNotFoundException–>Exception(大)

重写:子类的方法名参数类型、数量和父类要一致,方法体不同

当子类重写父类方法后,优先调用子类的重写方法

为什么需要重写?

1.父类的功能,子类不一定需要,或者不一定满足!

2.快捷键Alt+insert:override

4.抛出的异常,范围,可以被缩小,但不能扩大:ClassNotFoundException-->Exception(大)

重写:子类的方法名参数类型、数量和父类要一致,方法体不同

当子类重写父类方法后,优先调用子类的重写方法

为什么需要重写?

1.父类的功能,子类不一定需要,或者不一定满足!

2.快捷键Alt+insert:override

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值