zoukankan      html  css  js  c++  java
  • 继承

    继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。 Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。比如可以分隔符先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。

    类和类之间的继承关系可以用 UML符号表示,其中父类又叫 超类或 基类,子类又叫 派生类。父类是子类的一般化,子类是父类的特化(具体化)。

    JAVA不支持 多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承的缺点。

    在 面向对象程序设计中运用继承原则,就是在每个由一般类和特殊类形成的一般——特殊结构中,把一般类的对象实例和所有特殊类的对象实例都共同具有的属性和操作一次性地在一般类中进行显式的定义,在特殊类中不再重复地定义一般类中已经定义的东西,但是在语义上,特殊类却自动地、隐含地拥有它的一般类(以及所有更上层的一般类)中定义的属性和操作。特殊类的对象拥有其一般类的全部或部分属性与方法,称作特殊类对一般类的继承。

    继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的 数据成员和成员方法。若类B继承类A,则属于B的对象便具有类A的全部或部分性质(数据属性)和功能(操作),我们称被继承的类A为基类、父类或 超类,而称继承类B为A的 派生类或子类。

    继承避免了对一般类和特殊类之间共同特征进行的重复描述。同时,通过继承可以清晰地表达每一项共同特征所适应的概念范围——在一般类中定义的属性和操作适应于这个类本身以及它以下的每一层特殊类的全部对象。运用继承原则使得 系统模型比较简练也比较清晰。

     ()java的继承分类
    继承分为单继承和多重继承。单继承是指一个子类最多只能有一个父类。多继承是一个子类可以有二个以上的父类。由于多继承会带来 二义性,在实际应用中应尽量使用单继承。 Java语言中的类只支持单继承,而 接口支持多继承。Java中多继承的功能是通过接口( interface)来间接实现的 。
    ()java的继承特征

    (1)继承关系是传递的。若类C继承类B,类B继承类A(多继承),则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。

    (2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。

    (3)继承提供了 软件复用功能。若类B继承类A,那么建立类B时只需要再描述与 基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。

    (4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。

    (5)提供 多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是 多重继承Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现 多重继承

    ()继承的实例

    //建一个A类
    
    class A{
    
    //成员变量 其中num是实参
    
    int num=0;
    
    //成员方法,其中 i 是型参
    
    public A(int i){
    
    //输入int型文件输出下面
    
    System.out.println("aaaaaaaaaaaaaaaaaaa");
    
    System.out.println("i= "+i);
    
    //把输入的i赋值给成员变量num
    
    num=i;
    
    }
    
    }
    
    //B继承A
    
    class B extends A{
    
    int num=0;
    
    //成员方法B.
    
    public B(){
    
    //继承类A的方法.因为B继承了A必然继承了A的特性.所以输入int值10令方法实现.
    
    super(10);
    
    System.out.println("bbbbbbbbbbbbbbbbbbbb");
    
    //这里的num是类B的.
    
    System.out.println("num= "+num);
    
    //如果想显示类A的num则需要用下列的super.num.这里注意num在类A中需是成员变量才可以.
    
    System.out.println("super.num= "+super.num);
    
    }
    
    }
    
    //建立测试类C
    
    public class C{
    
    //main
    
    public static void main(String aa[]){
    
    //new 一个对象B()
    
    new B();
    
    }
    
    }
  • 相关阅读:
    嵌入式编程中使用 do{...} while(0) 的解释
    ESP32学习笔记(一) 环境搭建与下载
    预告:准备开个坑,集中学习一下esp32模块
    【信号与系统】多项式化简方法
    nginx二级域名代理
    nginx配置ssl证书
    springBoot使用阿里云的证书
    vue-cli3项目开启less支持并引入短链接
    一键安装系列
    centos7增加swap
  • 原文地址:https://www.cnblogs.com/liaoliao/p/5037955.html
Copyright © 2011-2022 走看看