黑马程序员——Java基础-------面向对象(三)
2015-10-12 10:31
405 查看
-------android培训、java培训、期待与您交流! ----------
面向对象之多态
多态:某一类事物的多种存在形式
对象的多态性。
class 动物{}
class 猫 extends 动物{}
class 狗 extends 动物{}
猫 x = new 猫();
动物 x = new 猫();//一个对象,两种形态。
猫这类事物即具备者猫的形态,又具备着动物的形态。这就是对象的多态性。
简单说:就是一个对象对应着不同类型.
多态在代码中的体现:
父类或者接口的引用指向其子类的对象。
多态的好处:
提高了代码的扩展性,前期定义的代码可以使用后期的内容。
多态的弊端:
前期定义的内容不能使用(调用)后期子类的特有内容。
多态的前提:
1,必须有关系,继承,实现。
2,要有覆盖。
注:对于转型,自始自终都是子类对象在做着变化
instanceof关键字:
用于判断对象的具体类型,只能用于引用数据类型判断,通常在向下转型前用于健壮性的判断
多态时,成员的特点:
1、成员变量。
编译时:参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,没有,编译失败。
运行时:参考引用型变量所属的类中的是否有调用的成员变量,并运行该所属类中的成员变量。
简单说:编译和运行都参考等号的左边。
2,成员函数(非静态)。
编译时:参考引用型变量所属的类中的是否有调用的函数。有,编译通过,没有,编译失败。
运行时:参考的是对象所属的类中是否有调用的函数。
简单说:编译看左边,运行看右边。
因为成员函数存在覆盖特性。
3,静态函数。
编译时:参考引用型变量所属的类中的是否有调用的静态方法。
运行时:参考引用型变量所属的类中的是否有调用的静态方法。
简单说,编译和运行都看左边。
其实对于静态方法,是不需要对象的。直接用类名调用即可。
面向对象之多态
多态:某一类事物的多种存在形式
对象的多态性。
class 动物{}
class 猫 extends 动物{}
class 狗 extends 动物{}
猫 x = new 猫();
动物 x = new 猫();//一个对象,两种形态。
猫这类事物即具备者猫的形态,又具备着动物的形态。这就是对象的多态性。
简单说:就是一个对象对应着不同类型.
多态在代码中的体现:
父类或者接口的引用指向其子类的对象。
多态的好处:
提高了代码的扩展性,前期定义的代码可以使用后期的内容。
多态的弊端:
前期定义的内容不能使用(调用)后期子类的特有内容。
多态的前提:
1,必须有关系,继承,实现。
2,要有覆盖。
注:对于转型,自始自终都是子类对象在做着变化
instanceof关键字:
用于判断对象的具体类型,只能用于引用数据类型判断,通常在向下转型前用于健壮性的判断
abstract class Animal{//定义一个抽象的Animal类 abstract void eat(); } class dog extends Animal{//定义一个dog类继承Animal类 void eat(){ System.out.println("啃骨头"); } void lookhome(){ System.out.println("看家"); } } class Cat extends Animal{//定义一个Cat类继承Animal类 void eat(){ System.out.println("吃鱼"); } void CatMouse(){ System.out.println("抓老鼠"); } } class DuoTaiDemo{ public staic void main(String[]args){//主函数 Anima a=new Cat();//自动提升类型,猫对象提升了动物类型,但是特有功能无法访问,作用:限制了对特有功能的访问 a.eat(); //如果想用具体动物猫的特有功能,可以将该对像向下转型 Cat c=(Cat)a; c.eat(); c.CatMouse(); } public static void method(Animal a){ a.eat(); if(a instanceof Cat){ Cat c = (Cat)a; c.catchMouse(); }else{ System.out.println("类型不对"); } } }
多态时,成员的特点:
1、成员变量。
编译时:参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,没有,编译失败。
运行时:参考引用型变量所属的类中的是否有调用的成员变量,并运行该所属类中的成员变量。
简单说:编译和运行都参考等号的左边。
2,成员函数(非静态)。
编译时:参考引用型变量所属的类中的是否有调用的函数。有,编译通过,没有,编译失败。
运行时:参考的是对象所属的类中是否有调用的函数。
简单说:编译看左边,运行看右边。
因为成员函数存在覆盖特性。
3,静态函数。
编译时:参考引用型变量所属的类中的是否有调用的静态方法。
运行时:参考引用型变量所属的类中的是否有调用的静态方法。
简单说,编译和运行都看左边。
其实对于静态方法,是不需要对象的。直接用类名调用即可。
class Fu{ int num = 3; void show(){ System.out.println("fu show"); } static void method(){ System.out.println("fu static method"); } } class Zi extends Fu{ int num = 4; void show(){ System.out.println("zi show"); } static void method(){ System.out.println("zi static method"); } } class DuoTaiDemo3{ public static void main(String[] args) { Fu f = new zi(); Fu.method();//fu static method Zi.method();//zi static method Fu f1 = new Zi();// // f1.method();//fu static method // f1.show();//zi show // System.out.println(f1.num);//3 // Zi z = new Zi(); // System.out.println(z.num); } }
相关文章推荐
- 黑马程序员-------ARC机制
- 黑马程序员——JavaSE之数组排序的小总结一
- 程序员小抄大全
- 黑马程序员——API中的小总结
- 黑马程序员——Java语言的发展史
- Android学习之 面试资料整理[2]
- 黑马程序员—泛型总结归纳
- 黑马程序员——构造函数,构造代码块,静态代码块的区别
- 黑马程序员——IO 流总结
- 面试题:java GC是在什么时候,对什么东西,做了什么事情?
- 面试心得
- 程序员的开始,起飞
- 黑马程序员——OC中的Foundation
- 黑马程序员——OC中的分类
- 黑马程序员——OC中的类
- 黑马程序员——面向对象的三大特性
- 黑马程序员——OC中的核心语法
- 黑马程序员-------Block
- 不想当一辈子码农,这有份IT民工进阶手册
- 程序员常去的6个头条分享站点