Java基础(1) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

java的继承与覆盖基本是java笔试中常出的题,也比较绕,我这里对java的继承覆盖做一个总结
1.构造函数:
        当子类继承一个父类时,构造子类时需要调用父类的构造函数,存在三种情况
        (1),父类无构造函数或者一个无参数构造函数,子类若无构造函数或者有无参数构造函数,子类构造函数中不需要显式调用父类的构造函数,系统会自动在调用子类构造函数前调用父类的构造函数
         (2),父类只有有参数构造函数,子类在构造方法中必须要显示调用父类的构造函数,否则编译出错
         (3),父类既有无参数构造函数,也有有参构造函数,子类可以不在构造方法中调用父类的构造函数,这时使用的是父类的无参数构造函数
           //以上三个结论已经过代码验证
2.方法覆盖:
          (1)子类覆盖父类的方法,必须有同样的参数返回类型,否则编译不能通过
          (2)子类覆盖父类的方法,在jdk1.5后,参数返回类可以是父类方法返回类的子类
         (3)子类覆盖父类方法,可以修改方法作用域修饰符,但只能把方法的作用域放大,而不能把public修改为private
          (4)子类方法能够访问父类的protected作用域成员,不能够访问默认的作用域成员
         (5)子类的静态方法不能隐藏同名的父类实例方法
         (6)java与C++一样,继承的方法具有多态性
         //以上6个结论已经过代码验证
3.成员覆盖:
         (1)当子类覆盖父类的成员变量时,父类方法使用的是父类的成员变量,子类方法使用的是子类的成员变量
          这个听起来很容易理解的一回事,但是实际使用过程中很多人容易搞混:尤其是在多态的时候,调用一个被继承的方法,该方法访问是一个被覆盖的成员m,那么方法中到底是访问了父类的成员还是子类的成员m?结论是,若实际调用的是父类的方法,就使用了父类的该成员m,若实际调用的是子类的方法,就使用子类的成员m,记住一句,每个类使用成员都相当于在前面加了 一个this指针。
         //以上1个结论已经过代码验证

我在论坛上看到下面例子,理解上面,你就能够很好得出答案了:

  1. class SuperClass {
  2. private int number;
  3. public SuperClass() {
  4. this.number = 0;
  5. }
  6. public SuperClass(int number) {
  7. this.number = number;
  8. }
  9. public int getNumber() {
  10. number++;
  11. return number;
  12. }
  13. }
  14. class SubClass1 extends SuperClass {
  15. public SubClass1(int number) {
  16. super(number);
  17. }
  18. }
  19. class SubClass2 extends SuperClass {
  20. private int number;
  21. public SubClass2(int number) {
  22. super(number);
  23. }
  24. }
  25. public class SubClass extends SuperClass {
  26. private int number;
  27. public SubClass(int number) {
  28. super(number);
  29. }
  30. public int getNumber() {
  31. number++;
  32. return number;
  33. }
  34. public static void main(String[] args) {
  35. SuperClass s = new SubClass(20);
  36. SuperClass s1 = new SubClass1(20);
  37. SuperClass s2 = new SubClass2(20);
  38. System.out.println(s.getNumber());
  39. System.out.println(s1.getNumber());
  40. System.out.println(s2.getNumber());
  41. //结论一:多态时,当子类覆盖了父类的方法,使用子类覆盖的方法
  42. //结论二:当子类覆盖父类的成员变量时,父类方法使用的是父类的成员变量,子类方法使用的是子类的成员变量
  43. }
  44. }

执行输出:

1
21
21

 
 

