定义抽象类Shape,抽象方法为showArea(),求出面积并显示,定义矩形类Rectangle,正方形类Square,圆类 Circle,根据各自的属性,用showArea方法求出各自的面积,在m...

实现多态的三个条件:1.要有继承2.要有抽象方法重写3.用父类指针(引用)指向子类对象

重载重写重定义的区别:

1.重载:在同一个类中进行;  编译时根据参数类型和个数决定方法调用;  子类无法重载父类;

  父类同名方法被子类该方法覆盖.

2.重写:在父类和子类之间进行;  父类与子类方法有完全相同类型;

  在运行时根据具体对象类型决定方法调用;

3.在重写中有抽象方法的会产生多态;没有使用抽象方法叫重定义

以下具体代码具体分析:

package test3;
abstract class Shape{      //抽象类(一定有抽象方法,但不一定都是抽象方法)
protected double area;
abstract void showArea();    //抽象方法
}
class Rectangle extends Shape{ //类的继承
private double x,y;
Rectangle(){}
Rectangle(double x,double y){  //有参构造方法初始化
this.x=x;
this.y=y;
}
public double getX(){
return x;
}
public double getY(){
return y;
}
public void showArea(){      //计算面积并显示.showArea方法的重写
area=getX()*getY();
System.out.println(area);
}
}
class Square extends Shape{    //同上
private double x;
Square(){}
Square(double x){
this.x=x;
}
public double getX(){
return x;
}
public void showArea(){
area=getX()*getX();
System.out.println(area);
}
}
class Circle extends Shape{    //同上
private double r;
Circle(){}
Circle(double r){
this.r=r;
}
public double getR(){
return r;
}
public void showArea(){
area=3.14*getR()*getR();
System.out.println(area);
}
}
public class Test3_2 {
public static void main(String args[]){
Shape re=new Rectangle(2,3);    //多态产生的第3个条件.父类的引用指向子类的对象
fun(re);              //抽象方法重写产生多态,运行时根据具体对象类型决定方法调用
Shape sq=new Square(2);
fun(sq);
Shape ci=new Circle(2);
fun(ci);
}
public static void fun(Shape p){    
p.showArea();
}
}

转载于:https://www.cnblogs.com/silenTJ/p/7786668.html

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值