第六周&java实验报告四
一.实验目的
(1)掌握类的继承
(2)变量的继承和覆盖,方法的继承,重载和覆盖的实现;
二.实验的内容
(1)根据下面的要求实现圆类Circle。
1.圆类Circle的成员变量:radius表示圆的半径。
2.圆类Circle的方法成员:
Circle():构造方法,将半径置0
Circle(double r):构造方法,创建Circle对象时将半径初始化为r
double getRadius():获得圆的半径值
double getPerimeter():获得圆的周长
void disp():将圆的半径和圆的周长,圆的面积输出到屏幕
实验代码:
package java3;
import java.util.*;
class Circle{
private double radius;
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public Circle() {
setRadius(0);
}
public Circle(double r) {
setRadius(r);
}
public double getPerimeter() {
return 2*Math.PI*getRadius();
}
public void disp() {
System.out.println("圆的半径为:"+getRadius());
System.out.println("圆的周长为:"+getPerimeter());
System.out.println("圆的面积为:"+Math.pow(getRadius(),2)*Math.PI);
}
}
public class test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入半径:");
double radius=sc.nextDouble();
Circle pr=new Circle();
pr.setRadius(radius);
pr.disp();
}
}
实验结果截图:
(2)继承第一题中的圆Circle类,派生圆柱体类Cylinder。要求如下:
1.圆柱体类Cylinder的成员变量:height表示圆柱体的高。
2.圆柱体类Cylinder的成员方法:
Cylinder(double r,double h)构造方法,创建Cylinder对象时将圆半径初始化为r,圆柱体高初始化为h。
double getHeight():获得圆柱体的高
double getVol():获得圆柱体的体积
void dispVol():将圆柱体的体积输出到屏幕
3.按照第二题的Cylinder类,接上键盘的输入值作为圆的半径和圆柱体的高,计算圆柱体的体积
实验代码:
package java3;
import java.util.*;
class Cylinder extends Circle{
private double height;
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public Cylinder(double r,double h) {
setRadius(r);
setHeight(h);
}
public double getVol() {
return Math.pow(getRadius(),2)*Math.PI*getHeight();
}
public void dispVol() {
System.out.println("圆柱体的体积为:"+getVol());
}
}
public class yuan {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入圆的半径:");
double radius=sc.nextDouble();
System.out.println("请输入圆的高:");
double height=sc.nextDouble();
Cylinder pr=new Cylinder(radius,height);
pr.dispVol();
}
}
实验结果截图:
本周学习总结
1.本周了解的接口的基本概念
利用interface进行定义,在接口里只有全局常量与抽象方法,并且接口与继承有区别,(继承不能多继承,只能单一继承,而接口可以多个接口)
interface 接口名称{
全局变量;
抽象方法;
}
2.多熟悉了一个关键词(instanceof),返回值为布尔类型。
3.多了解了用键盘输入数据的操作流程。
4.main方法中不能使用this、super
super关键字
1).使用super可以访问父类中的方法和属性。
2).调用父类构造,必须放在子类构造方法的首行,因此与this不能同时出现。
final关键字
3).使用final声明的变量即为常量,不可修改。
5.对象的多态性
1)向上转型:子类对象 →父类对象(自动转换)
由于所有的子类对象实例都可以自动的向上转型,所以在于参数的统一上。参数统一之后,还可以调用子类覆盖后的方法体,即:同一个方法针对于不同的子类可以有不同的实现。
2)向下转型:父类对象 →子类对象(强制转换)
指的是父类要调用子类自己特殊的方法。所有的父类发生了向上转型后只能看见父类自己定义的全部方法信息,但看不见子类特殊的方法,于是此时就要使用向下转型了。将父类对象转换为子类对象。这样就可以使用子类的特殊功能了。
注:首先要进行向上转型,然后在进行强制类型转换。