什么是继承

  把一些类的具有共性的东西剥离出来形成一个新的类,然后各个其他类保留自己独有的特性,并用关键字extends继承这个剥离出来的新的类,可以最终达到各类原始相同效果,但是在每个类中,单用一个“extends 新类” 就可以减少新类里差不多相同量级的代码量。

继承的格式

class 类1 extends 新类{}  

其中新类就是剥离出的有共同特性的类。

继承的适用场景

  存在“is a”的关系时,例如猫is a 动物,狗is a 动物。

继承的特点

  1. Java中类只支持单继承
  2. Java中可以多层继承,即多重的继承体系,A extends B, B extends C, 则A实质上也是extends了B,C
  3. 子类不能继承父类的私有成员和方法
  4. 子类不能继承父类的构造方法,但是可以通过super去访问。

继承的好处

  1. 提高了代码的复用性
  2. 简化了代码的维护工作
  3. 是构造多态的基础

继承的坏处

  1. 不符合低耦合高内聚的思想,让类与类的关系更紧密,类与类的关系复杂
  2. 打破了封装性
    封装的好处在只能从类暴露的方法去访问私有变量,但是继承则可以从子类方法通过继承的父类方法间接去访问父类的私有成员。
    另外,如果要想让子类继承共性的属性(成员变量),则不能进行封装,因为private的成员变量和方法都不能被继承,这构成了冲突。

继承中的成员关系

  成员变量

  子类的成员变量名称和父类中的成员变量名称不一样,直接可以从名字区分;
  子类的成员变量名称和父类中的成员变量名称一样,通过this和super来区分,this.成员变量是子类的,super的成员变量是父类的(非private时)
  总之,在子类的方法中访问变量时,如果不用this和super来明确区分,则查找的顺序如下:

    a. 在子类方法的局部范围找,有就使用。
    b. 在子类的成员范围找,有就使用。
    c. 在父类的成员范围找,有就使用。
    d. 找不到,就报错。

  构造方法  

  子类的构造方法默认会去访问父类的无参构造方法, 这是为了子类访问父类数据的初始化,如果父类中如果没有无参构造方法,

    1. 需要子类通过super去明确调用带参构造方法,不然则报错。

    2. 子类通过this调用本身的其他构造,但是最终一定会有一个去访问了父类的构造。

    3. 让父类提供无参构造。

    成员方法

子类的成员方法和父类中的成员方法名称不一样,可以直接用名字来区分;
子类的成员方法和父类中的成员方法名称一样,通过super和this来明确区分,例如this.function() or super.function();
如果没有用this和super来明确区分,最后通过子类对象访问一个方法的查找顺序为:
  a. 在子类中找,有就使用

  b. 在父类中找,有就使用

  c. 找不到,就报错

继承中的方法重写(override)

  子类和其继承的父类有一模一样的方法,从返回值到参数列表都是一模一样的,修饰符没有苛刻要求一样;

  重写的特征:

    1. 方法重写的要求子类重写方法的访问修饰符范围必须大于或者等于父类对应方法的访问修饰符范围,例如父类是public,则子类不能为protected。

    2. 子类重写方法的返回值类型必须和父类方法一致

    3. 重写方法的参数必须和父类方法一致

  和重载(overload)的区别:

    1. 重载是发生在一个类中,方法名相同,参数列表不同,但是修饰符和返回值类型没有要求,因为在调用时无法通过修饰符和返回值类型来区分不同函数。

    2. 重写发生在继承中,要求方法名,参数列表,返回值类型完全一样,修饰符访问范围不低于父类。重写的目的在与覆盖父类方法,其他的要求完全可以用重载在子类中去做。

    

继承中的super关键字

  1. super代表父类对象;

  2. 通过super.变量名访问父类非私有成员变量,通过super.成员方法来访问父类非私有成员方法;

  3. 通过super()或者super(参数)来调用父类构造方法,且在子类构造方法中默认调用了super();

