DAY11------面向对象 小结
2014-04-07 19:19
232 查看
---------------------- 拖走FM----期待与您交流! --------
收音机,电台,网上电台,广播,在线广播,网络广播,广播电台,网络电台,在线电台,电台在线收听,广播电台在线收听,网络电台在线收听,在线收听电台,fm收音机,网络收音机,广播下载,在线收音机,收音机软件下载,电台软件下载,网络收音机下载--------------
---------------------- 拖走FM----期待与您交流! --------
面向对象——多态
多态:是指同一个实体同时具有多种形式
比如水有多种形态
编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给变量的对象决定。
如果编译时的类型和运行时类型不同,就会出现多态。
EG
Student extends Person://前提是继承
Person p=new Person();
Person s=new Student();
Person p=new Student();//多态
引用关系:父类变量指向子类的实例对象,而程序调用的方法在运行期才动态绑定。
就是引用变量所指向的真正实例对象的方法,也就是内存里正在运行的那个对象方法,而不是引用变量的类型重定义的方法。
多态的作用:
把不同的子类对象都当做父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的程序,以适应需求的不断变化
只修改方法的实现,不必修改方法的声明。
分类
编译时多态 方法的重载
运行时多态 方法的覆写
收音机,电台,网上电台,广播,在线广播,网络广播,广播电台,网络电台,在线电台,电台在线收听,广播电台在线收听,网络电台在线收听,在线收听电台,fm收音机,网络收音机,广播下载,在线收音机,收音机软件下载,电台软件下载,网络收音机下载--------------
---------------------- 拖走FM----期待与您交流! --------
面向对象——多态
多态:是指同一个实体同时具有多种形式
比如水有多种形态
编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给变量的对象决定。
如果编译时的类型和运行时类型不同,就会出现多态。
EG
Student extends Person://前提是继承
Person p=new Person();
Person s=new Student();
Person p=new Student();//多态
引用关系:父类变量指向子类的实例对象,而程序调用的方法在运行期才动态绑定。
就是引用变量所指向的真正实例对象的方法,也就是内存里正在运行的那个对象方法,而不是引用变量的类型重定义的方法。
多态的作用:
把不同的子类对象都当做父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的程序,以适应需求的不断变化
只修改方法的实现,不必修改方法的声明。
分类
编译时多态 方法的重载
运行时多态 方法的覆写
package com.itheima; //先构造一个父类抽象出 dog的共同特点 采用 class Dog{ void eat(){ System.out.println("一般的狗吃一般的狗粮!"); } } class HashDog extends Dog{ void eat(){ System.out.println("哈士奇吃哈士奇的狗粮!"); } } class ZangAoDog extends Dog{//多态是建立在继承之上的 继承dog的父类 然后覆写(同名同参不同方法) void eat(){ System.out.println("藏獒吃藏獒的狗粮!"); } }//构造完成 通过主函数进入 //定义一个动物园喂的方法 class Zoo{//初始化一个动物园类 void feed(Dog d){//定义一个feed方法 参数为dog d d.eat(); } } //主函数的入口 public class Test9910 { public static void main(String[] args) { Dog hd = new HashDog(); //创建一个Dog对象 Dog zd = new ZangAoDog(); Zoo z = new Zoo(); //创建一个Zoo 对象 z.feed(hd); //调用z对象的feed方法 参数为hd System.out.println(" ");z.feed(zd);}} 引用型变量类型转换 向上转型(子类——>父类):(自动完成) 父类名称 父类对象=子类实例; 向下转型(父类——>子类):(强制完成) 子类名称 子类对象=(子类名称) 父类实例 对象名 instanceof 类 判定指定的变量名此时引用的真正类型是不是当前给出的类或子类; 对象的类型补习有继承关系 编写java程序时,引用变量只能调用它编译时类型的方法,而不能调用它运行时类型的方法,即使它实际所引用对象确实包含该方法。 引用类型之间的转换只能把一个父类变量转换成子类类型。如果试图把一个父类实例转换成子类类型,则必须这个对象实际上是子类实例才行(即编译时类型为父类类型,运行时为子类类型),否则会发生ClassCastException异常。 public class Test { public static void main(String[] args) { Object o1=new Object();//o1的编译类型是Object,实际类型是Object,是string的父类,所以可以强制转换成string类 String o2=new String(); //o2的编译类型是String,实际类型是String Object o3=new String(); //o3的编译类型是Object,实际类型是String o2=(String)o1; //编译时没错,运行时有错(o2和o1的实际类型不一样) o2=(String)o3; //编译时没错,运行时没错(o2和o3的实际类型一样) o3=(String)o1; //编译时没错,运行时有错(o1和o3的实际类型不一样) o3=o1; //编译时没错,运行时也没错 } } 在强制转换之前可以先用instanceof来判断是否可以成功转换,instanceof 的前一个操作数通常是引用类型变量,后一个通常是类。它用于判断前面的对象是否是后面的类或其子类的实例,如果是返回true否则返回false。instanceof前面的操作数的编译类型要么与后面的类相同,要么是后面类的父类,否则会发生编译错误。 Eg: class A extends B{} B b = new A(); If(b instanceof A){ ... }
相关文章推荐
- js面向对象 多种创建对象方法小结
- 面向对象封装思想小结
- 小结——面向对象
- c#小结(4)---面向对象
- C++ 面向对象 知识点 小结
- Javascript高级程序设计——面向对象小结
- JS面向对象的程序设计相关知识小结
- 面向对象之访问修饰符及其他类的小结
- js面向对象 多种创建对象方法小结
- JAVA学习前十天:小结、面向对象之”扑克牌“例子
- 黑马程序员_Java中的面向对象小结
- c#面向对象小结
- 【设计模式】面向对象小结——重写与重载
- JavaScript面向对象的实现方法小结
- 小结面向对象的类的设计方式
- JavaScript面向对象小结
- 面向对象与类的+抽象类和接口小结
- 回顾JavaScript基础知识小结2-面向对象之接口
- JavaScript面向对象学习小结
- 小结面向对象的类的设计方式