本章学习要点:

      1.  了解Java继承特性;

      2.  掌握继承实现方法;

      3.  掌握override规则;

一、类继承特性

      1.  继承定义:使用己存在的类作为新类定义的基础,新类定义中可以增加新的数据或新的方法。 基础类我们称之为父类或基类,新派生的类为子类或派生类;

      2.  继承目的:增强类之间的复用性,不用重复操轮子。从而使子类具有父类的功能, 无须再次实现,通常父类作为对多个子类共性的抽象,因而将共性内容(属性和行为)作为父类核心业务;

      3.  重写/覆盖:  子类对父类变量或方法的重写,从而使父类的属性或方法被隐藏,用户也可通过super关键字来访问被隐藏的父类方法和属性;

      4.  内部实现:父类派生出子类,在子类实例化时,子类的构造方法会调用父类的构造方法构建父类对象,也就是说子类对象中存在其父类的对象引用,若父类还有父类时也同样递归即父类对象嵌套其父类对象。

二、类继承实现

     1.  定义父类; public class Base {}

     2.  定义子类并通过关键字extends 来实现继承: public class Sub extends Base {}

     例如:

     //  父类定义

      public class BaseClass {

           private int value;

           public BaseClass() {

               System.out.print("BaseClass constructor");

           }

           public void print() {

               System.out.print("BaseClass print :  value = "  +  getValue());

           }

           public void setValue(int value) {

              this.value = value; 

           }

           public int getValue() {

               return this.value;

          }

      }

 

      //  子类定义, 继承于BaseClass

      public class SubClass extends BaseClass {   

           //  子类构造器,在构造子类对象时系统会调用父类的构造器构建一个BaseClass 的隐藏对象

           public   SubClass() {

                 super();   //  本行代码可有可无,若没有时系统会默认调用父类的缺省构造器即 父类名();

                 System.out.print("SubClass Constructor ");         

           } 

         

         // override 父类的方法, 父类方法对外不可见

          public void print() {   

               super.print();  //  通过处方法调用父类被隐藏的print()方法;

               System.out.print("SubClass print:  value = " + getValue() );    //  getValue()   复用了父类定义

          }

      }

     

      // 测试

      public  class Demo {

           public static void main(String[] args) {

                SubClass sub = new SubClass();

                sub.setValue(100);     // 调用BaseClass 定义的方法,被SubClass重用

                sub.print();   

           }

    }     

 三、Override 原则

      重写(Override)也叫覆盖,当父类的方法先法满足子类功能所需时,子类可以重新定义其实现。 

      重写时需遵循以下原则:

          1. 子类中的方法与父类中的方法有相同的返回类型,相同的方法名称,相同的参数列表;
          2. 子类中的方法的访问级别不能低于父类中该方法的访问级别;
          3. 子类中方法抛出的异常范围不能大于父类中方法抛出的异常的范围;

  四、super 关键字

       super 有两种用法:

       1.  父类构造器

            在子类的构造方法中我们可以用super(参数) 来构建父类子对象; 若子类及父类都没有定义构造器时系统会分别为他们定制默认的构造器进行调用;

            若类重载构造器时系统将不会被其定制默认的构器器,因而当父类重载构造器且未定义无参的构造器时,子类必须显示调用,此时可通过super来实现; 

            public class BaseClass {

                 private int value;

                 public BaseClass(int value) {

                     this.value = value;

                } 

           }

           public class SubClass {

                public SubClass(int value) {

                     super(value);   //  SubClass 对象中可认为存在一个super的对象,这时系统内部相当于实现  super = super(value);   构建一个父类对象并将对象赋值给SubClass 中super成员;

               }

          }

       2.  父类对象的引用

       在子父方法要调用父类的方法(可见或不可见),可能通过 “super.父类成员” 方法来实现

 

演示代码