【Java基础】继承的一些总结的更多相关文章

  1. 《Java基础——继承》

    Java基础--继承     一.类的继承: 规则: 1.一个子类只能有一个父类,但一个父类可以有多个子类,每个子类都可以作为父类使用. 2.若一个类没有声明父类,则默认其父类为Object. 3.父 ...

  2. Java 基础 - 继承

    子类继承父类的private字段么? Oracle的Java Documentation对Inheritance的定义: 很直白,定义里面就告诉你了这不叫继承.继承的意思是你可以对其进行直接的调用和修 ...

  3. java基础-继承

    浏览以下内容前,请点击并阅读 声明 一个由其他类继承的类叫子类(也叫继承类,扩展类等),该类继承的类叫父类或超类.除了Object类意外,所有的类都有切仅有一个父类,如果一个类没有用extends关键 ...

  4. java基础-继承:矩形体积类问题

    28.按要求编写一个Java应用程序: (1)定义一个类,描述一个矩形,包含有长.宽两种属性,和计算面积方法. (2)编写一个类,继承自矩形类,同时该类描述长方体,具有长.宽.高属性, 和计算体积的方 ...

  5. Java基础--继承方法调用顺序

    最近因为面试的原因,回过头来复习基础的知识,都忘光了,准备买本面试书回来啃. 我先把自己测试的结论总结写出来,以后忘记再来看看 如果b类继承自a类,在main方法中new出b的对象(不带参数),那么他 ...

  6. JAVA基础--继承和权限控制

    1. extends继承 2. java只支持单继承,不允许多继承 修饰符 类内部 同一个包 子类 任何地方 private YES       default YES YES     protect ...

  7. Java基础——继承

    学习Java继承之前,我们想回忆一下Java面向对象需要特别注意的几个关键点. 面向对象是将复杂的事情简单化了,它通过封装的方式使得代码的重用性更高和安全性更强.平时我们要学会用面向对象的方式去思考, ...

  8. Java基础---继承、抽象、接口

    一.概述         继承是面向对象的一个重要特征.当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继那个类即可.这时,多个类可以称为子类,单 ...

  9. java基础继承

    为什么用继承: 因为继承可以减少代码的冗余,提高维护性,为了从根本上解决存在的问题,就需要继承,就是将多个类当中的相同的地方提取到一个父类当中.父类更通用,子类更具体. 父类的继承格式 语法:publ ...

  10. 古典音乐 (java基础 继承)

    摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 一.前言 小朽不才,最近爱上了听古典音乐收录了,mozart ,贝多芬… ...

随机推荐

  1. Python中使用ElementTree解析xml

    在Python中,ElementTree是我们常用的一个解析XML的模块 1.导入ElementTree模块 from xml.etree import ElementTree as ET 2.初始化 ...

  2. VisualStudio自定义代码段_方法一

    在VisualStudio里,使用代码段会提高我们的编写速度.其实,就是给一段代码加个快捷方式,使用时,快捷方式按键+2次Tab键. 举个例子: 比如输入Console.WriteLine (); 传 ...

  3. 异步委托 多线程实现摇奖器 winform版

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  4. 用android-x86模拟器不能运行程序错误Tag:libc的问题

    如果用的是x86的android模拟器,运行软件时一闪就关闭logcat中:类似:Fatal signal 11 (SIGSEGV) at 0x00000078 (code=1), thread 16 ...

  5. 对敏捷开发的误解(转自MBAlib)

    对敏捷开发的误解 误解一:敏捷对人的要求很高 很多人在尝试实施敏捷时说:敏捷对人的要求太高了,我们没有这样的条件,我们没有这样的人,因此我们没法敏捷.可是,敏捷对人的要求真的那么高么? 软件归根到底还 ...

  6. IE9、 Firefox、Safari, Chrome的CSS3圆角属性

    这篇文章主要是记录一下,微软最新发布的 IE9 浏览器CSS 圆角属性,现在CSS3已经 可以轻松实现跨浏览器的圆角效果,包括Firefox高版本,IE9,Safari,Chrome等高端 浏览器. ...

  7. 小米1S MIUI V5刷回V4教程

    V5确实很漂亮,但是1S只有1G的手机内存,确切说是760M左右的内存,所以运行V5卡的不行.解决小米手机刷回V4卡死在开机MI界面!! 于是,我想回到V4,虽然界面没有V5华丽,菜单没有V5扁平化, ...

  8. http://www.tuicool.com/articles/RzUzqei

    http://www.tuicool.com/articles/RzUzqei http://www.cnblogs.com/piaolingzxh/archive/2015/01/01/419783 ...

  9. VMware与宿敌Amazon一笑泯恩仇:重新定义混合云?(私有云节节败退)

    摘要: 私有云巨头VMware看来是真的要输给一个“书贩子” 了!这意味着私有云将败给公有云? [阅读原文] 三年前,虚拟化巨头VMware曾对亚马逊Amazon云服务AWS竖过中指:我们怎么可能打不 ...

  10. 对TCP/IP网络协议的深入浅出归纳(转)

    前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没弄清楚.后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网 ...