继承与多态
继承:Java语言继承充分体现了遗传和变异的特点,通过继承可以在已有类的基础上,添加新的变量的方法来创建新类,可以有效地组织程序结构,明确类间的关系。
例题5-1 在圆类基础上,添加新的变量和方法扩展成圆柱体类,实现继承
class Circle{
double radius=10;
public double getArea(){
return Math.PI*radius*radius;
}
}
class Cylinder extends Circle{
double height=100;
public double getVolume(){
return getArea()*height;
}
}
public class Ex05_1 {
public static void main(String[] args){
Circle o=new Circle();
Cylinder o=new Cylinder();
System.out.println("Circle o radius="+ o.radius);
System.out.println("Circle o Area=" +o.getArea());
System.out.println("Cylinder obj radius="+obj.radius);
System.out.println("Cylinder obj Area="+obj.getArea());
System,out.println("Cylinder obj volune="+obj.getArea());
obj=o;//非法,类型不兼容。
o=obj;
System.out.println("after o=obj,Area="+ o.getArea());//非法,Circle类型没有getVolume()成员
(1)继承性:从程序运行结果可知,Cylinder类拥有实例变量radius、实例方法getArea()。这是从Circle类继承来的。Circle称为父类或超类,Cylinder称为子类。
(2)扩展性:Cylinder类在继承了超类Circle变量和方法的基础上,添加新的变量height和新的方法getVolume()。子类一般比超类拥有更多成员。
(3)“is a”特性:o=obj,可以;obj=o;不行。这说明一个子类实例可以付给一个超类类型变量,反之不行。