继承

原创 2018年04月16日 21:52:29

 继承性就是子类自动共享父类的数据和方法的机制,它由类的派生功能体现,继承具有传递性,使得一个类可以继承另一个类的属性和方法,这样通过抽象出共同的属性和方法组建新的类,便用于代码的重用。

继承:将多个类抽取位一个独立的类,让独立的类和多个类产生继承关系

继承 的关键字:extends
格式:
  class 子类名 extends 父类名{
  ...
  }
  继承 的好处:
1)提供了代码复用性,解决了代码的臃肿
  2)它是多态的前提(多态的前提是必须有继承关系)
  
 继承的特点:
子类继承父类,是继承了父类所有的东西(成员变量,成员方法,包括私有),但是子类不能使用私有的东西,只能通过父类的公共的访问间接的让子类访问它.

继承的另外一个特点:
   在Java中,继承只支持单继承,不支持多继承(子类名 extends 父类名1,父类名2,...)
但是,Java是可以支持多层继承...

 类和类之间的关系:继承关系
 类和接口之间的关系:实现关系
  

class Zi extends Father,Monther{}  //多继承 :不支持的

 继承中的注意事项:
   1)构造方法不能被继承,但是通过super关键字去访问
  2)私有的可以间接的去访问
3)什么时候使用extends?
  
假设:有一个A类
class A{
public void show1(){}
public void show2(){}
   }
  
有一个B类
class B{
public void show1(){}
   public void method(){}
   }
 
  按照正常的情况:发现A类和B类中有共同的show1()方法,根据继承的概念,---->让B类继承A类
class B extends A{
public void method(){}
}
没有问题,但是继承了A类,show1(),show2()也继承过来了,可能show2()并不是我想要的功能;对于这种情况不要使用继承
继承体现的是一种"is a"的关系:
   如果A是B的一种或者B是A的一种,这个可以使用继承!
  香蕉
苹果
橘子
 
人类
学生
   老师
军人...
 不要随意的使用继承,只要有"is a"的关系就使用它..
  Java开发设计原则:低耦合,高内聚
耦合:类和类之间的关系 ,尽量降低耦合性
内聚:指的是做一件事情能力(尽量使用一个类完成的事情不要多个类去完成..)
  
  在继承中,成员变量的名称问题
当前子类继承父类的时候,子类和父类中的成员变量名称不一致的情况,非常简单,分别输出就可以了;
当子类和父类中的成员变量名称一致的情况:
1)先到子类的局部位置找,如果找到了,就输出
2)没有找到,到子类的成员位置找,有就输出,
3)在类的成员位置还没有找到,直接父类的成员位置找,有就输出
4)如果还没有,就保存了,不存在这个变量
  问题:
要访问这个子类的局部位置的变量,直接可以访问.
需求:要访问Son类的成员位置的这个变量nun,如何访问
需求:要访问Father类的成员位置的变量nun.如何访问?

 Java提供了关键字:super:代表的父类的空间标识(父类的引用或父类的对象)
 
  this和super关键字的用法:
成员变量:
this:
this.成员变量; (访问当前类)
super:
super.成员变量;(访问父类)

   构造方法:
this(); //无参构造
  this("") ;//访问当前类的有参构造
        super()://访问的父类的无参构造
super("")://访问的是父类的有参构造..
  成员方法:
this.xx()

super.xx()

关于继承的成员的问题
构造方法:
   子类继承父类,都会默认的访问父类的无参构造方法
  为什么呢?
  假设数据还没有被初始化完毕,所以应该先让父类进行初始化,然后在让子类初始化--->分层初始化
 

问题:
 如果父类的无参构造没有提供?怎么办?
肯定报错;
   如何解决:
1)可以将父类的无参构造提供出来
2)可以super关键字去访问父类的带参构造...
3)还可以在子类中通过this(),访问本类中的有参构造,间接的去访问父类带参构造

子类的构造方法必须有一个(有参构造/无参构造),让父类进行初始化!

继承中成员方法的问题
子类继承父类,访问成员方法名不一致的情况,分别调用!
当子类中的成员方名和父类中的成员方法名一致的情况:
   1)现在子类的成员位置找,如果有就调用

2)如果没有找到,在父类的成员位置找,有就调用

关于继承的用法:
  父类中被private修饰的,是可以继承,但是只能间接的去访问私有的..
父类被private修饰 成员属性,子类不不能直接访问的

 子类不能继承父类的构造方法,但是可以通过super

子类继续父类,父类先进行初始化,然后子类进行初始化,这就是继承中分层初始化
类名 对象名  = new 类名() ; 这句话,创建了对象,通过构造方法进行初始化(默认初始化,显示初始化)

构造函数继承.关于java

  • 2011年03月30日 21:35
  • 4KB
  • 下载

java基础类与继承.ppt

  • 2011年04月23日 11:26
  • 241KB
  • 下载

java源代码数据库连接

  • 2008年10月27日 12:32
  • 869B
  • 下载

装饰模式(DecoratorPattern)与继承(Extends)的区别

装饰模式(DecoratorPattern)与继承(Extends)的区别 为什么要使用装饰模式呢? 在项目开发的过程中,当客户提出了个新的需求(这个新的需求需要对我们的某个类进行改动),为了这个新...
  • ghgzczxcvxv
  • ghgzczxcvxv
  • 2015-02-03 13:08:33
  • 1559

公有继承,私有继承,保护继承的区别

一个子类继承父类时,可按照public、private和protected方式继承父类,每种继承方式的区别如下: 1) public继承方式 基类中所有public成员在派生类中为pu...
  • baowxz
  • baowxz
  • 2016-04-29 16:01:11
  • 4987

面向对象_继承案例和继承的好处与继承的弊端

/* 继承概述: 把多个类中相同的内容给提取出来定义到一个类中。 如何实现继承呢? java提供了关键字:extends 格多: //class 子类名,派生类名 extends 父类名,基类名,...
  • L1585931143
  • L1585931143
  • 2016-09-26 22:13:17
  • 1347

c# 继承的本质

今天和大家解释一下什么叫继承,估计好多人都只知道怎么用,对于大多数开发者来说,它应该比较熟悉,估计是作为面向对象的三大要素之一吧,所以这是很多人对于继承的最直接的认识吧。大学课本里老生常谈。出来工作又...
  • u012565990
  • u012565990
  • 2016-08-09 22:27:00
  • 1718

c++的继承详解

一、前言 继承是c++语言一个重要的机制,该机制自动地为一个类提供来自另一个类的操作和数据结构,这使得程序员只需在新类中定义已有的类中没有的成分来建立一个新类。二、继承解释 继承是类...
  • qq_35644234
  • qq_35644234
  • 2016-10-15 21:12:51
  • 2210

JS中的继承方法——组合继承介绍与实践

组合继承是原性链继承和构造函数继承的合体,它汲取了二者各自的有点,同时又互相补充了各自的弱点,是一种应用十分广泛的javascript继承模式。下面分别从原性链继承、构造函数继承分别开始介绍,最后介绍...
  • fareise
  • fareise
  • 2016-05-05 18:49:36
  • 4764

C++继承与多态课件

  • 2010年08月07日 18:59
  • 1.35MB
  • 下载
收藏助手
不良信息举报
您举报文章:继承
举报原因:
原因补充:

(最多只允许输入30个字)