本章学习要点:

      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. Animation 的setFillAfter

    疑问:如果图片从其他地方回到原先位置,则setFillAfter(false)也可以保持图片在原先位置?

  2. 网页制作之html基础学习1-简介

    学习网页制作主要分为三大块 1.HTML    超文本标记语言( 全称:Hyper Text  Markup Language) 专门编辑静态网页 2.CSS      网页美化:是HTML控制的样式 ...

  3. BZOJ 3477: [Usaco2014 Mar]Sabotage( 二分答案 )

    先二分答案m, 然后对于原序列 A[i] = A[i] - m,  然后O(n)找最大连续子序列和, 那么此时序列由 L + mx + R组成. L + mx + R = sum - n * m, s ...

  4. Android项目实战手机安全卫士(02)

    目录 项目结构图 源代码 运行结果 项目源代码 项目结构图 源代码 清单 01.  SplashActivity.java package com.coderdream.mobilesafe.acti ...

  5. Git命令非主流札记

    使用git做开发的版本管理也有一年半之多了,但是始终都是常用的branch commit status diff push等一些再常用不过的命令,最近闲下来,打算学习一下高端用法,所以就静下心来好好读 ...

  6. JAVA多态学习3

    这一节我们来学习抽象类 抽象类–深入讨论 抽象类是java中一个比較重要的类. 1.用abstract关键字来修饰一个类时.这个类就是抽象类. 2.用abstract关键字来修饰一个方法时,这种方法就 ...

  7. FileStream -- 复制文件

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. 在MySql中实现MemberShip的权限管理

    步骤: 1.在MySql种创建一个数据库,名称任意取,我们只是要得到一个空的数据库,我们假设这个数据库的名称为authentication. 2.在VS种创建一个Web应用程序,File——new—— ...

  9. C++ 左值 右值

    最近在研究C++ 左值 右值,搬运.收集了一些别人的资料,供自己记录和学习,若以后看到了更好的解释,会继续补充.(打“?”是我自己不明白的地方 )   参考:<Boost程序库探秘——深度解析C ...

  10. oracle数据库中insert与select

    前几天遇到了一个问题,insert语句中,不仅要insert页面传过来的值,还要insert select的值. 语句应该这样写: insert into 表1(字段a,字段b,...) select ...