第七周课程总结&实验报告(五)

实验四 类的继承

  • 实验目的
  • 理解抽象类与接口的使用;
  • 了解包的作用,掌握包的设计方法。
  • 实验要求
  • 掌握使用抽象类的方法。
  • 掌握使用系统接口的技术和创建自定义接口的方法。
  • 了解 Java 系统包的结构。
  • 掌握创建自定义包的方法。
  • 实验内容

(一)抽象类的使用

1.设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。 继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。
注:三角形面积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接口。分别创建一个“直线”、“圆”对象,将各类图形的大小输出。

2.编程技巧

(1) 接口中定义的方法在实现接口的具体类中要重写实现;

(2) 利用接口类型的变量可引用实现该接口的类创建的对象。

 实验代码一:

package 实验五;

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(){
        if(a+b>c&&a+c>b&&b+c>a){
            double p=(a+b+c)/2;
            return Math.sqrt(p*(p-a)*(p-b)*(p-c));
        }else{
            System.out.println("无法构成三角形!");
            return 0;
        }
    }
}
class Rectangle extends shape{
    private double height;
    private double width;
    public Rectangle(double height,double width){
        this.height=height;
        this.width=width;
    }
    public double print(){
        return height*width;
    }
}
class yuan extends shape{
    private double radius;
    public yuan(double radius){
        this.radius=radius;
    }
    public double print(){
        return Math.PI*Math.pow(radius, 2);
    }
}
public  class Text{
    public static void main(String[] args){
        Triangle Tr=new Triangle(6,9,10);
        Rectangle Re=new Rectangle(3,5);
        yuan yu=new yuan(4);
        System.out.println("三角形的面积:"+Tr.print());
        System.out.println("矩形的面积:"+Re.print());
        System.out.println("圆的面积:"+yu.print());
    }
}

实验结果:

 

实验代码二:

package 实验五加;

interface Shape {
    public abstract void size();

}
package 实验五加;

public class Line implements Shape{ 
    private double x1,x2,y1,y2;
    public double getX1() {
        return x1;
    }
    public void setX1(double x1) {
        this.x1 = x1;
    }
    public double getX2() {
        return x2;
    }
    public void setX2(double x2) {
        this.x2 = x2;
    }
    public double getY1() {
        return y1;
    }
    public void setY1(double y1) {
        this.y1 = y1;
    }
    public double getY2() {
        return y2;
    }
    public void setY2(double y2) {
        this.y2 = y2;
    }
    public Line(double x1,double x2,double y1,double y2){
        this.x1=x1;this.x2=x2;this.y1=y1;this.y2=y2;
    }
    public void size(){
        System.out.println("直线的长度:"+Math.sqrt((Math.pow(x2-x1, 2))+Math.pow(y2-y1, 2)));
    }
}
package 实验五加;

public class Yuan implements Shape{ 
    private double radius;
    public Yuan(double radius){
        this.radius=radius;
    }
    public void size(){
        if(radius>0){
            System.out.println("圆的面积:"+Math.PI*Math.pow(radius, 2));
        }else{
            System.out.println("无法构成圆");
        }
    }
}
package 实验五加;

import java.util.Scanner;

public class Text{ 
    public static void main(String[] args){
        System.out.println("输入圆的半径");
        Scanner sc=new Scanner(System.in); 
        double radius=sc.nextDouble();
        Yuan s1=new Yuan(radius);
        s1.size();
        System.out.println("输入直线的坐标:");
        double x1=sc.nextDouble();
        double x2=sc.nextDouble();
        double y1=sc.nextDouble();
        double y2=sc.nextDouble();
        Line s2=new Line(x1,x2,y1,y2); 
        s2.size();
    }
}

 实验结果:

 

 实验总结:这两个题感觉也还好吧,大致的内容和上周的也差不了多少,很多东西都是要用的继承,但继承只能单一继承,而接口可以实现多接口。难度不大,老师上课讲过,书上也有相应的接口例子。

学习总结:

抽象类:

Java中可以创建一种类专门用来当作父类的类叫抽象类。包含一个抽象方法的类必须是抽象类;

抽象类和抽象方法都要使用abstract关键字声明;

抽象方法只需声明不需实现;

抽象类必须被子类继承,子类必须覆写抽象类中的全部抽象方法;

抽象类就是逼普通类多定义了一个抽象方法,除了不能直接进行对象的实例化操作之外并没有什么不同。

接口:

接口可以理解为Java中一种特殊的类;

使用它时必须通过子类,子类通过implements关键字实现接口;

一个子类同时实现两个接口,在子类中就必须同时覆写完两个接口中的全部抽象方法;

一个子类也可以同时继承抽象类和实现接口;

允许一个抽象类实现多个接口,一个接口不允许继承抽象类,允许一个接口继承多个接口。

抽象类与接口的区别:

 Object类:

Object是所有类的父类,任何类都默认继承Object。
Object是类层次结构的根类。每个类都使用Object作为超类。所有对象(包括数组)都实现这个类的所有方法。

原文地址:https://www.cnblogs.com/Jay-h/p/11662927.html