面向对象编程的三大特征:封装、继承、多态
一:封装
对于封装而言,一个对象它所封装的是自己的属性和方法,所以他是不需要依赖其他对象就可以完成自己的操作。
封装的三大好处:
1、良好的封装能够减少耦合。
2、类内部的结构可以自由修改。
3、可以对成员进行更精确的控制。
4、隐藏信息,实心细节。
封装可以使我们容易的修改类的内部实现,二无需修改使用了该类的客户代码。
二:继承
继承是使用已存在的类定义作为基础建立新类的技术,新类的定义课增加新的数据或新的功能,也可以用父类的功能,但不能选择性的继承父类。
继承定义了类如何相互关联,共享特征。对于若干相同或者相识的类,我们可以抽象出他们共有的行为或者属相并且将其定义成一个父类或者超类,然后用这些类继承改父类,他们不仅可以拥有父类的属性,方法,还可以定义自己独有的属性或者方法。
继承需要记住三句话:
1、子类拥有父类非private的属性和方法。
2、子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
3、子类可以用自己的方式实现父类的方法。
继承少不了三个东西:构造器、protected关键字、向上转型
构造器(Constructor):
除了private的属性和方法不能被继承,还有一样子类继承不了------构造器。构造器只能被调动,不能被继承,调用父类的构造器方法,我们使用super()即可。
对于继承,子类会默认调用父类的构造器,但是如果没有默认的父类构造器,子类必须显示的指定父类的构造器,而且必须是在子类构造器中做的第一件事。
在讲继承的时候我们就知道父类的私有属性和构造方法并不能被继承,所以 Constructor 也就不能被 override(重写),但是可以 overload(重载),所以你可以看到一个类中有多个构造函数的情况。
protected关键字:
对于protected而言,他指明就类用户而言,他是private,但是对于任何继承与此类的子类而言或者其他任何位于同一个包的类而言,他确实可以访问的。
三:多态
实现多态有三个必要条件:继承,重写,向上转型
继承:在多态中必须存在有继承关系的子类和父类。
重写:子类对父类中某些方法进行重新定义,在调用者些方法时就会调用子类的方法。
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样改引用才能够具备既能调用父类的方法和子类的方法。
多态问题????????????
两个子类A\B继承了父类,A子类要进行微小改变,B子类不需要改变,完全继承父类。所以对A积蓄方法重写,不完全继承父类,从而实现多态。
实现形式:
在Java中两种形式可以实现多态:继承和接口
基于继承实现多态:
实现机制主要表现在父类和继承该父类的一个或者多个子类对某些方法的重写,多个子类对同一方法重现可以表现不同的行为。
当子类重写父类的方法被调用时,只有对象继承链中最末端的方法才会被调用。
对于应用子类的父类类型,在吹引用时,他适用于继承该福诶的所有子类,子类对象不同,对方法的实现也就不同,执行相同动作产生的行为也就不同。
如果父类是抽象类,那么子类必须实现父类中所有的抽象方法,这样改父类所有的子类一定存在同一的对外接口,但其内部的具体实现可以各异。这样我们就可以使用顶层类提供的同意接口处理该层次的方法。
基于接口实现多态:
继承是通过重写父类的同一方法的几个不同子类来体现的,那么就是通过实现接口并覆盖接口同一方法的几个不同类体现的。
在接口的多态中,只想接口引用必须是指定这实现了接口的一个类的实例程序,在运行时,根据对象引用的实际类型来执行对应的方法。
继承都是单继承,只能为一组相关的类提供一致的服务接口。但是接口可以是多继承,多实现,他能够录用一组相关或者不相关的接口进行组合与扩充,能够对外提供一致的服务接口。
重载和重写的区别?
-
重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。
-
重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为 private 则子类就不能重写该方法。