多态
定义: 多态是同一个行为具有多个不同表现形式或形态的能力。
通俗一点讲多态是同一种操作在不同环境条件下多种不同的体现,比如在网页上你按F5是刷新,在vscode上你按F5可以编译运行程序。
多态的优点:
- 消除类型之间的耦合关系
- 可替换性
- 可扩充性
- 接口性
- 灵活性
- 简化性
重写是java实现多态的一种重要形式,子类在继承父类时,有时所需要的一个方法与父类中的差不多但是又不完全一样,这时我们就可重写继承下来的方法。
public class shape {
private double side;
shape(double side){
this.side=side;
}
public double getArea(){
return 0;
}
public double getSide() {
return side;
}
public void setSide(double side) {
this.side = side;
}
}
class Circle extends shape{
private double radius;
Circle(double radius){
super(radius);
this.radius=radius;
}
void setRadius(double radius){
this.radius=radius;
}
public double getRadius() {
return radius;
}
@Override//重写
public double getArea(){
return Math.PI*radius*radius;
}
}
class Rectangle extends shape{
private double width;
private double height;
Rectangle(double width,double height){
super(width);
this.width=width;
this.height=height;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
@Override//重写
public double getArea() {
return width*height;
}
}
对象类型的转换也是多态的重要表达形式,向上可以自动转换类型,由子类转换成父类,向下可以由父类转换成子类。
public class Demo{
public static void main(String[] args) {
Shape a= new Circle();//向上转型,由子类转化为父类
a.myShape();
Shape b =new Circle();
System.out.println(b.x);
Circle c = (Circle)b;//向下转型,将父类强制转化成子类
c.test();
}
}
class Shape{
public String x="hello java";
void myShape(){
System.out.println("I have no shape");
}
}
class Circle extends Shape{
void myShape(){
System.out.println("I'm a Circle");
}
void test(){
System.out.println("Hello World!");
}
}