Day6:面向对象------多态

1、多态

多态:
某一事物的多种体现形态。
重点是对象的多态性。


class 动物
{}


class 猫 extends 动物
{}

//猫 x = new 猫();
动物 x = new 猫();多态。

多态在程序中的体现:父类或者接口的引用指向了自己的子类对象。

多态的好处:提高了代码的扩展性,后期出现的功能,可以被之前的程序所执行。

多态的弊端:虽然可以使用后期出现的代码,但是不能使用子类特有的功能。只能使用覆盖了父类的功能。

多态的前提:必须要有关系(继承,实现),通常会有覆盖操作。

向下转型前,必须对具体对象进行类型的判断。判断的关键字的 instanceof为了避免运行时出现ClassCastException

(向下转型。什么时候用?当需要使用子类型的特有方法时。)

多态的调用方式在子父类中的特殊体现。


1,成员变量。
多态调用的时,编译和运行都参考引用型变量所属的类中的成员变量。
编译和运行看等号的左边。

2,成员函数。
多态调用时,编译参考的是引用型变量所属的类,运行时参考的是对象所属类。
编译看左边,运行看右边。因为函数有一个覆盖的特性。


3,静态函数。
多态调用时,编译和运行都参考引用型变量所属的类中的静态函数。
编译和运行看等号的左边。



成员变量和静态函数,看左边。
只有非静态函数,编译看左边,运行看右边;

 

2、内部类

内部类:定义在类中的类,称为内部类。

好处是可以直接访问外部类中的成员。


外部类要访问内部类需要创建内部类的对象。

内部类直接访问外部类的原理:因为内部类持有了外部类的引用。外部类名.this
/*内部类可以定义在局部*/
void method()
    {
        final int x = 5;//内部类在局部时,只能访问被final修饰的局部常量。非final的不行,因为生命周期不同
        class Inner extends Demo
        {
            void show()
            {
                System.out.println("x="+x);
                System.out.println(num);
            }
        }
        
        d = new Inner();
    }
匿名内部类:就是内部类的简化格式。
内部类必须继承一个类或者实现接口,这种情况下的内部类可以简化成匿名内部类

格式:new 父类或者接口(){定义子类的内容}
其实匿名内部类就是一个子类对象。
原文地址:https://www.cnblogs.com/vijay/p/3502940.html