[转]继承的简单总结

为什么要引入继承?

  假如我要做一个媒体库,里面可以放CD,可以放DVD。如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD的函数,单独做一个添加DVD的函数,如果还要往这个媒体库里添加其他的媒体类,还要再创建另一个添加函数。我们说这样的代码不具备可扩展性。另外,CD和DVD有很多相似之处,它们的成员变量里都有标题,播放时长,评论,等等,我们称这样的程序存在大量的代码复制,代码复制是代码不良的表现。所以我们可以创建一个它们的父类,把他们相同的成员变量都添加进父类,而它们都可以继承得到这些变量,在添加到媒体库的时候仅仅需要创建一个添加它们父类的这么一个函数,它们便也可添加进去。

  • 子类从父类那里继承得到了什么?

  继承得到了父类所有的东西,包括成员变量和成员函数。但不见得能够访问父类的所有东西,这样看父类所继承下来的成员变量和成员函数的访问属性。如果父类里有成员变量是private的,那么子类是不可以直接访问的。但是,private只有父类自己可以访问,所以我们可以在子类里通过调用父类的public函数来间接的访问这些成员变量。

  另外,子类除了有从父类那里继承得到的之外,还可以有自己的独有的成员变量和函数,写在自己的类里面。

  • 访问属性
访问属性 含义
public 对所有人开放
private 只有自己可以访问
protected 只有自己、子类和包内其他类可以访问
缺省 只有自己和包内其他类可以访问
  • super();

    • 在父类的构造函数中构造过的成员变量,子类的构造函数的参数表里要写明,并且用super()将这些在父类那里构造过的成员变量从父类那里取过来。
    • super();里面的参数会决定调用父类里的哪个构造器,super();里面的参数和所调用的构造器的参数是相同的。
    • 缺省模式下(如果子类构造器里没有super();),会默认调用父类里没有参数的构造器,如果父类里没有这样的构造器,eclipse会报错。
  • 覆盖(override)

  当子类和父类里有相同名称的函数时,子类里的函数会去覆盖(override)从父类那里继承来的那个同名函数,于是从父类来的那个函数就会隐藏起来不起作用。但是如果想在子类中调用父类中的那个同名函数,应写成 super.函数名();  。

转自:http://www.cnblogs.com/xingyazhao/p/5936867.html

时间: 10-06

[转]继承的简单总结的相关文章

有关C++虚拟继承的简单理解

最近在看<深度探索C++对象模型>这本书的时候,里面第一章提到了虚拟继承,有这么一句话说:"在虚拟继承的情况下,base class不管在继承串链中被派生多少次,永远只会存在一个实体."一开始我理解错了,以为这个继承类图体系里面全局只有一个base class对象,后来查了些资料才知道意思是一个子类中只包含一个bass class对象. 很多东西要有对比才能认识得更深刻,我们这里对比下虚拟继承和普通继承的子类对象的区别,也从而让我们更好地理解文章开头提到的书里的那句话. 虚

C++ 友元、组合、继承的简单使用

现在有这样一个问题,描述如下: 类A.B有公有和私有类型.成员函数.成员数据,类C有些公有函数,怎样让类C的共有函数能随时访问类A.类B的所有成员? 问题具体说明如下: class Class1 { public: int num_tokens; typedef vector<int> int_1vec; Class1() { cout << "class1 constructor!" << endl; } private: int config;

JAVA的三大特征 封装继承多态- 简单总结

简单总结一下 封装-即从很多类的抽取相同的代码 写在一个类里. 好处是 代码的重用,安全. 继承-减少代码的书写. 其好处也是 代码的重用. 多态- 把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化. 总的来说还是接口的重用. 那么总结一下,JAVA的三大特征 其好处 就是代码与接口的重用. 封装可以隐藏实现细节,使得代码模块化: 继承可以扩展已存在的代码模块(类): 它们的目的都是为了——代码重用. 而多态则是为了实现另一个目

JS继承(简单理解版)

童鞋们,我们今天聊聊js的继承,关于继承,平时开发基本用不到,但是面试没有不考的,我就想问,这是人干的事吗? 好吧,迫于社会主义核心价值观,我们今天就来简单说一说js的继承,谁让它是面向对象编程很重要的一个方面呢 首先一句定义,什么是继承: A对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法. 常见的集成方式有六种,我们今天依次简单的说一下,现在让我们把这六种方式分一下类,大致上可分为三类 第一类:普通类 这类继承方法有个特性,就是简单,容易实现,一共两种: 1.原型链继承 关键点

Java基础学习-- 继承 的简单总结

为什么要引入继承? 假如我要做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD的函数,单独做一个添加DVD的函数,如果还要往这个媒体库里添加其他的媒体类,还要再创建另一个添加函数.我们说这样的代码不具备可扩展性.另外,CD和DVD有很多相似之处,它们的成员变量里都有标题,播放时长,评论,等等,我们称这样的程序存在大量的代码复制,代码复制是代码不良的表现.所以我们可以创建一个它们的父类,把他们相同的成员变量都添加

JavaScript中原型与继承(简单例子)

利用原型prototype创建自定义对象Person: function Person(name,sex){ this.name = name; this.sex = sex; } Person.prototype = { getName:function(){return this.name}, getSex:function(){return this.sex} } var liu = new Person("lcy","female"); //创建一个空白对象

Java静态属性、静态方法、非静态属性、非静态方法的继承问题简单了解

package com.book.web.controller; /**  * 父类  * @author liweihan  *  */ public class Parent { public String normalStr = "父类非静态属性"; public static String staticStr = "父类静态属性"; public String changeStr = "父类-变量"; public static Stri

public/protect/private和公有继承/保护继承/私有继承的简单理解

一.先来看一下没有继承的情况 类中的变量访问: (1)类内访问方式:通过public成员函数访问 (2)类外访问方式:直接访问 表 1 class A { public: int a; protected: int b; private: int c; public: int getAll(){ return a + b + c; } }; int main() { A testA; //类外访问方式 testA.a; testA.b; testA.c; //类内访问方式 testA.getAl

继承TextView简单画一个尺子

1 import android.content.Context; 2 import android.graphics.Canvas; 3 import android.graphics.Color; 4 import android.graphics.Paint; 5 import android.util.AttributeSet; 6 import android.view.Gravity; 7 import android.widget.TextView; 8 9 // 给尺子加上刻度.