当我忘了你的时候,我就忘了我自己。——《呼啸山庄》
正态分布:又称高斯分布,是一个在数学、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力。正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布,记为N(μ,σ^2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。其概率密度函数及期望方差如下图所示:
前言
本周我们继续来学习Java三大特性之多态性,至此,Java三大特性我们也算是大概了解了一遍,后面我们将在这三大特性的基础之上提高我们的编程能力。
一、多态
多态性是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。这个概念是不是与我们上周学习的方法的重载很类似~
对面向对象的语言来说来说,多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,以实现多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是大家通常所说的多态性。
二、Java实现多态的三个必要条件
Java 实现多态有 3 个必要条件:继承、重写和向上转型。只有满足这 3 个条件,开发人员才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而执行不同的行为。
1.继承:在多态中必须存在有继承关系的子类和父类。
2.重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
3.向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。那下面我们通过一个具体的例子来看看如何实现Java类的多态性吧。
三、实战X
三、实战
1.首先创建Graph类,定义参数和方法,并定义area()方法用于计算面积。
package Third.tisheng5;
public class Graph {
double radius;
double upper;
double lower;
double high;
Graph(double r) { //有1个参数的构造方法
this.radius = r;
}
Graph(double up,double low,double hig) { //有3个参数的构造方法
this.upper = up;
this.lower = low;
this.high = hig;
}
double area() { // 用于计算对象的面积
System.out.println("父类中计算对象面积的方法,没有实际意义,需要在子类中重写。");
return 0;
}
}
2.然后定义Circle类继承Graph类,该类调用父类的构造方法,并且重写父类中的 area() 方法。
package Third.tisheng5;
public class Circle extends Graph {
Circle(double r) {
super(r);
}
double area() {//重写父类的area方法,并将值返回
System.out.println("The circle\'s area:");
return Math.PI * super.radius;
}
}
3创建Trapezoid类继承Graph类的,该类与 Circle相似。
package Third.tisheng5;
public class Trapezoid extends Graph {
Trapezoid(double up, double low,double hig) {
super(up, low,hig);
}
double area() {//重写父类的方法,并将值返回
System.out.println("The Trapezoid\'s area:");
return (super.upper *+super.lower)*super.high / 2;
}
}
4.创建Test测试类,在该类的main()方法中首先声明Graph类的变量 graph,然后分别为graph变量指定不同的对象,并调用这些对象的area() 方法。代码如下:
package Third.tisheng5;
public class Test {
public static void main(String[] args) {
Graph graph; // 声明Graph类的变量
graph = new Circle(9);//调用Circle类的Circle方法
System.out.println(graph.area());
System.out.println("===============================");
graph = new Trapezoid(6, 8,10);//调用Trapezoid类的Trapezoid方法
System.out.println(graph.area());
System.out.println("===============================");
graph = new Graph(10, 10,12);
System.out.println(graph.area());
}
}
运行结果及截图
从上述代码可以发现,无论 Graph变量的对象是 circle还是 Trapezoid,它们都是 Graph类的子类,因此可以向上转型为该类,从而实现多态。
小编有话说
这周我们就来回顾一下方法的重载和重写吧,还有多态也一起实现,方便大家理解他们之间的差别,下面是习题时间
编辑:玥怡居士|审核:世外居士