我是靠谱客的博主 忧伤铃铛,最近开发中收集的这篇文章主要介绍JAVA面对对象继承性---方法覆写,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

二、覆写

继承性的主要特征是子类可以根据父类已有的功能进行功能的扩展,但是在子类定义属性或方法时,有可能出现定义的属性或方法与父类同名的情况,这样的操作就称为覆写。


方法的覆写:当子类定义了和父类的方法名称、返回值类型、参数类型及个数完全相同的方法时,就称为方法的覆写。

实现方法的覆写:

package oop;
​
/**
 * 方法的覆写
 */
class A{
    public void fun(){//在父类中定义方法
        System.out.println("今天天气真不错");
    }
}
class B extends A{
    public void fun(){//覆写方法
        System.out.println("今天真的很适合敲代码");
    }
}
public class TestDemo {
    public static void main(String[] args) {
        B b=new B();
        b.fun();
    }
}
​

一个类可能会产生多个子类,每个子类都可能会覆写父类中的方法,这样一个方法就会根据不同的子类有不同的实现效果


关于方法覆写的执行问题:如果子类覆写了方法,并且实例化了子类对象,调用的一定的被覆写的方法


简单来讲,就是要注意一些覆写代码执行结构的分析要素:

  • 观察实例化的是哪个类

  • 观察这个实例化的类里面调用的方法是否以及被覆写过,如果没被覆写过则调用父类


如果发现父类中的方法名称功能不足(不适合本子类对象操作),但是又必须使用这个方法名称时,就需要采用覆写这一概念实现


注意:被子类所覆写的方法不能拥有比父类更严格的访问控制权限(从宽到严:public>default(默认什么都不屑)>private),private是最严格的,只能被一个类访问


父类方法使用private声明是 不可以覆写,从概念上讲,父类的方法是private,属于小范围权限,而public属于扩大范围的权限。权限上复合覆写要求。但从实际来讲,private是私有的,既然是私有的就无法被外部看见,所以子类是不能覆写的。


在发生重载关系时,返回值可以不同,但是考虑到程序设计的统一性,重载时应尽量保证方法的返回值类型相同。

方法重载和覆写的区别

区别重载覆写
英文单词OverloadingOverride
发生范围发生在一个类里面发生在继承关系中
定义方法名称相同、参数的类型及个数不同方法名称、参数的类型、个数相同、返回值相同
权限没有权限限制被覆写的方法不能拥有比父类更严格的访问控制权限

属性的覆盖:

package oop;
​
/**
 * 属性的覆盖
 */
class C{
    String info="HelloWorld";//定义父类属性
    public void print(){
        System.out.println("今天天气真好");
    }
}
class D extends C{
    int info=100;//定义子类属性
    public void print(){
        super.print();//利用super方法调用父类方法
        System.out.println(super.info);
        System.out.println(this.info);
    }
}
public class TestDemo {
    public static void main(String[] args) {
        D d=new D();
        d.print();
    }
}
​

关于this和super的区别:

区别thissuper
功能调用本类构造、本类方法、本类属性子类调用父类构造、父类方法、父类属性
形式先查找本类是否存在有指定的调用结构,如果有则调用,如果没有则调用父类定义不查找子类,直接调用父类操作
特殊表示本类的当前对象

最后

以上就是忧伤铃铛为你收集整理的JAVA面对对象继承性---方法覆写的全部内容,希望文章能够帮你解决JAVA面对对象继承性---方法覆写所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部