A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wws1214 中级黑马   /  2015-7-9 17:28  /  714 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

面向对象 多态 需求 object
               
1、多态:事物存在的多种体现形态

2、1)多态的体现
        父类的引用指向了自己的子类对象
   2)多态的前提
        必须是类与类之间有关系,要么继承,要么实现
        通常还有一个前提:存在覆盖。
   3)多态的好处
        多态的出现大大的提高程序的扩展性
   4)多态的弊端
        提高了扩展性,但是只能使用父类的引用访问父类中的成员
   5)多态的应用

   6)多态的出现代码中的特点(多态使用的注意事项)

3、 总-分-调用分
abstract class animal
{
        abstract void eat();
}
---
class cat extends animal
{
        //重写
        public void eat()
        {
                System.out.println("吃鱼");
        }
        //其他方法
        public void catchMouse(){}
}
---
public static void function(animal a){}//animal a=new cat();
...
class
{
        public static void main(String[] args)
        {
                //function(new cat());
                animal c=new cat();//应用数据类型提升,向上转型
                c.eat();
                //如果想要调用猫的特有方法时,如何操作
                //cat c1=new cat();这样就有创建了一个新的对象,增加的内存、

同时逻辑上可能出现差错
                //强制将父类的引用,转成子类类型
                cat c=(cat)c;//向下转型
                c.catchMouse();
               
                //千万不要出现这样的操作:animal c=new animal();cat c=

(cat)c;这是错误操作
        }
}



4、注:我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可

以被强制转换。
    多态至始至终都是子类对象在做着变化

5、classCartException类型转换异常

判断引用类型是否正确
public void function(animal a)
{
        if(a instanceof cat){}
        else if(a instanceof dog){}
        ...
}

6、(常见)在多态中成员函数的特点:
        在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译

通过,如果没有编译失败。
        在运行时期:参阅对象所属的类中是否有调用的方法。
        简单总结:成员函数在多态调用时,编译看左边,运行看右边

7、(面试)在多态中,成员变量的特点:
        无论编译和运行,都参考左边(引用型变量所属的类)

class fu
{
int num=5;
}
class zi extends fu
{
int num=8;
}
fu f=new zi();
zi z=new zi();
s.o.p(f.num);//5
s.o.p(z.num);//8

        2)在多态中,静态(static)成员函数的特点:
          无论编译和运行,都参考左边。

8、需求:
        1)电脑运行实例:基于主板。
        2)数据库的操作:连接、操作(CRUD create read update delete)、关闭
       
   接口:降低了程序耦合性
   多态:增加的程序的扩展性

9、Object
    equals():比较的是地址

        如果自定义类中也有比较相同的功能,没有必要重新定义。
        只要沿袭父类中的功能,建立自己特有比较内容即可,这就是覆盖。

    .toString()相当于.getName+"@"+Integer.toHexString(hashcode())


2 个回复

倒序浏览
不懂你在说啥
回复 使用道具 举报

这是一小部分基层的部分(看视频,个人觉得比较有用的,所以分享一下)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马