Java实验报告(四)
一、 实验目的
- (1)掌握类的继承
- (2)变量的继承和覆盖,方法的继承,重载和覆盖的实现;
二、 实验内容
(1)根据下面的要求实现圆类Circle。
1.圆类Circle的成员变量:radius表示圆的半径。
2.圆类Circle的方法成员:
Circle():构造方法,将半径置0
Circle(double r):构造方法,创建Circle对象时将半径初始化为r
double getRadius():获得圆的半径值
double getPerimeter():获得圆的周长
void disp():将圆的半径和圆的周长,圆的面积输出到屏幕
实验源码:
public class Circle {
private double Radius;
public double getRadius() {
return Radius;
}
public void setRadius(double radius) {
Radius = radius;
}
Circle(double r){
Radius = r;
}
double getArea(double r){
return Math.PI * r * r;
}
double getPerimeter(double r){
return 2 * Math.PI * r;
}
public void disp( ){
System.out.println("圆的半径:"+ this.Radius);
System.out.println("圆的面积: " + this.getArea(Radius));
System.out.println("圆的周长: " + this.getPerimeter(Radius));
}
public static void main(String[] args) {
Circle c =new Circle(1.0);
c.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 com.company;
import java.util.Scanner;
class program {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
double r = sc.nextDouble();
double h = sc.nextDouble();
Cylinder a = new Cylinder(r,h);
a.dispVol();
}
}
public class Circle {
protected double Radius;
Circle() {
this.Radius = 0;
}
Circle(double r) {
this.Radius = r;
}
double getRadius() {
return this.Radius;
}
double getPerimeter() {
return 2 * Math.PI * this.Radius;
}
double getArea() {
return Math.PI * this.Radius * this.Radius;
}
public void disp( ){
System.out.println("圆的半径:" + this.Radius);
System.out.println("圆的面积:" + getArea());
System.out.println("圆的周长:" + getPerimeter());
}
}
class Cylinder extends Circle { // class 子类 extends 父类
double height;
Cylinder(double r,double h) {
super.Radius = r;
this.height = h;
}
double getHeight() {
return this.height;
}
double getVol() { // 获取圆柱的体积
return super.getArea() * this.height;
}
void dispVol() {
System.out.println("圆柱体的体积:" + getVol());
}
}
实验结果:
内容总结:
作业问题:
第一题的个人想法:
public class Main {
public static void main(String[] args) {
Circle circle = new Circle();
Scanner sc = new Scanner(System.in);
double radius =sc.nextDouble();
System.out.println("圆的半径为:"+circle.getRadius);
System.out.println("圆的面积为:"+circle.getArea(5));
System.out.println("圆的周长为:"+circle.getPerimeter(5));
}
}
class Circle{
public String getRadius;
public double radius;
public double getRadius() {
return radius;
}
public double getArea(double radius){
return radius*radius*Math.PI;
}
public double getPerimeter(double radius){
return 2*radius*Math.PI;
}
}
截图:
抽象类
abstract class抽象类名称{
属性;
访问权限返回值类型方法名称(参数){ //普通方法
[return返回值];
}
访问权限abstract返回值类型方法名称(参数); //抽象方法
//在抽象方法中是没有方法体的
}
instanceof关键字
- instanceof关键字的作用:判断一个对象是否属于指定的类别。
- instanceof关键字的使用前提:判断的对象与指定的类别必须要存在继承或者实现的关系。
- instanceof关键字的使用格式:对象 instanceof 类别
- instanceof关键字的作用: 一般我们做强制类型转换之前都会使用该关键字先判断一次,然后再进行转换的。
接口
接口是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。
接口与类相似点:
- 一个接口可以有多个方法。
- 接口文件保存在 .java 结尾的文件中,文件名使用接口名。
- 接口的字节码文件保存在 .class 结尾的文件中。
- 接口相应的字节码文件必须在与包名称相匹配的目录结构中。
接口与类的区别:
- 接口不能用于实例化对象。
- 接口没有构造方法。
- 接口中所有的方法必须是抽象方法。
- 接口不能包含成员变量,除了 static 和 final 变量。
- 接口不是被类继承了,而是要被类实现。
- 接口支持多继承。
抽象类和接口的区别
- 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
- 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
- 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
- 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
接口的声明语法格式如下:
[可见度] interface 接口名称 [extends 其他的接口名] {
// 声明变量
// 抽象方法
}