本章学习要点:

      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. android Bitmap围绕一个点进行旋转

    在项目中需要使用定位功能,也就是一个点围绕一个圆心进行旋转,查看了canvas的函数也就只有一个 canvas.drawBitmap(bitmap, matrix, paint)通过使用Matrix来 ...

  2. android Listview,gridview局部刷新,部分刷新

    众所周知Listview和Gridview的刷新界面的方式是调用adapter.notifyDataSetChanged()进行界面刷新. 但是此方法有其弊端,他是将界面中的数据全部刷新一遍,不论数据 ...

  3. 更换Winform 皮肤(下)----完全GDI+绘制

    skin皮肤和DLL程序及文件:下载 链接:http://www.cnblogs.com/DebugLZQ/archive/2013/04/15/3021659.html

  4. 架构漫谈:自己开发一个Log框架

    前言 在日常开发中我们常常都会用到写日志的功能,现在网上的写Log的框架有很多,但是对于我个人而言,过于庞大:我们往往只为了使用框架中的某一个功能就不得不引用整个框架. 所以,我们今天就来自己动手开发 ...

  5. jsp截取字符串

    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> < ...

  6. windows下apache如何完整卸载?

    1.运行services.msc,在服务中停止 apache 服务.2.运行命令行程序,输入 sc delete apache,删除该服务3.删除apache文件夹.

  7. linux i2c驱动架构-dm368 i2c驱动分析

      linux i2c驱动架构-dm368 i2c驱动分析   在阅读本文最好先熟悉一种i2c设备的驱动程序,并且浏览一下i2c-core.c以及芯片提供商的提供的i2c总线驱动(i2c-davinc ...

  8. [置顶] 【玩转cocos2d-x之三十】点九图和输入框的使用

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/17297721 登录界面一个帐号/密码输入框或者主角命名框是少不了的.这节就来 ...

  9. IOS7上呈现IOS6的水滴刷新效果

    IOS7上呈现IOS6的水滴刷新效果    到了IOS7 发现自带的刷新 不再是 IOS6自带的水滴效果了 你是否怀念那IOS6的效果呢? 哈哈,于是收集各方资料,整理编写一个属于自己的水滴刷新效果 ...

  10. 纯css实现苹果表盘动画

    欢迎訪问我们的博客:http://www.w3ctrain.com/2015/07/06/Apple-Watch-Dials/ 随着苹果表的大量生产,我想.用CSS来实现拨号动画的时候到了. 在这篇文 ...