[JAVA] 7.Java的多态

简言之,Java的多态可以通过三种方式实现:

  1. 重写
  2. 接口
  3. 抽象类和抽象方法

1. 重写

之前提到过,包括对equals和hashcode的重写,还有对于函数的重载。

3. 抽象类抽象方法:

UIControl.java

public abstract class UIContent {
        ...
   public abstract void render();
}

TextBox.java

public class TextBox extends UIContent {
@Override
    public void render() {
        System.out.println("渲染TextBox");
    }
}

上面的TextBox继承了抽象类,而抽象类中声明了一个抽象方法,所以TextBox必须去实现它,否则编译错误,或者可以将TextBox声明为抽象类,然后继承TextBox的类实现它。

提到了abstract,就要提一下fianl这个修饰词,final修饰类的时候,该类不可被继承,修饰方法的时候,该方法不可被重写,修饰变量的时候,该变量不可被改动。

接口

如果理解接口和类呢?下面这张图中mosh讲的通俗易懂
接口和类
通过接口可以实现什么效果呢?

下面是一个紧耦合的例子:

TaxCalculator.java

public class TaxCalculator {
    private double taxableIncome;

    public TaxCalculator(double taxableIncome) {
        this.taxableIncome = taxableIncome;
    }
    public double calculateTax(){
        return taxableIncome*0.3;
    }
}

TaxReport.java

public class TaxReport {
    private TaxCalculator calculator;
    public TaxReport(){
        calculator = new TaxCalculator(10_000);
    }
    public void show(){
        var tax = calculator.calculateTax();
        System.out.println(tax);
    }
}

接下来,创建接口:

在java中,大家命名接口时,一般命名为:Can...或者...able

这里定义TaxCalculator接口(已经重命名之前的类为TaxCalculator2020)

public interface TaxCalculator {
    double calculateTax();
}

这里不需要指定内部函数为public,因为这个是默认的。

当一个类实现接口的时候,需要在实现的函数上加上@Override,与继承时使用extends类似,实现时使用implements,这个置于extends后面。

posted @ 2020-04-25 01:25  莫等闲™  阅读(148)  评论(0)    收藏  举报