一.多态
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));
}
}