本章学习要点:

      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. xp每天定时关机命令

    at 00:00 /every:M,T,W,Th,F,S,Su shutdown -s -t 120 能够把00:00改成你想要每天定时关机的时间,120是指关机倒计时的秒数,也能够更改 M,T,W, ...

  2. BZOJ 1901: Zju2112 Dynamic Rankings( BIT 套 BST )

    BIT 套 splay 其实也是不难...每个 BIT 的结点保存一颗 splay , 询问就二分答案然后判断rank... ------------------------------------- ...

  3. 一天一个类,一点也不累 之 Vector

    一天一个类,一点也不累. 今天要说的是ArrayList的亲兄弟--Vector 亲兄弟?看看“族谱” Class Vector<E> java.lang.Object java.util ...

  4. 基于visual Studio2013解决C语言竞赛题之1007找数

         题目 解决代码及点评 /************************************************************************/ ...

  5. C# char[]与string之间的相互转换

    string 兑换 Char[] string ss = "abcdefg"; char[] cc = ss.ToCharArray(); Char[] 转换成string str ...

  6. 利用d3.js绘制中国地图

    d3.js是一个比較强的数据可视化js工具. 利用它画了一幅中国地图,例如以下图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3ZhcDE=/ ...

  7. Materialized View in Oracle - Concepts and Architecture

    List all of MV inoracle: select owner, query, query_len from dba_mviews See content of aMV: select * ...

  8. Eclipse用法和技巧二十八:Eclipse插件Easy Explore的今世

    先说明一下easyexplore插件的功能,easyexplore是一个类似于 Windows Explorer的Eclipse插件,它可以帮助你在不退出Eclipse的环境下迅速浏览本地文件系统. ...

  9. RESTFul Shiro

    RESTFul与服务没有关系?REST的本质是设计风格,不是技术. REST的URL还是个URL,就是个普通的URL,访问这个URL的时候,先被Servlet Filter(即Shiro 的Filte ...

  10. C++ Primer学习笔记2--c++标准库中的 vector、string 和 bitset 类型

    一.string    #include <string>  using std::string    初始化函数:    string s1;        默认构造函数 s1 为空串 ...