面向对象的三大特征:封装,继承,多态

 

面向对象的特征一:封装与隐藏 3W:what? why? how?
* 一、问题的引入:
* 当我们创建一个类的对象以后,我们可以通过"对象.属性"的方式,对对象的属性进行赋值。这里,赋值操作要受到
* 属性的数据类型和存储范围的制约。除此之外,没有其他制约条件。但是,在实际问题中,我们往往需要给属性赋值
* 加入额外的限制条件。这个条件就不能在属性声明时体现,我们只能通过方法进行限制条件的添加。(比如:setLegs())
* 同时,我们需要避免用户再使用"对象.属性"的方式对属性进行赋值。则需要将属性声明为私有的(private).
* -->此时,针对于属性就体现了封装性。
*
* 二、封装性的体现
* 拓展:封装性的体现:1.我们将类的属性xxx私有化(private),同时,提供公共的(public)方法来获取(getXxx)和设置(setXxx)此属性的值 2. 不对外暴露的私有的方法 3. 单例模式 (将构造器私有化)4.不希望类在包外被调用,将类设置为缺省

*
* 三、封装性的体现,需要权限修饰符来配合。
* 1.Java规定的4种权限(从小到大排列):private、缺省、protected 、public
* 2.4种权限可以用来修饰类及类的内部结构:属性、方法、构造器、内部类
* 3.具体的,4种权限都可以用来修饰类的内部结构属性、方法、构造器、内部类
* 修饰类的话,只能使用:缺省、public
*
* 总结封装性=Java提供了4种权限修饰符来修饰类及类的内部结构,体现类及类的内部结构在被调用时的可见性的大小。

 

面向对象特征之三:多态性
* 1.理解多态性:可以理解为一个事物的多种形态。
* 2.何为多态性:
* 对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)
* 3. 多态的使用:虚拟方法调用
* 有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。
* 总结:编译,看左边;运行,看右边。
* 4.多态性的使用前提: ① 类的继承关系 ② 方法的重写
* 5.对象的多态性,只适用于方法,不适用于属性(编译和运行都看左边)

有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法。子类特有的属性和方法不能调用。

如何才能调用子类特有的属性和方法?向下转型:使用强制类型转换符。

instanceof关键字的使用

a instanceof A:判断对象a是否是类A的实例。如果是,返回true;如果不是,返回false。

如果类B是类A的父类 ,那么a instanceof A返回true,则 a instanceof B也返回true。

要求a所属的类与类A必须是子类和父类的关系,否则编译错误。

使用情境:为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instanceof的判断,一旦返回true,就进行向下转型。如果返回false,不进行向下转型。

 

posted @ 2021-08-12 17:05  dydyTom  阅读(52)  评论(0)    收藏  举报