1. 1. 继承:
  2. (1)子类的构造方法一定会调用父类的构造方法。
  3. (2)任何子类构造方法第一行肯定是this();或者super();两个择一。
  4. this();调用本类的其它构造方法。(传递相应参数调用相应的方法)
  5. super();调用父类的构造方法。
  6. (3)如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法
  7. ---子类创建实例对象的时候是否可以调用父类(抽象类)的构造方法?这里是必须调用的。
  8. (4)如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错
  9. (5)构造方法不能继承:子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法
  10. (6父类构造方法:子类的构造方法必须调用父类的构造方法!
  11. 子类和抽象类:
  12. (1)父类是抽象类,实例化一个子类,如果子类的构造方法没有显示的用super或者this,则会用默认的this来调用父类的无参的构造方法,而且这
  13. 个是子类的构造方法中首先执行的方法,即首先调用父类的构造方法,接着再调用子类的构造方法。
  14. (2)如果在子类的实例中调用了父类的方法,而这个方法子类中没有重写,则会去调父类中的那个方法;如果子类重写了则调用的就是子类的方法。
  15. (3)如果在父类中调用了父类的抽象方法,则默认的会去调用子类中已经实现了这个抽象方法的子类方法。
  16. 2. 覆盖:
  17. 子类覆盖父类前提:
  18. (1) 同名,同参数列表,同返回类型。
  19. (2) 子类覆盖后的方法的访问权限只能比父类相同或者更宽广。
  20. (3) 子类覆盖后的方法抛出的异常不能比父类更宽广。
  21. (4) is-a:指继承。
  22. has-a:指类实例具有对另一个实例的引用。
  23. (5) 对于继承关系:当子类的对象来调用父类中的方法时,则执行的是父类只中原有的方法,
  24. 这和多态不一样,如果子类覆盖掉父类的这个方法时,则调用的是子类的这个方法。
  25. (6)继承中注意的问题:
  26. 重写(也叫覆盖,也叫重构):重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型;
  27. 重写方法不能使用比被重写方法更严格的访问权限。
  28. 重写是类与类之间的关系,两者必须是继承关系。重载是方法与方法之间的关系。
  29. 3. 多态:
  30. (1) 前提:把子类对象当成父类对象来看。
  31. (2) 把子类对象当成父类对象来看时:只能调用父类中定义的属性和方法。
  32. (3) 把子类对象当成父类对象来看时:如果子类覆盖了父类中的方法,则调用的
  33. 是子类覆盖后的这个方法。
  34. 但是如果调用属性时是调用父类的属性而并非子类的,所以尽量不要定义
  35. 父子类同名的属性。
  36. (4) 把父类强制转换成子类时,则调用的是子类中的方法。
  37. 4. 静态方法不能叫"多态". 切记!
  38. 静态方法不可被覆盖,如果子类和父类有重名的静态方法,虽然编译通过,但并不能实现多态,所以不能
  39. 叫"覆盖"。例如:Animal a = new Bird(); a.move();如果是"多态"的话应该输出的结果为,子类中的结果,
  40. 但是实际不是,它是调用的是父类中的方法。所以不能叫"覆盖(多态)"。
  1. 多态:
  2. Animal a = new Bird();  a客观是鸟(客观类型)
  3. Bird b = (Bird)a ;
  4. 其中:Animal a,在编译时a为Animal。编译类型叫"编译时多态",主观。
  5. new Bird(),叫:"运行时多态",客观。
  6. Bird b = (Bird)a ;把父类强制转换成子类。
  7. if(a instanceof Animal)  ----> 编译类型
  8. if(a instanceof Bird) -----> 客观类型
  9. if(b instanceof Animal) -----> 自动向上兼容
  1. this的用法:
  2. this._ (区分局部变量与全局变量,有重名时用)
  3. this(参数类表)
  4. super的用法:
  5. super._(区分子类与父类同名属性,以后建议不要定义相同的同名属性)
  6. super(参数列表)
  1. 写一个类时,同时顺手的要加上一个无参的构造方法,有其它类继承它时,
  2. 加上super();但父类如果没有无参的构造方法就会报错。
  1. 覆盖(重写)和重载的区别:
  2. 覆盖:(1) 是父子类之间.
  3. (2) 父子类同名,相同的参数列表,相同的返回类型。
  4. (3) 子类访问的权限比父类要高。
  5. (4) 子类抛出的异常比父类小。
  6. 重载:(1) 多数针对一个类.
  7. (2) 方法名相同,参数列表不同,与返回类型无关。
  8. (3) 也可能出现在父子类中。
  9. (4) 一般会想到构造函数,有无参的构造函数,一个参数的,两个参数的。

补充:

  1. public class Test {
  2. public static void main(String[] args){
  3. A a = new B(); 这里是把子类当成父类来看,则只能调用父类中定义的属性和方法。
  4. //a.hello(5); 如果子类覆盖了父类中的方法,则调用的是子类覆盖后的那个方法。
  5. B b = (B)a; 这里是把父类强转成子类,这里千万不能写成A a = new A();这样的话运行时会报错,只能是上面的那个A a = new B();
  6. b.hello(4);强转后调用的是子类中的方法(对覆盖来说)
  7. b.hello2();强转后也可以调用父类中的方法
  8. }
  9. }
  10. class A{
  11. public void hello(int i){
  12. System.out.println("A="+i);
  13. }
  14. public void hello2(){
  15. System.out.println("hello2");
  16. }
  17. }
  18. class B extends A{
  19. public void hello(int j){
  20. System.out.println("B="+j);
  21. }
  22. 下面的这个方法不是覆盖哦!要看好覆盖的前提哦~!
  23. public void hello(long l){
  24. System.out.println("B2="+l);
  25. }

JAVA的覆盖、继承和多态的详细解说.this和super的用法的更多相关文章

  1. 【JAVA零基础入门系列】Day13 Java类的继承与多态

    继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟 ...

  2. java中的继承 和多态。

    package com.aaa.zxf.ajax.test; /** *一. java 中的继承和多态. * * 继承的特性? * 1.实现继承的方式 * A 如何建立继承关系(一个类继承于 另一个类 ...

  3. java类的继承,多态,抽象类与接口

    知识点梳理:     1,怎样定义自己的类. MyStarFrame,MyStarPanel 类中定义: (1)属性(数据),变量. (2)方法(函数),行为. (3)构造方法(特征,作用,何时被调用 ...

  4. Java:[面向对象:继承,多态]

    本文内容: 继承 多态 首发时期:2018-03-23 继承: 介绍: 如果多个类中存在相同的属性和行为,可以将这些内容抽取到单独一个类中,那么多个类(子类)无需再定义这些属性和行为,只要继承那个类( ...

  5. Java学习笔记--继承和多态(中)

    1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toStrin ...

  6. 2017.10.10 java中的继承与多态(重载与重写的区别)

    1. 类的继承 继承是面向对象编程技术的主要特征之一,也是实现软件复用的重要手段,使用继承特性子类(subclass) 可以继承父类(superclass)中private方法和属性,继承的目的是使程 ...

  7. Java抽象类、继承及多态和适配器的实现

    Java继承 方法重写是Java语言多态的特性,必须满足以下条件 在子类中,方法名称与父类方法名称完全相同 方法的参数个数和类型完全相同,返回类型完全相同 方法的访问修饰符访问级别不低于父类同名方法的 ...

  8. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  9. Java学习笔记--继承和多态(下)

    1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toStrin ...

随机推荐

  1. BC#32 1002 hash

    代码引用kuangbin大神的,膜拜 第一次见到hashmap和外挂,看来还有很多东西要学 维护前缀和sum[i]=a[0]-a[1]+a[2]-a[3]+…+(-1)^i*a[i] 枚举结尾i,然后 ...

  2. JAVA 正则表达式、汉字正则、 java正则代码

    转自于:http://blog.csdn.net/q326527970/article/details/7513974 (一)字母.数字.下划线.汉字正则表达式 1. 只有字母.数字和下划线且不能以下 ...

  3. c++find函数用法

    头文件 #include <algorithm> 函数实现 template<class InputIterator, class T> InputIterator find ...

  4. poj 2378(树形dp)

    题目链接:http://poj.org/problem?id=2378 思路:num[u]表示以u为根的子树的顶点个数(包括),如果去掉u之后u的每棵子树都小于等于n/2,则选择u. #include ...

  5. 电赛总结(二)——AD芯片总结之高速AD9224

    一.特性参数 1.12位高速AD 2.高达40MSPS的高速AD芯片 3.噪声小 二.芯片管脚图 三.管脚功能说明 管脚名称 功能 CLK 参考时钟输入端 BIT12-1 数据输出端(1是低位,12是 ...

  6. VMware Workstation卸载清理批处理命令

    echo offclsecho "flag">>%windir%\system32\test.logif not exist %windir%\system32\tes ...

  7. PDA移动POS开单扫描打票收银系统-带来零售批发 新的技术 新的手段!!

    手持POS终端高清彩屏,清晰.美观.大方,适用于仓库.超市.服装.食品.批发零售.手机电脑等企业管理.可与管理软件灵活对接.1:员工记不住价格,产品名称,只要有PDA扫描,价格,库存,直接开销售单,打 ...

  8. Bitnami Redmine安装和插件配置

    公司要进行敏捷开发管理,最后选择Redmine作为管理工具. 而Redmine本身的安装非常麻烦,要安装mysql,ruby,redmine,apach. 显然这不是一个偷懒的人应该做的,最后找到Bi ...

  9. POJ 3661 (线性DP)

    题目链接: http://poj.org/problem?id=3661 题目大意:牛跑步.有N分钟,M疲劳值.每分钟跑的距离不同.每分钟可以选择跑步或是休息.一旦休息了必须休息到疲劳值为0.0疲劳值 ...

  10. NSMutableArray 存放BOOL

    注意BOOL是不能直接存放在NSMutableArray中的 NSNumber* yesObj = [NSNumber numberWithBool:YES]; NSMutableArray* arr ...