实验四 类的继承
A、实验目的
- 理解抽象类与接口的使用;
- 了解包的作用,掌握包的设计方法。
B、实验要求
- 掌握使用抽象类的方法。
- 掌握使用系统接口的技术和创建自定义接口的方法。
- 了解 Java 系统包的结构。
- 掌握创建自定义包的方法。
C、实验内容
(一)抽象类的使用
1、设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。 继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。
注:三角形面积s=sqrt(p*(p-a)*(p-b)*(p-c)) 其中,a,b,c为三条边,p=(a+b+c)/2。
2、编程技巧
(1) 抽象类定义的方法在具体类要实现;
(2) 使用抽象类的引用变量可引用子类的对象;
(3) 通过父类引用子类对象,通过该引用访问对象方法时实际用的是子类的方法。可将所有对象存入到父类定义的数组中。
实验代码:
package 第七周;
public abstract class Cx
{
public abstract double print();
}
class Sanjiaxing extends Cx // 继承抽象类, 三角形
{
private double a;
private double b;
private double c;
public Sanjiaxing(double a, double b, double c)
{
this.a = a;
this.b = b;
this.c = c;
}
public double print() // 调用抽象方法
{
double p = (a + b + c) / 2;
return Math.sqrt(p * (p - a) * (p - b) * (p - c));
}
}
class Juxing extends Cx // 继承抽象类, 矩形
{
private double length;
private double width;
private double height;
public Juxing(double length, double width, double height)
{
this.length = length;
this.height = height;
this.width = width;
}
public double print()
{
return length * width * height;
}
}
class Yuan extends Cx // 继承抽象类, 圆
{
double bj; // 定义圆的半径
public Yuan(double radious)
{
this.bj = radious;
}
public double print()
{
return Math.PI * bj * bj;
}
}
package 第七周;
public class Mianji
{
public static void main(String[] args)
{
Cx x = new Sanjiaxing(5, 12, 13);
Cx y = new Juxing(9, 8,7);
Cx z = new Yuan(6);
System.out.println("边为5, 12, 13的三角形的面积为 : " + x.print());
System.out.println("
长为9、宽为8、高为7 的矩形的面积为 : " + y.print());
System.out.println("
半径为6的圆的面积为 : " + z.print());
}
}
实验截图:
错误截图:
改正:一开始不太明白,提示也不太懂,后面参考书上代码才发现定义的抽象方法不合后续,将public abstract double println();
改为public abstract double print();
就可以了。
正确截图:
(二)使用接口技术
1、定义接口Shape,其中包括一个方法size(),设计“直线”、“圆”、类实现Shape接口。分别创建一个“直线”、“圆”对象,将各类图形的大小输出。
2、编程技巧
(1) 接口中定义的方法在实现接口的具体类中要重写实现;
(2) 利用接口类型的变量可引用实现该接口的类创建的对象。
实验代码:
package 第七周;
public interface Shape // 定义接口Shape,其中包括一个方法size()
{
public abstract void size(); // 定义抽象方法 size()
}
class Zhixian implements Shape // 子类实现Shape接口,直线
{
private double cd;
public Zhixian(double cd)
{
this.cd = cd;
}
public void size() // 覆写Shape接口的抽象方法
{
System.out.println(" 长度为99的直线:
"+"直线的大小:" + cd+"
");
}
}
class Yuanquan implements Shape // 子类实现Shape接口,圆
{
private double Bj;
public Yuanquan(double Bj)
{
this.Bj = Bj;
}
public void size()
{
System.out.println(" 半径为4的圆:
圆半径的大小:" + Bj);
System.out.println("
圆周长的大小:" + Math.PI * Bj * 2);
System.out.println("
圆面积的大小:" + Math.PI * Bj * Bj);
}
}
package 第七周;
public class Daxiao
{
public static void main(String[] args)
{
Shape s1=new Zhixian(99);
Shape s2=new Yuanquan(4);
s1.size(); //分别调用接口定义的方法
s2.size();
}
}
实验截图:
错误:暂无,基本仿照书本知识点运用。
课程总结
继上周通过 实列分析———宠物商店 已学完抽象类与接口的基本知识点,并且通过熟悉和练习,已经大概学会与理解其各自妙用与区别、各特点的不同。本周则主要学习了Object类的基本作用与其包括的主要方法,我们可以通过学习其已有方法更便捷书写代码。
抽象类与接口:
Object主要方法:
Object类的常用方法
参考:Object