目录
Java是一种以面向对象为思想的编程语言,所以Java中会有对象这个概念,而对于对象的封装,继承,多态就是Java的三大特征。
封装
封装的概念
是面向对象三大特征之一(封装,继承,多态),是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界是无法直接操作的。而封装的原则是将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问成员变量private,提供对应的getXxx()/setXxx()方法
封装的主要构成
属性:属性在类中通过成员变量来体现(类中方法外的变量),在设置属性时,需要用到private关键字。(private:是一个权限修饰符,可以修饰成员(成员变量和成员方法),作用是保护成员不被别的类使用,被privat修饰的成员只在本类中才能访问)。
构造方法:是一种特殊的方法,分有参与无参构造方法。定义在属性之后,用于在外界实例化对象时,对对象进行初始化。当自己代码没有编写构造方法时,系统会默认给一个无参的构造方法,而当自己代码编写了一个有参构造方法时,还想用无参的构造方法,需要自己写一个无参的构造方法。
get/set方法:get/set方法是用于当有外部程序访问时,通过这个两个方法实现对属性的查看或者修改。当设置set方法时,需要用到this关键字。(在set方法内,方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量)
其他方法:类里面还可以定义一些有参或无参的方法以便使用。
案例:
封装的好处
通过方法来控制成员变量的操作,提高了代码的安全性
把代码用方法进行封装,提高了代码的复用性。
继承
继承的概念
继承是面向对象三大特征之一。可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。(注意:Java中类只支持单继承,不支持多继承,Java中类支持多层继承)
继承的主要构成
父类:父类的构成与前面所讲的封装差不多,这里就不再具体阐述。
子类
继承的类:子类需要在类名处使用extends关键字来说明继承了哪个类。
属性:继承之后,父类私有成员子类是不能继承的,如果子类有自己特有的属性,也用private进行定义。虽然子类没有继承父类私有成员,但是子类对象实例化后,是可以通过get/set访问父类的成员的。
构造方法:可定义有参和无参两种构造方法,如果想要构造一个拥有父类属性及子类属性的构造方法,需要使用super关键字来调用父类的带参构造方法(super 关键字的用法和this关键字的用法相似,this:代表本类对象的引用,super:代表父类存储空间的标识(可以理解为父类对象引用) )。
get/set方法:子类自动继承父类的get/set方法,如果有自己特有的属性,只需要定义这个属性的get/set方法即可。
其他方法:当方法与子类完全不同时,就是根据具体情况自己定义。当子类需要父类的功能,而功能主体子类有自己特有内容时,需要用到方法重写,这样即沿袭了父类的功能,又定义了子类特有的内容。(方法重写:子类中出现了和父类一模一样的方法声明需要用到方法重写,需要注意的是私有方法不能被重写,子类方法访问权限不能更低)
案例:
父类
子类
继承的好处和弊端
好处:提高了代码的复用性(多个类相同的成员可以放到同一个类中),提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
坏处:继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟着变化,削弱了子类的独立性
多态
多态的概念
同一个对象,在不同时刻表现出来的不同形态。使用多态的前提和体现有继承/实现关系,有方法重写,有父类引用指向子类对象。
多态中成员访问特点
·成员变量:编译看左边,执行看左边
·成员方法:编译看左边,执行看右边
为什么成员变量和成员方法的访问不一样呢?
·因为成员方法有重写,而成员变量没有
案例(父类子类为上述的父类子类):
使用方法后的结果:
多态的好处和弊端
好处:提高了程序的扩展性。具体体现:定义方法的时候,使用父亲型作为参数,将来在使用的时候,使用具体的子类型参与操作
弊端:不能使用子类的特有功能