重载和覆盖

重载(overload):
对于类中的方法(包括从父类中继承的方法),方法名相同,参数列表不同,就可以构成重载关系。
参数列表不同,又可以分为参数类型、参数的个数、参数的顺序。
重载与访问权限修饰符和返回值无关。

覆盖(override):
发生在子父类中,当父类中的某些方法不能满足要求时,子类中改写父类的方法,当父类的方法被覆盖后,除非用super.方法名()来调用。

发生覆盖的条件:

1、三同一不低:
子类和父类的方法名,返回值类型和参数列表必须完全相同,而且子类方法的访问修饰符的权限不能比父类低。(其实子类的方法返回值可以返回父类方法返回值的子类,当调用时会产生多态现象,当父类方法返回Number时,子类覆盖的方法返回Integer类型)
2、被覆盖的方法不能使final类型的,因为final修饰的方法无法被覆盖。
3、被覆盖的方法不能是private,否则在其子类中只是重新定义了一个方法,并没有对其进行覆盖,因为私有,子类看不到,谈不上覆盖。
4、子类不能比父类抛出更多的异常,即子类方法所抛出的异常必须和父类所抛出的异常一致或者是其子类,或什么都不抛出。
5、被覆盖的方法不能是static,如果父类中方法是静态,子类中是非静态的,那么会发生编译错误。原因:

即使父类和子类的方法都是静态的,并满足覆盖条件,但仍不会发生覆盖,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配,可以理解成父类中的静态方法和父类绑定在一起,在继承的时候,子类中隐藏了父类的静态方法,调用的时候Fu f = new Zi(); f.show()当调用静态方法的时候,系统不在乎是哪个对象调用,而是直接看这个引用变量是什么类型的.

子类不会比父类抛出更多的异常,应该一样或者比父类小,原因:
父类抛出A异常,当Fu类有子类的时候,根据多态可以写成Fu f = new Zi(); 引用f指向子类对象,子类中把父类抛出的异常的方法进行覆盖,但是由于子类继承了父类,所以子类可以抛出异常的方法不能抛出新的异常,必须在父类抛出的异常范围之内,另外 父类的方法调用者已经做好了父类异常捕获的准备,用多态调用时,却出现捕获之外的异常,jvm只能使程序终止.

关于非静态内部类中为什么不能有静态成员(成员变量或方法)
非静态内部类依赖一个外部类的对象,对于外部类而言,非静态内部类只是一个成员,正常加载类时,先加载外部类-->创建外部类对象-->加载内部类-->初始化变量,但是jvm要求所有静态变量必须在对象创建之前完成加载,这就互相矛盾,对于非静态内部类而言,可以有static final int NUM = 3,原因:此时NUM属于java常量,存放于内存中的常量池中,加载常量和加载类的时机无关.

多态下的成员变量和成员方法调用
Fu f = new Zi();

字段:
新创建的Zi类对象中有2个num字段


image.png

引用为父类型的引用,他调用自己的成员变量,相当于继承的时候,父类的成员变量隐藏了(变量名想用,不管类型),简单来说,引用类型是谁的,就调用谁的成员变量.
编译运行都看左边

成员方法:
成员方法调用实际上是堆内存中的对象调用,但编译的时候要现在引用所属的类中检查是否有这个方法,没有就报错(编译器认为,Fu f调用的是父类中的方法),但运行时,尽管是f.show();Fu类型引用调用方法,但实际上是new Zi() 这个对象在调用,show()方法进行动态绑定在调用他的对象上,他会在子类中找有没有show()方法,如果没有就执行父类继承过来的方法.
编译看左边,运行看右边

静态方法:
对于静态方法调用是不需要对象的,系统在加载的时候直接把静态方法加载到数据共享区,每个静态方法都有自己的类所属,静态绑定,调用的时候直接看引用是什么类类型的就可以了
编译运行都看左边

静态属性,非静态属性,静态方法都可以被继承.然后会被隐藏,但是当子类中有没重名的成员变量或者静态方法,则调用父类的属性或方法,如果子类有,那么就调用子类的
非静态方法,调用就执行多态

继承时父类中有私有方法
因为private对类外面是不可见的,系统检查的时候看不到,子类对象转型为父类类型引用,检查任务f.show()调用的是父类方法,父类中如果是私有就报错(方法不可见),对于匿名对象调用方法,如果他所属的类中方法是私有,就编译失败,如果说在子类中或父类中定义了私有方法,因为在同一类中可见,所以编译通过,如果在父类中子类对象向上转型,f.show()调用的仍然是父类的私有方法(此时说的情况是main方法在子父类中)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,348评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,122评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,936评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,427评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,467评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,785评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,931评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,696评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,141评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,483评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,625评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,291评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,892评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,324评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,492评论 2 348

推荐阅读更多精彩内容

  • 重载: 同一个类中的许多方法可以拥有同一个名字,只要他们的参数声明不同即可 覆盖: 子类重新实现了父类中的方法(继...
    B萌面超人阅读 380评论 0 0
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 1,774评论 0 10
  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,537评论 0 6
  • 提起笔来,又不知要写些什么!就祝福家人们幸福、平安。
    李学华_110f阅读 149评论 0 2
  • 你说病好一起吃冰 雨停终于逮到时机 抹茶完胜了朱古力 涩得程度不偏不倚 这家老板料放得足 没有二两也有半斤 折损愉...
    秋未完阅读 404评论 92 32