java继承覆盖总结的更多相关文章

  1. java继承覆盖与向上转型,权限

    子类可以覆盖父类的非final成员变量和重写非final方法 private私有变量和方法只能在类的内部使用,因此子类继承的同时会被隐藏,相当于不继承 protected变量,子类可以继承调用 方法被 ...

  2. Java继承--覆盖

    java中支持单继承.不直接支持多继承,但对C++中的多继承机制进行改良. 单继承:一个子类只能有一个直接父类. 多继承:一个子类可以有多个直接父类(java中不允许,进行改良).不直接支持,因为多个 ...

  3. Java继承与组合

    Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...

  4. Java—继承、封装、抽象、多态

    类.对象和包 1) 面向对象编程(Object Oriented Programming ,简称 OOP):20世纪70年代以后开始流行. 2) 结构化编程与面向对象编程的区别: A. 在结构化编程中 ...

  5. java 继承、重载、重写与多态

    首先是java 继承.重载和重写的概念 继承: 继承的作用在于代码的复用.由于继承意味着父类的所有方法亦可在子类中使用,所以发给父类的消息亦可发给衍生类.如果Person类中有一个eat方法,那么St ...

  6. 7 -- Spring的基本用法 -- 8... 抽象Bean与子Bean;Bean继承与Java继承的区别;容器中的工厂Bean;获得Bean本身的id;强制初始化Bean

    7.8 深入理解容器中的Bean 7.8.1 抽象Bean与子Bean 把多个<bean.../>配置中相同的信息提取出来,集中成配置模版------这个配置模版并不是真正的Bean,因此 ...

  7. 学习博客之Java继承多态接口

    这一篇博客主要是对软工前一阶段学习的总结,主要是对Java的学习总结,包括三部分:Java的继承.多态和接口 Java的继承 继承是面向对象的三大特性之一,能够实现软件的复用. Java子类继承父类的 ...

  8. Java 继承和多态

                                                        Java  继承和多态 Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因 ...

  9. java继承机制

    1 继承  关键字:extends   java没有多重继承 实例 父类: package unit4; public class Base { public int publicVarofBase= ...

随机推荐

  1. Web service project中导入的库JAX-RS(Java EE 6.0新产品)

    JAX-RS是JAVA EE6 引入的一个新技术. JAX-RS即Java API for RESTful Web Services,是一个Java 编程语言的应用程序接口,支持按照表述性状态转移(R ...

  2. AutoCompleteTextView自动填充文本

    布局: <AutoCompleteTextView android:id="@+id/auto" android:layout_width="match_paren ...

  3. 中文在unicode中的编码范围

    以前写过一篇贴子是写中文在unicode中的编码范围 unicode中文范围,但写的不是很详细,今天再次研究了下unicode,并给出详细的unicode取值范围. 本次研究的unicode对象是un ...

  4. spark streaming中使用flume数据源

    有两种方式,一种是sparkstreaming中的driver起监听,flume来推数据:另一种是sparkstreaming按照时间策略轮训的向flume拉数据. 最开始我以为只有第一种方法,但是尼 ...

  5. python reduce()函数

    reduce()函数 reduce()函数也是Python内置的一个高阶函数.reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传 ...

  6. 2016.6.17 kali Linux 隧道工具

    隧道工具的基本概念: 1.在计算机网络中,隧道工具是指使用一种网络协议去封装另一种网络协议的技术. 2.通常用来数据伪装或者穿越防火墙,在入侵目标系统后,可用来提升权限和权限维持. Kali中的隧道工 ...

  7. Xamarin Android设置界面提示类型错误

    Xamarin Android设置界面提示类型错误 错误信息:Integer types not allow (at ‘padding’ with value ’10’)Android界面属性的长度和 ...

  8. Activity 生命周期及其栈管理方式

    Activity 生命周期 Android 系统用栈的形式管理 Activity , 当新的 Activity 被创建是, 会被放置到栈顶, 这个 Activity 会进入到运行状态, 而前一个 Ac ...

  9. 【COGS】714. USACO 1.3.2混合牛奶(贪心+水题)

    http://cojs.tk/cogs/problem/problem.php?pid=714 在hzwer的刷题记录上,默默地先跳过2题T_T...求凸包和期望的..T_T那是个啥..得好好学习 看 ...

  10. BZOJ4129: Haruna’s Breakfast

    Description Haruna每天都会给提督做早餐! 这天她发现早饭的食材被调皮的 Shimakaze放到了一棵 树上,每个结点都有一样食材,Shimakaze要考验一下她. 每个食材都有一个美 ...