继承

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

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

继承 的关键字: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 类名() ; 这句话,创建了对象,通过构造方法进行初始化(默认初始化,显示初始化)

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页