zoukankan      html  css  js  c++  java
  • Java学习总结6

    实验报告五:

    一、实验目的

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

    二、实验要求

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

    三、实验内容

    (一)抽象类的使用

    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 () ,设计“直线”、“圆”、类实现Shap e接口。分别创建一个“直线”、“圆” 对象,将各类图形的大小输出。
      2.编程技巧
      (1)接口中定义的方法在实现接口的具体类中要重写实现;
      (2)利用接口类型的变量可引用实现该接口的类创建的对象。

    四、实验过程(请自己调整格式)

    实验代码1:

    package demo01;
    import java.util.Scanner;
    
        abstract class Shapes {
            public abstract void area();
        }
        class Triangle extends Shapes{
            private double a,b,c;
            private double p;
    
            Triangle(double a, double b, double c, double p) {
                this.a = a;
                this.b = b;
                this.c = c;
                this.p = (a+b+c)/2;
            }
            public void area() {
                System.out.println(Math.sqrt(p*(p-a)*(p-b)*(p-c)));
            }
        }
        class Cricle extends Shapes{
            private double r;
    
            Cricle(double r) {
               this.r=r;
            }
    
            public void area() {
                System.out.println(Math.pow(r,2)*Math.PI);
            }
        }
        class Rectangle extends Shapes {
            private double h, g;
    
            Rectangle(double h, double g) {
                this.h = h;
                this.g = g;
            }
            public void area() {
                System.out.println(h*g);
            }
        }
        public class report01{
            public static void main(String[] args) {
                Scanner sc=new Scanner(System.in);
                System.out.println("请输入三角形的边长a:" );
                double a=sc.nextDouble();
                System.out.println("请输入三角形的边长b:" );
                double b=sc.nextDouble();
                System.out.println("请输入三角形的边长c:" );
                double c=sc.nextDouble();
                Triangle triangle=new Triangle(a,b,c,(a+b+c)/2);
                System.out.println("三角形的面积:");
                triangle.area();
    
                System.out.println("请输入圆的半径:");
                double r=sc.nextDouble();
                Cricle cricle=new Cricle(r);
                System.out.println("圆的面积:");
                cricle.area();
    
                System.out.println("请输入矩形的长:");
                double h=sc.nextDouble();
                System.out.println("请输入矩形的宽:");
                double g=sc.nextDouble();
                Rectangle rectangle=new Rectangle(h,g);
                System.out.println("矩形的面积:");
                rectangle.area();
            }
        }
    

    实验结果:

    实验代码2:

    package demo01;
    
    import java.util.Scanner;
    
    interface Shape {
        void size();
    }
    class Line implements Shape {
         private double l;
        Line(double l) {
            this.l = l;
        }
        public void size() {
            System.out.println(l);
        }
    }
    class Cirlce implements Shape{
        private double r;
        Cirlce(double r){
            this.r=r;
        }
        public void size() {
            System.out.println(Math.PI*2*r);
        }
    }
    public class Shape01{
        public static void main(String[] args) {
            System.out.println("请输入直线长度");
            Scanner cn=new Scanner(System.in);
            double l=cn.nextDouble();
            Line line=new Line(l);
            System.out.println("直线大小:");
            line.size();
    
            System.out.println("请输入圆的半径");
            double r=cn.nextDouble();
            Cirlce cirlce=new Cirlce(r);
            System.out.println("圆的大小(周长):");
            cirlce.size();
        }
    }
    

    实验结果:

    学习总结:

    1、抽象类一定要用关键词abstract修饰
    2、含有抽象方法的类一定要是抽象类
    3、抽象方法没有方法体,所以一定要实例化子类对象才能实现抽象方法
    4、抽象类的定义格式:

    abstract class 抽象类名称{
            属性;
            访问权限 abstract 返回值类型 方法名称(参数);          //抽象方法
    
    }
    

    5、接口的定义格式:

    interface 接口名称{
    全局变量;
    抽象方法;
    }
    

    6、类继承接口一定要用implements,而且一个类可以继承多个接口,而抽象类却只能继承一个
    class 子类 implements 接口{ 所有抽象方法; }
    7、接口也需要实例化对象才能实现
    8、接口实际上可以理解为一个特殊的抽象类,接口内部的方法没有方法体,但是抽象类可以有方法体的方法。

  • 相关阅读:
    021.day21 反射 Class类 反射常用操作
    020.day20 线程概述 多线程优缺点 线程的创建 线程常用方法 生命周期 多线程同步
    019.day19 缓冲流 对象流 标准输入输出流
    018.day18 map集合如何实现排序 File类 IO流 字节流 字符流 编码
    017.day17 Map接口 克隆 treeSet集合排重缺陷
    016.day16 HashSet TreeSet 比较器Comparable Comparator
    015.day15
    014.day14
    013.day13
    线程
  • 原文地址:https://www.cnblogs.com/94ha-xc/p/11638206.html
Copyright © 2011-2022 走看看