【Demo 0005】Java基础-类继承性的更多相关文章

  1. 第31节:Java基础-类与对象

    前言 Java基础-类与对象,方法的重载,构造方法的重载,static关键字,main()方法,this关键字,包,访问权限,类的继承,继承性,方法的重写,super变量. 方法的重载:成员方法的重载 ...

  2. 【Demo 0004】Java基础-类封装性

    本章学习要点:       1.  Java封装特性;       2.  掌握类的定义:       3.  掌握类的调用方法; 一.封装特性        Java 纯面向对象语言,面向对象语言遵 ...

  3. Java 基础-类与面向对象

    类 Object 类(java.lang.Object)是所有 Java 类的直接或间接父类. 成员方法及变长参数 方法定义: [public | protected | private] [stat ...

  4. 【Demo 0007】Java基础-类扩展特性

    本章学习要点:        1.  掌握static 修饰的类,方法以及变量的功能及用法;        2.  掌握代码块(静态,非静态)的作用以及注意事项:        3.  了解基本数据类 ...

  5. 【Demo 0006】Java基础-类多态性

    本章学习要点:       1.  了解Java多态特性;       2.  掌握Java多态的实现: 一.多态特性       1.  定义:            指同一个对象调用相同的方法实现 ...

  6. java基础-类成员访问权限控制

    一 前言 这篇文章是很基础的一文,没多大深度,对于开发人员必然是熟练于心.本篇文章的主题是为什么java要设置类成员访问级别?其原因也很简单,就是为了面向对象的封装特性:将类成员使用不同的访问级别控制 ...

  7. JAVA基础——类和对象

    java类与对象学习笔记 一.成员变量和局部变量 (1)定义 1.成员变量 在类中定义,用来描述对象将要有什么.(默认的成员变量值为0) 2.局部变量 在类的方法中定义,在方法中临时保存数据. 演示示 ...

  8. Java基础-类和对象

    类和对象 对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为.例如,一条狗是一个对象,它的状态有:颜色.名字.品种:行为有:摇尾巴.叫.吃等. 类:类是一个模板,它描述一类对象的行为和状态. ...

  9. JAVA基础 - 类的构造与实例化

    一个简单的demo,主要运用: 抽象类,类的继承 类的实例化,构造函数 @Override重写父类方法 package week4; abstract class Person { void show ...

随机推荐

  1. Mysql 连接查询 Mysql支持的连接查询有哪些

    CREATE TABLE `chx` (   `id` VARCHAR(20) NOT NULL,   `name` VARCHAR(50) DEFAULT NULL,   `name2` CHAR( ...

  2. 斯坦福大学IOS开发课程笔记(第七课第一部分)

    转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/31462099 作者:小马 这节课的内容太多,分两部分介绍.本节课主要是介绍怎样开发 ...

  3. quartz群调查调度机制和源代码分析

    pageId=85056282#quartz集群调度机制调研及源代码分析-quartz2.2.1集群调度机制调研及源代码分析" style="color:rgb(59,115,17 ...

  4. oracle dg坏境主库redolog改动大小

    --备库standby 主库四个redolog 曾经都是50M大小 SQL> alter database recover managed standby database cancel;   ...

  5. 举例android项目中的string.xml出现这个The character reference must end with the ';' delimiter.错误提示的原因及解决办法

    今天在一个android项目中的string.xml中写这样一个字符串时出现了下面这个错误提示: The reference to entity "说明" must end wit ...

  6. HTML5小游戏《智力大拼图》发布,挑战你的思维风暴

    一,前言   本 游戏 是鄙人研究lufylegend数日之后,闲暇之余写下的.本游戏运用全新的技术 html 5写成的.游戏引擎为国产的lufylegend.js,大家可以去它的官网看看.游戏处于测 ...

  7. 【剑指Offer学习】【面试题17 ::合并两个排序的链表】

    题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是依照递增排序的 链表结点定义例如以下: public static class ListNode { int value; List ...

  8. SRAM,SDRAM,网卡

    SRAM,SDRAM,网卡有地址总线.由cpu统一编址. NAND flash没有地址总线. 因 此有这两者寻址方式不同. 字符设备驱动程序的框架. 驱动程序 1.有led.read,led.writ ...

  9. 遗传算法Matlab源程序

    参考自: http://blog.163.com/zhaoshuyu_thomas/blog/static/461929072009103034816716/ 大家内容上可以参考上述文章,但其代码有很 ...

  10. c语言,指针与数组--指针与二维数组2

    指向一维数组的指针   char (*p)[10] ;指向一维数组的指针类型 typedef  char(*TYPE_P2ARRAY)[10]  ;   该指针可以指向数组 ,且使用起来效果节本相同, ...