一、面向对象的三大特性(深入)
2014-11-25 11:40
197 查看
在每个结果中增加了一个
Java编程中,面向对象是最基础的编程思想,面向对象的三大特性!——封装性、继承性、多态性
0)面向对象
面向对象即将实体抽象出来。举个栗子,比如说有
1)封装性
解释:封装性即意味这对象封装其内部的数据成员,使其对外不可见,以保证数据的安全性。
封装性即意味着对象封装其内部的数据,使其对外不可见,以保证数据的安全性。
2.继承性
3.多态性
问题一:为什么要实现setter?
原理:封装的概念就是 自己的数据成员仅对自己可见,只有自己才能改变其值。
setter:改变数据成员值时,操作必须由这个对象自己触发;
public:改变数据成员值时,操作可以由任何对象触发;
实例:
问题二:为什么要实现getter?
原理:因为数据成员用了private进行对外不可见,所以用getter。
问题三:getter怎么用?
原理:getter方法返回对象引用,返回可变对象的引用则破环了封装性。
方案:返回引用可变对象则采用克隆。 注意:日期(Date),数组(String[]),集合(List),键值对(Map)
实例:
优点:更加方便管理。①setter只是进行赋值,而不是引用传递。故当修改传值参数时不会影响对象的数据成员(重点)
②当需要修改类数据成员的时候直接找到该类修改即可;
2)继承性:子类继承超类,实现代码复用。
问题一:什么叫向上转型?向上转型的方法调用?
原理: 子类创建的一个对象引用赋值给其父类变量,叫做向上转型。
(1)通过父类对象不能操作子类新增的成员变量,不能调用子类新增的方法;
(2)通过父类对象调用子类重写父类的方法时,调用的是子类重写后的方法;
实例:
问题二:什么叫向下转型?向下转型的方法调用?
原理:指向对应子类对象的引用的父类 强制转换为对应子类后 将该引用赋值给其子类变量,叫做向下转型。
(3)若将父类对象在强制转换为相应子类的对象,该子类对象又具备了子类所有的属性和方法;
实例:
问题三:为什么子类引用不能指向父类对象?
原理:java的机制。堆中父类对象不存在子类的某些方法以及变量,故导致转换缺失,抛出 java.lang.ClassCastException。
3)多态性: 多态性即多种形态。多态性的实现与静态联编、动态联编有关。
静态联编/静态绑定 支持的多态性称为编译时的多态性,也称静态多态性,它是通过重载实现的。重载
动态联编/动态绑定 支持的多态性称为运行时的多态性,也称动态多态性,它是通过继承和虚函数实现的。覆盖+对象变量多态
表现形式:①重载
②覆盖
③对象变量是多态的(因为父子类)。
问题一:什么叫静态多态性? 范围:private方法、static方法、final方法、构造器(不参与动态联编)
方案:静态联编是指在编译时,系统就能决定调用哪个函数。
原理:相同方法名称,根据参数类型或个数的不同调用对应的方法。
条件:重载,非继承
优点:方便调用,速度快。
问题二:什么叫动态多态性? 范围:Java中除了 private方法、static方法、final方法、构造器 外,其他的所有方法都是动态绑定的。
方案:动态联编是指在运行时,虚拟机调用 x所引用对象的实际类型 的 最合适的方法。
原理:首先会查找这个类实际引用,然后在查找对应的方法,如果方法在该类已经定义了则直接调用,否则则在该类的超类中查找对应方法,以此类推。
特例:如果调用super编译器会自动对超类方法进行搜索。
(动态联编虚拟机优化方案:每次调用方法都要进行搜索,时间开销相当大。因此,虚拟机预先为每个类创建了一个方法表,其中列出了所有方
法的签名和实际调用的方法。)
条件:覆写,继承,向上转型。
优点:无需对现存的代码进行修改,就可以对程序进行扩展。(直接将引用改为新增类即可)
Java编程中,面向对象是最基础的编程思想,面向对象的三大特性!——封装性、继承性、多态性
0)面向对象
面向对象即将实体抽象出来。举个栗子,比如说有
1)封装性
解释:封装性即意味这对象封装其内部的数据成员,使其对外不可见,以保证数据的安全性。
封装性即意味着对象封装其内部的数据,使其对外不可见,以保证数据的安全性。
2.继承性
3.多态性
1)封装性:封装性即意味着对象封装其内部的数据,使其对外不可见,以保证数据的安全性。
问题一:为什么要实现setter?
原理:封装的概念就是 自己的数据成员仅对自己可见,只有自己才能改变其值。
setter:改变数据成员值时,操作必须由这个对象自己触发;
public:改变数据成员值时,操作可以由任何对象触发;
实例:
public void setA(String a){ this.a = a; (操作必须由这个对象自己 修改/触发 ) }
问题二:为什么要实现getter?
原理:因为数据成员用了private进行对外不可见,所以用getter。
问题三:getter怎么用?
原理:getter方法返回对象引用,返回可变对象的引用则破环了封装性。
方案:返回引用可变对象则采用克隆。 注意:日期(Date),数组(String[]),集合(List),键值对(Map)
实例:
public void getmDate(Date mDate ){ return mDate.clone() ; (操作必须由这个对象自己 修改/触发 ) } public static void main(String[] args){ Date date = mDate.getmDate() ; //通过getter获取对象引用 System.out.println("original:"+date.getTime()); //对象原始值 Thread.sleep(1000) ; //休眠1秒 System.out.println("process:"+date.getTime()); //修改值 System.out.println("after:"+mDate.getmDate() .getTime()); //对象修改值 }
优点:更加方便管理。①setter只是进行赋值,而不是引用传递。故当修改传值参数时不会影响对象的数据成员(重点)
②当需要修改类数据成员的时候直接找到该类修改即可;
2)继承性:子类继承超类,实现代码复用。
问题一:什么叫向上转型?向上转型的方法调用?
原理: 子类创建的一个对象引用赋值给其父类变量,叫做向上转型。
(1)通过父类对象不能操作子类新增的成员变量,不能调用子类新增的方法;
(2)通过父类对象调用子类重写父类的方法时,调用的是子类重写后的方法;
实例:
/* * Boy为子类,Father为父类 */ public static void main(String[] args){ Father father = new Boy() ; //向上转型 father.smile() ; //调用子类的smile()方法 }
问题二:什么叫向下转型?向下转型的方法调用?
原理:指向对应子类对象的引用的父类 强制转换为对应子类后 将该引用赋值给其子类变量,叫做向下转型。
(3)若将父类对象在强制转换为相应子类的对象,该子类对象又具备了子类所有的属性和方法;
实例:
/* * Boy为子类,Father为父类 */ public static void main(String[] args){ /* * 错误示范 */ Father father = new Father() ; Boy boy = (Boy)father ; //不安全的向下转型,编译无错但会运行会出错,抛出 java.lang.ClassCastException /* * 一般示范 */ Father father = new Boy() ; //向上转型 Boy boy = (Boy)father ; //向下转型,编译和运行皆不会出错 /* * 正确师范 */ Father father = new Boy() ; //向上转型 if(father instanceof Boy){ Boy boy = (Boy)father ; //安全的向下转型 } }
问题三:为什么子类引用不能指向父类对象?
原理:java的机制。堆中父类对象不存在子类的某些方法以及变量,故导致转换缺失,抛出 java.lang.ClassCastException。
3)多态性: 多态性即多种形态。多态性的实现与静态联编、动态联编有关。
静态联编/静态绑定 支持的多态性称为编译时的多态性,也称静态多态性,它是通过重载实现的。重载
动态联编/动态绑定 支持的多态性称为运行时的多态性,也称动态多态性,它是通过继承和虚函数实现的。覆盖+对象变量多态
表现形式:①重载
②覆盖
③对象变量是多态的(因为父子类)。
问题一:什么叫静态多态性? 范围:private方法、static方法、final方法、构造器(不参与动态联编)
方案:静态联编是指在编译时,系统就能决定调用哪个函数。
原理:相同方法名称,根据参数类型或个数的不同调用对应的方法。
条件:重载,非继承
优点:方便调用,速度快。
问题二:什么叫动态多态性? 范围:Java中除了 private方法、static方法、final方法、构造器 外,其他的所有方法都是动态绑定的。
方案:动态联编是指在运行时,虚拟机调用 x所引用对象的实际类型 的 最合适的方法。
原理:首先会查找这个类实际引用,然后在查找对应的方法,如果方法在该类已经定义了则直接调用,否则则在该类的超类中查找对应方法,以此类推。
特例:如果调用super编译器会自动对超类方法进行搜索。
(动态联编虚拟机优化方案:每次调用方法都要进行搜索,时间开销相当大。因此,虚拟机预先为每个类创建了一个方法表,其中列出了所有方
法的签名和实际调用的方法。)
条件:覆写,继承,向上转型。
优点:无需对现存的代码进行修改,就可以对程序进行扩展。(直接将引用改为新增类即可)
相关文章推荐
- 深入理解Java面向对象的三大基本特性
- 深入理解Java面向对象三大特性 封装 继承 多态
- 深入理解Java面向对象三大特性 封装 继承 多态
- 深入理解Java面向对象的三大基本特性
- Java面向对象的三大特性 多态
- 面向对象三大特性和五大原则
- OC-类的声明与实现、方法的声明与实现、面向对象的三大特性之封装
- 黑马程序员——OC—面向对象的三大特性
- 面向对象的三大特性
- Java开发三大方向及面向对象的特性
- 面向对象三大特性之多态性
- C#面向对象三大特性之一:封装
- 面向对象的三大特性:封装、继承、多态
- IOS开发学习笔记010-面向对象的三大特性
- 面向对象的三大特性
- 面向对象的三大特性
- 面向对象三大特性五大原则 + 低耦合高内聚
- php学习笔记------[php中面向对象三大特性之一[封装性]的应用]
- 面向对象的三大基本特性
- java 面向对象三大特性(封装,继承,多态)以及抽象、接口的介绍