java基础(多态1)

1.多态的概念

  • 一个父类的引用类型变量既可以指向父类对象也可以指向子类对象,可以根据当前时刻指向的不同,自动调用对象的方法,这就是多态。(父类引用指向子类对象)
    但这个父类引用只能调用子类从父类继承过来的成员,不能调用子类独有的成员。
  • 多态的作用:利用多态可以实现同一段代码做不同的事情。
class A 
{
    void f()
    {
        System.out.println("AAA");
    }
}

class B extends A 
{
    void f()
    {
        System.out.println("BBB");
    }
    
    void g()
    {
    }
}

class Test
{
    public static void main(String[] args)
    {
        A a1 = new A();
        B b1 = new B();
        
        a1.f();
        b1.f();
        
        a1 = b1;    //只可以子类转化为父类
        //b1 = a1;  //error   A无法转换为B
        
        a1.f();     //与上面的a1.f()具有不同的功能,同一个语句实现了不同的功能,体现了多态性
        //a1.g();    //error g()方法是子类独有的,无法通过父类引用调用
    }
}
输出结果:
AAA
BBB
BBB

2.多态的实际用法举例

/**
* 写一段代码,能把A类族的所有show函数都调用
* 以后添加了子类也不需修改,依然实现相同的功能。
*/
class A 
{
    void show()
    {
        System.out.println("AAA");
    }
}

class B extends A 
{
    void show()
    {
        System.out.println("BBB");
    }
}

class C extends B 
{
    void show()
    {
        System.out.println("CCC");
    }
}

class Test
{
    static void show(A a)  //只能声明为static类型,main函数才能调用
    {
        a.show();   //父类的引用a作为形参,类似c语言的指针作为函数形参
    }
    public static void main(String[] args)
    {
        A a1 = new A();
        B b1 = new B();
        C c1 = new C();
        
        show(a1);   //把a1传给a
        show(b1);   //只能把子类的引用传给父类引用
        show(c1);
        
    }
}
输出结果:
AAA
BBB
CCC

总结:引用作为函数参数,间接实现了c语言的指针作为函数参数的功能,增加了灵活性。引用可以理解为:a .show()和(a).show()相同。引用指向的是对象,引用变量就可以代表它所指向的对象,而指针只是存了对象的地址,需要加上指针运算符才代表了指向的对象。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。