实验四 类的继承
一、实验目的
理解抽象类与接口的使用;
了解包的作用,掌握包的设计方法。
二、实验要求
掌握使用抽象类的方法。
掌握使用系统接口的技术和创建自定义接口的方法。
了解 Java 系统包的结构。
掌握创建自定义包的方法。
三、实验内容
(一)抽象类的使用
- 设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。 继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。
注:三角形面积s=sqrt(p(p-a)(p-b)*(p-c)) 其中,a,b,c为三条边,p=(a+b+c)/2
2.编程技巧
(1) 抽象类定义的方法在具体类要实现;
(2) 使用抽象类的引用变量可引用子类的对象;
(3) 通过父类引用子类对象,通过该引用访问对象方法时实际用的是子类的方法。可将所有对象存入到父类定义的数组中。
(二)使用接口技术
1定义接口Shape,其中包括一个方法size(),设计"直线"、"圆"、类实现Shape接口。分别创建一个"直线"、"圆"对象,将各类图形的大小输出。
编程技巧
(1) 接口中定义的方法在实现接口的具体类中要重写实现;
(2) 利用接口类型的变量可引用实现该接口的类创建的对象。
实验过程(请自己调整格式)
(一)抽象类的使用
(1)实验代码
abstract class shape {
public abstract double print(); //定义抽象方法
}
class Triangle extends shape { //子类通过继承抽象类
private double a;
private double b;
private double c; //定义三角形特有的变量
public Triangle(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 Rectangle1 extends shape {
private double width;
private double height; //定义矩形特有的变量
public Rectangle1(double width, double height){ //为属性初始化
this.height=height;
this.width=width; //为属性赋值
}
public double print() { //子类调用抽象方法
return width*height; //返回该图形面积
}
}
class Circle1 extends shape { //子类通过继承抽象类
double radious; //定义圆形特有变量
public Circle1(double radious){ //为属性初始化
this.radious=radious; //为属性赋值
}
public double print() { //子类调用抽象方法
return Math.PI*radious*radious; //返回该图形面积
}
}
public class Test1 {
public static void main(String[] args){
shape s1=new Triangle(5,7,8);
shape s2=new Rectangle1(4,9);
shape s3=new Circle1(5); //通过子类为抽象类实例化
System.out.println("三角形的面积为:"+s1.print());
System.out.println("矩形的面积为:"+s2.print());
System.out.println("圆的面积为:"+s3.print()); //输出
}
}
实验结果:
(2)实验代码:
public interface Shape { //定义接口Shape
public abstract void size(); //定义抽象方法
}
class Straight implements Shape{ //子类实现Shape接口
private double figure;
public Straight(double figure){ //为属性初始化
this.figure=figure; //为属性赋初始值
}
public void size() { //覆写Shape接口的抽象方法
System.out.println("直线的大小:"+figure);
}
}
class Circle2 implements Shape{ //子类实现Shape接口
private double radious;
public Circle2(double radious){ //为属性初始化
this.radious=radious; //为属性赋初始值
}
public void size() { //覆写Shape接口的抽象方法
System.out.println("圆的面积:"+Math.PI*radious*radious);
}
}
public class TESE2 {
public static void main(String[] args){
Shape s1=new Straight(5);
Shape s2=new Circle2(7); //实例化子类对象
s1.size();
s2.size(); //分别调用接口定义的方法
}
}
实验结果:
实验总结:本次实验让我对接口和继承这两个概念有了一个更深刻的认识,后续还需要更深层的去学习理解。
学习总结
1.抽象类
抽象类的定义格式:
抽象类的一些使用细则:包含一个抽象方法的类必须是抽象类;抽象类和抽象方法都要使用abstract关键字来声明;
抽象类必须被子类继承,子类必须覆写抽象类中的全部抽象方法;抽象方法只需要声明但不需要实现。且普通类不能有
抽象方法。
2.接口
接口的定义格式:
概念:接口是一种特殊的类,里面全部是由全局变量和公共的抽象方法组成。
注意:抽象方法必须定义成public访问权限。
接口的使用和抽象类一样都是需要通过子类来实现,而子类通过implements关键字来实现接口(可实现多个接口)。
实现接口的格式
class 子类 implements 接口A(注:可有多个接口){
}
下面用书上的一个图来总结一下抽象类与接口之间的关系:
自我总结
上周的学习总结做的不好,这周我有很多知识点都是自己总结了的,比起上周还是有些许进步吧,冲呀!!!