public static void main(String[] args) {int i=(int)10.2;//这种是强制类型转换item item=new item("a", 5, false, "bad");CD cd=new CD("b", "dd", 5, 5, "good");item=(item)cd;//这不叫类型转换,叫造型,即把你当作一种造型来看待,并没有改造你,所以加了(item)后,仍然是CD类//向上造型//cd=(CD)item;
public DvD(String title, String director, int playtime, String comment) {//如果没有super(),就会自动地去父类中找没有参数的构造函数//如果有super()但没有参数,也会去父类中找没有参数的构造函数//如果有super()也有参数,该函数就会去父类中找相应形参的构造函数//不能在一个构造函数里调用两次super()//super()必须在构造函数的第一行super(title,playtime,false,comment);//super可以借助构造函数来初始化父类里的private变量//this.title = title;//当子类拥有与父类完全一样的变量或方法时,子类就拥有两个一样的变量或方法,并且(以下接)//在子类中对这个变量或方法的操作是对子类自己这个变量或方法的操作,父类那个被隐藏起来了   //但回到父类那边进行操作时,是对从父类继承那个进行操作,即离我最近那个是我的,以下settertitle函数是例子settertitle("b");//变量例子this.director = director;}
public void print() {System.out.print("DvD:");super.print();//子类与父类中含有一模一样的方法时,用super.访问父类那个方法,方法后记得加括号System.out.println(director);}

这里引用翁凯老师说过的话:面向对象程序设计语言有三大特性:封装、继承和多态性。继承是面向对象语言的重要特征之一,没有继承的语言只能被称作“使用对象的语言”。继承是非常简单而强大的设计思想,它提供了我们代码重用和程序组织的有力工具。

类是规则,类是规范,用来制造对象的规则。类规定了对象长什么样子,我们不断地定义类,用定义的类制造一些对象。类定义了对象的属性和行为,就像图纸决定了房子要盖成什么样子。

一张图纸可以盖很多房子,它们都是相同的房子,但是坐落在不同的地方,会有不同的人住在里面。假如现在我们想盖一座新房子,和以前盖的房子很相似,但是稍微有点不同。任何一个建筑师都会拿以前盖的房子的图纸来,稍加修改,成为一张新图纸,然后盖这座新房子。所以一旦我们有了一张设计良好的图纸,我们就可以基于这张图纸设计出很多相似但不完全相同的房子的图纸来。

基于已有的设计创造新的设计,就是面向对象程序设计中的继承。在继承中,新的类不是凭空产生的,而是基于一个已经存在的类而定义出来的。通过继承,新的类自动获得了基础类中所有的成员,包括成员变量和方法,包括各种访问属性的成员,无论是public还是private。当然,在这之后,程序员还可以加入自己的新的成员,包括变量和方法。显然,通过继承来定义新的类,远比从头开始写一个新的类要简单快捷和方便。继承是支持代码重用的重要手段之一。

类这个词有分类的意思,具有相似特性的东西可以归为一类。比如所有的鸟都有一些共同的特性:有翅膀、下蛋等等。鸟的一个子类,比如鸡,具有鸟的所有的特性,同时又有它自己的特性,比如飞不太高等等;而另外一种鸟类,比如鸵鸟,同样也具有鸟类的全部特性,但是又有它自己的明显不同于鸡的特性。

如果我们用程序设计的语言来描述这个鸡和鸵鸟的关系问题,首先有一个类叫做“鸟”,它具有一些成员变量和方法,从而阐述了鸟所应该具有的特征和行为。然后一个“鸡”类可以从这个“鸟”类派生出来,它同样也具有“鸟”类所有的成员变量和方法,然后再加上自己特有的成员变量和方法。无论是从“鸟”那里继承来的变量和方法,还是它自己加上的,都是它的变量和方法。

对理解继承来说,最重要的事情是,知道哪些东西被继承了,或者说,子类从父类那里得到了什么。答案是:所有的东西,所有的父类的成员,包括变量和方法,都成为了子类的成员,除了构造方法。构造方法是父类所独有的,因为它们的名字就是类的名字,所以父类的构造方法在子类中不存在。除此之外,子类继承得到了父类所有的成员。

但是得到不等于可以随便使用。每个成员有不同的访问属性,子类继承得到了父类所有的成员,但是不同的访问属性使得子类在使用这些成员时有所不同:有些父类的成员直接成为子类的对外的界面,有些则被深深地隐藏起来,即使子类自己也不能直接访问。下表列出了不同访问属性的父类成员在子类中的访问属性:

父类成员访问属性

在父类中的含义

在子类中的含义

public

对所有人开放

对所有人开放

protected

只有包内其它类、自己和子类可以访问

只有包内其它类、自己和子类可以访问

缺省

只有包内其它类可以访问

如果子类与父类在同一个包内:只有包内其它类可以访问

否则:相当于private,不能访问

private

只有自己可以访问

不能访问

public的成员直接成为子类的public的成员,protected的成员也直接成为子类的protected的成员。Java的protected的意思是包内和子类可访问,所以它比缺省的访问属性要宽一些。而对于父类的缺省的未定义访问属性的成员来说,他们是在父类所在的包内可见,如果子类不属于父类的包,那么在子类里面,这些缺省属性的成员和private的成员是一样的:不可见。父类的private的成员在子类里仍然是存在的,只是子类中不能直接访问。我们不可以在子类中重新定义继承得到的成员的访问属性。如果我们试图重新定义一个在父类中已经存在的成员变量,那么我们是在定义一个与父类的成员变量完全无关的变量,在子类中我们可以访问这个定义在子类中的变量,在父类的方法中访问父类的那个。尽管它们同名但是互不影响。

在构造一个子类的对象时,父类的构造方法也是会被调用的,而且父类的构造方法在子类的构造方法之前被调用。在程序运行过程中,子类对象的一部分空间存放的是父类对象。因为子类从父类得到继承,在子类对象初始化过程中可能会使用到父类的成员。所以父类的空间正是要先被初始化的,然后子类的空间才得到初始化。在这个过程中,如果父类的构造方法需要参数,如何传递参数就很重要了。

我们把用来做基础派生其它类的那个类叫做父类、超类或者基类,而派生出来的新类叫做子类。Java用关键字extends表示这种继承/派生关系:

class ThisClass extends SuperClass {

//…

}

一个类只能有一个父类,但可以有多个接口(即interface)

关于继承与造型的一点浅薄的认知(梦开始的地方)相关推荐

  1. 【c#】继承和多态的一点知识点

    目录 简要说明继承和多态: 继承: 继承的特点: [访问基类base的用法]: 使用new关键字隐藏(重写)基类成员 密封类与抽象类与[虚方法] 重写和重载的区别 多态: 静态多态性: 动态多态性: ...

  2. 有关ucenter同步的原理(个人总结的一点浅薄见解)

    使用ucenter进行同步操作,主要依托于ucenter  server 和ucenter client之间的api接口进行通讯.要使得通讯成为可能,首先要通过ucenter管理所用应用(通过配置使得 ...

  3. Linux 浅薄的认知笔记

    Shen脚本 shell脚本是个纯文本文件,命令从上而下,一行一行的开始执行.shell脚本扩展名为.sh. shell脚本第一行一定要为: #!/bin/bash 表示使用bash. 交互式shel ...

  4. Maven搭建Spring框架

    Maven搭建Spring框架 一.前言 二.准备工作 1.IDE 2.创建项目 3.导入jar包 三.创建实体 四.创建Spring配置文件 五.测试 结果 结束语 一.前言 这一篇我会比较详细的将 ...

  5. javascript面向对象学习笔记(一)——继承

    最近在学习html5,玩了下canvas,发现js中很多的东西都不太记得了.翻了下笔记后发现还是去图书馆逛逛把,到借阅区找了我一直想看的<javascript design patterns&g ...

  6. Java:继承之super关键字,继承之私有权限,继承之方法重写,继承之object类,继承之简单工厂模式

    一.继承的概念及用法       继承背后的思想就是        基于已存在的类来构建新类         当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求 ...

  7. c++学习笔记之继承和多态

    1.public 继承 class A : public B (1)友元函数不能被继承 (2)protected成员可以被派生类和友元访问 2.派生类 (1)派生类构造函数如果未显式调用基类构造函数, ...

  8. Java 基础【09】你的多继承纳?

    Java省略了许多很少用到,缺乏了解,混淆功能的C + +,在我们的经验中带来更多的悲伤大于收益 . -----James Gosling James Gosling 这个人大家应该很熟悉,就是最初设 ...

  9. python类方法继承_python类的继承

    一.概述 面向对象编程 (OOP) 语言的一个主要功能就是"继承".继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展. 通过继承 ...

最新文章

  1. 莫言:不要在不喜欢你的人那丢掉快乐
  2. Spring Cloud Netflix Hystrix介绍和使用
  3. 看完这篇文章保你面试稳操胜券——基础篇(html/css)
  4. CF438D-The Child and Sequence【线段树】
  5. winform button设计(一)
  6. mysql 时间序列可视化工具_mysql – 从from到to条目创建时间序列
  7. 菜鸟心态综合症4:缺乏自信,总对自己说No
  8. 2 ELK收集nginx的json格式日志
  9. 模态框 modal.js
  10. SQL中ALTER TABLE 语句
  11. 华为手机怎么使用读卡器_华为G7手机OTG功能详细使用教程
  12. plsql如何连接oracle11g_plsql连接oracle教程
  13. 网络安全商业模式分析
  14. 数据结构实验报告-实验四-实现桶式排序和基于桶式排序的基数排序
  15. js:ajax post与get的区别,getjson的使用
  16. nexus 4/5/6/7/9/10 安卓5.1 LMY47D root教程
  17. 如何在printf中输出,特殊字符(如:%、\、““)或表示八进制012、十六进制0xc
  18. 跑步耳机哪种好,适合在运动过程佩戴的耳机推荐
  19. 通过root用户与hadoop用户分别启动zookeeper,两种启动结果为什么会截然不同?
  20. 【Python深度学习之路】-3.1性能评价指标

热门文章

  1. mybatis之(Oracle,MySql)批量更新
  2. 记一次富途集团后台开发笔试
  3. 狸猫哥哥和他的冬葵花
  4. DAY2-Ubuntu主题与终端的美化
  5. NumPy-创建adarray
  6. Python批量爬取王者荣耀英雄高清壁纸
  7. 制作linux的u盘安装盘或live
  8. 校招生向京东发起的“攻势”,做到他这样,你,也可以
  9. SuperMap iClient3D for WebGL教程 粒子特效-扩展喷泉特效
  10. VESTA的扩胞功能——超晶胞的建立