本章学习要点:

      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. 动态规划之一ones

    n给一个整数n,要你找一个值为n的表达式,这个表达式只有1 + * ( ) 够成.并且1不能连续,比如11+1就不合法. n输入n,(1<=n<=10000) n输出最少需要多少个1才能构 ...

  2. 简要解析XMPP框架及iOS-Objective-C的使用

    前言:这两天看了XMPP框架,查阅了一些资料,写下这篇文章记录一下学习笔记 一.简要解析XMPP核心部分 XMPP框架分为两个部分 1.核心部分 2.扩展部分 扩展部分主要讲好友列表(roster). ...

  3. ie6下常见的bug 调整页面兼容性

    ie6下常见的bug 我们布局页面,首先符合标准,如何写一个页面的标准性? 但是ie6等浏览器本身就比较特殊,bug比较多,兵法云,知己知彼百战百胜.我们需要了解ie6的一些常见bug,这样,更好的调 ...

  4. windows 下mysql的安装于使用(启动、关闭)

    1.下载Windows (x86, 64-bit), ZIP Archive解压: 2.双击在bin目录里的mysqld.exe dos窗体一闪就没了,这时netstat -an发现port3306已 ...

  5. 配置SAP 采购合同审批

    需求: 采购合同类型是MK,采购组织是POSC,采购组PGC,标识:估计价格是空,总价有值0.00 - 9999999999.00 RMB 满足以上条件的时候需要审批该合同. 配置: spro-> ...

  6. 官方发布的新版本Qt已经不支持XP了,要自己从源代码编译

    官方发布的新版本Qt已经不支持XP了,要自己从源代码编译,编译选项里有个-target项,用来提供XP支持的,编译时加上-target xp就可以了 http://www.qtcn.org/bbs/r ...

  7. js注册检测 用户名、密码、手机号、邮箱

    请输入电话号码:<input name="" type="text" id="telphone" value="" ...

  8. teamviewer无法启动

    在 Linux.Mac OS X和 Windows下都可以用,但在 Linux 下无法启动时怎么办? 笔者回家工作时,都会用 Teamviewer 连线到其他 Linux 桌面,但某天起 Teamvi ...

  9. Qt之开机自启动

    Windows开机自启动的程序很多,包括系统软件.杀毒软件.一些其他安装软件等等.当然可以禁止,通过软件管理或者手动删除对应的注册表中的项即可!但是为了系统的服务或者操作上的方便,我们往往需要开机自启 ...

  10. 理解javascript中的for语句

    程序实现中经常要用到循环语句,其中for循环是多数语言都有的.在javascript中,for循环有几种不同的使用情况,下面就分别来讲述我的理解. 第一种:(通常情况,循环执行相关操作) var ob ...