『黑马程序员』---java--面向对象--多态+Object篇
来源:互联网 发布:寰神结剧情知乎 编辑:程序博客网 时间:2024/05/21 11:15
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
多态,是面向对象中的一大特点.其,在继承的基础上产生,就是使java世界中的实物具有多种存在形态.
多态定义:某一类事物的多种存在形态
体现(表现形式):父类的引用指向了自己的子类对象;或者也可以说父类的引用也可以接受自己的子类对象.
前提:必须是类与类之间有关系,要么继承,要么实现.通常还要存在覆盖.
好处:多态的出现大大提高了程序的扩展性
弊端,虽然提高了扩展性,但是也只能使用父类的引用访问父类中的成员而已
例子: 动物:猫 , 狗 ,
abstract class Animal{abstract void eat();}class cat extends Animal{public void eat(){System.out.println("吃鱼");}public void catchMouse(){System.out.println("抓老鼠");}}class Dog extends Animal{public void eat(){System.out.println("吃骨头");}public void defend(){System.out.println("守家");}}public class DuoTaiDemo {public static void main(String[] args) {Animal a=new cat();//类型提升,向上转型a.eat();//打印出"吃鱼"//如果想要调用猫的特有方法,可以强制将父类的引用,转成子类类型.向下转型cat c=(cat)a;//向下转型c.catchMouse();}}
(重)在多态中,成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法.如果有,编译通过,如果没有编译失败.
在运行时期:参阅对象所属的类中是否有调用的方法.
在多态中,成员变量的特点:
当父类,子类出现重名变量时,无论编译还是运行,都参考左边(引用型变量所属的类)
在多态中,静态成员函数,变量特点:
无论编译和运行,都参考左边(只参考引用所属,与类静态绑定)
class Fu{int num=5;void method1(){System.out.println("fu_1");}void method2(){System.out.println("fu_2");}static void method4(){System.out.println("fu_4");}}class Zi extends Fu{int num=8;void method1(){System.out.println("zi_1");}void method3(){System.out.println("zi_3");}static void method4(){System.out.println("zi_4");}}public class DuoTaiDemo{public static void main(String[] args) {Fu f=new Zi();f.method1();f.method2();//f.method3();父类中没有,必须向下转型才可以调到System.out.println(f.num);//打印出5,是父类中的numZi z=new Zi();z.method1();//打印出zi_1z.method2();//打印出fu_2,继承父类的,直接用z.method3();//打印出zi_3System.out.println(z.num);//打印出8,是子类中的numf.method4();//result:fu_4z.method4();//result:zi_4}}
Object 类,是类层次结构的根类.每个类都使用Object作为超类(包括数组)都实现这个类的方法.[所有对象的直接或间接父类,就是上帝,该类中定义的是所有对象都具备的功能]
常见的有equals----Object类中提供的.
对,对象是否相同的比较方法.[如果自定义类中也有比较相同的功能,此时没必要重新定义,只要沿袭父类中的功能即可,建立自己特有的比较内容]
class Demo{//extends Objectprivate int num;Demo(int num){this.num=num;}public boolean equals(Object obj){//Object obj=new Demo();if(!(obj instanceof Demo))//判断obj是否为demo类的对象return false;Demo d=(Demo)obj;//向下转型return this.num==d.num;}}public class Test{public static void main(String[] args) {Demo d1=new Demo(4);Demo d1=new Demo(4);System.out.println(d1.equals(d2));//使用复写后的equals,结果为true//假设有一个person类person p=new person(4);System.out.println(d1.equals(p));//因为p不是demo类的对象,不能调用demo类中的equals方法,用的还是Object中的,所以结果是false}}
0 0
- 『黑马程序员』---java--面向对象--多态+Object篇
- 黑马程序员--------java面向对象 继承、接口、多态、Object类
- 黑马程序员 面向对象 多态 需求 object
- 黑马程序员--03.Java面向对象--09.【Object类】
- 黑马程序员——java第八天:面向对象(多态、Object-equals&-toString)
- 黑马程序员-day08-面向对象(Object类)
- 黑马程序员-java面向对象(多态)
- 黑马程序员------java面向对象、多态
- 黑马程序员-java基础篇-面向对象
- 『黑马程序员』---java--面向对象--继承+接口
- 黑马程序员 java面向对象
- “黑马程序员”-Java面向对象
- 黑马程序员--java面向对象
- 黑马程序员---面向对象【java】
- 黑马程序员-------Java面向对象
- 黑马程序员--java面向对象
- 黑马程序员-java面向对象
- 黑马程序员------JAVA面向对象
- 清华“差生”10年奋斗经历:
- Adobe AIR安装错误解决办法
- SELinux入门:了解和配置SELinux semanage
- 为么使用Redis及其产品定位 —— Redis学习笔记(二)
- 关于CDialog类的OnOK、OnCancel、OnClose和OnDestroy
- 『黑马程序员』---java--面向对象--多态+Object篇
- javaSE-多线程停止
- 对fram,boundls的一些理解(2)
- VS快捷键教程
- LeetCode | Spiral Matrix
- JavaScript中的匿名函数、回调函数、自调用函数
- 表格一条线
- Reverse Integer
- Android 输入表单实例--上下固定,中部滚动布局