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

实验四 类的继承

一、 实验目的

  • 理解抽象类与接口的使用;
  • 了解包的作用,掌握包的设计方法。

二、 实验要求

  • 掌握使用抽象类的方法。
  • 掌握使用系统接口的技术和创建自定义接口的方法。
  • 了解 Java 系统包的结构。
  • 掌握创建自定义包的方法。

三、实验内容

(一)抽象类的使用

设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。 继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。
注:三角形面积s=sqrt(p(p-a)(p-b)*(p-c)) 其中,a,b,c为三条边,p=(a+b+c)/2

编程技巧
  • (1) 抽象类定义的方法在具体类要实现;
  • (2) 使用抽象类的引用变量可引用子类的对象;
  • (3) 通过父类引用子类对象,通过该引用访问对象方法时实际用的是子类的方法。可将所有对象存入到父类定义的数组中。

实验源码:

package com.company;

import java.util.Scanner;

public class Java {
    public static void main (String args[]) {
        Scanner sc = new Scanner(System.in);
        System.out.print("输入三角形的边长a:");
        double a =sc.nextDouble();
        System.out.print("输入三角形的边长b:");
        double b =sc.nextDouble();
        System.out.print("输入三角形的边长c:");
        double c =sc.nextDouble();
        Triangle triangle = new Triangle(a,b,c);
        triangle.area();

        System.out.print("输入矩形的长l:");
        double l =sc.nextDouble();
        System.out.print("输入矩形的宽w:");
        double w =sc.nextDouble();
        Rectangle rectangle = new Rectangle(l,w);
        rectangle.area();

        System.out.print("输入圆的半径r:");
        double r =sc.nextDouble();
        Cricle cricle =new Cricle(r);
        cricle.area();
    }

}
abstract class Shape {
    public abstract double area();
}

class Triangle extends Shape{
     private double a,b,c,average;
    Triangle(double a, double b, double c) {
        this.a = a;
        this.b = b;
        this.c = c;
        this.average = (a + b + c) / 2;
    }
    public double area() {
        System.out.println("三角形的面积是:" + Math.sqrt(average * (average - a) * (average - b) * (average - c)));
        return 0;
    }
    }


class Rectangle extends Shape{
    private double l, w;
    Rectangle(double length, double width) {
        this.l = length;
        this.w = width;
    }
    public double area() {
        System.out.println("矩形的面积是:" + l*w);
        return 0;
    }
}
class Cricle extends Shape {
    private double r;

    Cricle(double r) {
        this.r = r;
    }
    public double area(){
        System.out.println("圆的面积是:" + r *r * Math.PI);
        return 0;
    }
}


实验结果:

问题:

原因:我!居然!没有实例化!!!!

(二)使用接口技术

1定义接口Shape,其中包括一个方法size(),设计“直线”、“圆”、类实现Shape接口。分别创建一个“直线”、“圆”对象,将各类图形的大小输出。

编程技巧
  • (1) 接口中定义的方法在实现接口的具体类中要重写实现;
  • (2) 利用接口类型的变量可引用实现该接口的类创建的对象。

实验源码:

package com.company;

import java.util.Scanner;

public class One {
    public static void main (String args[]) {
        Scanner sc = new Scanner(System.in);
        System.out.print("输入直线长度l:");
        double l = sc.nextDouble();
        Line line = new Line(l) ;
        System. out.println("直线的长度:" + line.size());


        System.out.print("输入圆的半径r:");
        double r = sc.nextDouble();
        Circle circle = new Circle(r);
        System. out.println("圆的面积:" + circle.size());

    }
}
abstract class Shape {
    public abstract double size();
}
class Line extends Shape{
    private double l;
    Line(double l) {
        this.l = l;
    }
    public double size(){
        return l;
    }
}

class Circle extends Shape{
    private double r;
    Circle(double r) {
        this.r = r;
    }
    public double size(){
        return ( r *r * Math.PI);
    }
}

实验结果:

问题:

原因:我!居然! 没有写输出!!!!!

内容总结:

抽象类

  • 1.abstract修饰的类为抽象类,此类不能有对象,(无法对此类进行实例化,说白了就是不能new);
  • 2.abstract修饰的方法为抽象方法,此方法不能有方法体(就是什么内容不能有);
抽象类的使用特点:
  • 1.抽象类不能有对象,(不能用new此关键字来创建抽象类的对象);
  • 2.有抽象方法的类一定是抽象类,但是抽象类中不一定有抽象方法;
  • 3.抽象类中的抽象方法必须在子类中被重写。

接口

  • 1.接口中的所有属性默认为:public static final ****;
  • 2.接口中的所有方法默认为:public abstract ****;
  • 3.接口不再像类一样用关键字 extends去“继承”,而是用 implements 去“实现”,也就是说类和接口的关系叫做实现,(例如:A类实现了B接口,那么成为A为B接口的实现类。而类与类之间的继承的话,叫
    做A类继承了B类,其中B类即为A类的父类)。实现接口与类的继承比较相似

abstract关键字:

  • 1)使用abstract关键字定义的类为抽象类,抽象类不能实例化,可以有非抽象方法以及自己的成员属性。
  • 2)使用abstract关键字定义的方法为抽象方法,抽象方法没有方法体,如果这个方法不被子类重写,将没有任何意义。而具有抽象方法的类,必须定义为抽象类。
posted @ 2019-10-11 18:07  颜晴超甜♡  阅读(175)  评论(0编辑  收藏  举报