多态与接口

一.多态

1.多态的引用类型有几种状态?

向上类型转换(隐式/自动类型转换)是大型到小型的转换

向下类型转换(强制类型转换)

2.产生多态的条件是什么?

(1)要有继承
(2)要有方法的重写
(3)父类引用指向子类对象
3.多态的好处?
(1)可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
(2)可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
(3)接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。
(4)灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
(5)简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
代码:
class A extends Main{  
    public String show(A obj)  
    {  
        System.out.println("调用了A的show方法");  
        return "A";  
    }  
}  
class B extends Main{  
    public String show(B obj)  
    {  
        System.out.println("调用了B的show方法");  
    return "B";  
    }  
}  
class C extends A{  
    public String show(C obj)  
    {  
        System.out.println("调用了C的show方法");  
        return "C";  
    }  
}  
public class Main{  
    public static void main(String[] args)  
    {  
        Main u = new Main();  
        A a = new A();  
        B b = new B();  
        C c = new C();  
        System.out.println(u.show(c));//改变c的值为a,b,看结果  
    }  
    public String show(Main main)  
    {  
        if(main instanceof A)  
        {  
            System.out.println("以A类为对象调用show方法");  
        }  
        if(main instanceof B)  
        {  
            System.out.println("以B类为对象调用show方法");  
        }  
        if(main instanceof C)  
        {  
            System.out.println("以C类为对象调用show方法");  
        }  
        return "main";  
    }  
      
}  


二.接口

1.接口的关键字是什么?

接口是一种特殊的抽象类,被interface修饰。

2.为什么使用接口?

接口可以降低耦合性,换句话说,可以让某个模块或功能能够重复利用,这样只要写这功能一次代码就ok了。其他地方要用到的,全部用接口调用来实现。

3.使用接口的好处?

(1)减少代码的书写 

(2)提高了代码的可维护性和扩展性

(3) 在团队合作中,代码的规范性

代码:

public class Cire implements CalInterface   
{  
    public float getArea(float r)   
    {  
        float area=PI*r*r;//计算圆面积并赋值给变量area  
        return area;//返回计算后的圆面积  
    }  
    public float getCircumference(float r)   
    {  
        float circumference=2*PI*r;      //计算圆周长并赋值给变量circumference  
        return circumference;           //返回计算后的圆周长  
    }  
    public static void main(String[] args)   
    {  
        Cire c = new Cire();  
        float f = c.getArea(2.0f);  
        System.out.println(Float.toString(f));  
    }  
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值