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


    实验四 类的继承

    • 实验目的
    • 理解抽象类与接口的使用;
    • 了解包的作用,掌握包的设计方法。
    • 实验要求
    • 掌握使用抽象类的方法。
    • 掌握使用系统接口的技术和创建自定义接口的方法。
    • 了解 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接口。分别创建一个“直线”、“圆”对象,将各类图形的大小输出。

    1. 编程技巧

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

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

    (一)实验源码:

    package Test;
    
    abstract class Shape1{
        
        public abstract double area();
    
    }
    
    class Triangle extends Shape1{
        private double a,b,c;
        
        public Triangle(double a,double b,double c) {
            this.a=a;
            this.b=b;
            this.c=c;
        }
    
        public double getA() {
            return a;
        }
    
        public void setA(double a) {
            this.a = a;
        }
    
        public double getB() {
            return b;
        }
    
        public void setB(double b) {
            this.b = b;
        }
    
        public double getC() {
            return c;
        }
    
        public void setC(double c) {
            this.c = c;
        }
        public double Area(){
            double p=(this.a+this.b+this.c)/2;
            return Math.sqrt(p*(p-this.a)*(p-this.b)*(p-this.c));
        }
    
        public double area() {
            return 0;
        }
    }
    
    class Rectangle extends Shape1{
        private double length;
        private double width;
        
        public Rectangle(double length,double width) {
            this.length=length;
            this.width=width;
        }
        public double getLength() {
            return length;
        }
    
        public void setLength(double length) {
            this.length = length;
        }
    
        public double getWidth() {
            return width;
        }
    
        public void setWidth(double width) {
            this.width = width;
        }
        public double Area() {
            return length*width;
        }
        public double area() {
            return 0;
        }
    }
    
    class Circle1 extends Shape1{
        private double radius;
        
        public Circle1(double radius) {
            this.radius=radius;
        }
        public double getRadius() {
            return radius;
        }
    
        public void setRadius(double radius) {
            this.radius = radius;
        }
    
        public double Area(){
            return Math.PI*Math.pow(this.radius,2);
        }
        public double area() {
            return 0;
        }
    }
    public class test1{
        public static void main(String args[]) {
             Triangle triangle=new Triangle(3,4,5);
             Rectangle rectangle=new Rectangle(4,5);
             Circle1 circle=new Circle1(2);
             System.out.println("三角形的面积;" +triangle.Area()+"   矩形的面积:" +rectangle.Area()+"   圆的面积:" +circle.Area());
    }
    }

    实验结果:

    (二)实验源码:

    package Test;
    
    import java.util.Scanner;
    
    interface Shape{
        public void size();
    }
    class Line implements Shape{
        private double x;
        public Line(double x) {
            this.x =x;
        }
        public double getX() {
            return x;
        }
        public void setX(double x) {
            this.x = x;
        }
        public void size(){
            System.out.println("直线的大小:" +this.x);
        }
    }
    class Circle implements Shape{
        private double r;
        public Circle(double r) {
            this.r=r;
        }
        public double getR() {
            return r;
        }
    
        public void setR(double r) {
            this.r = r;
        }
        public double getArea(){
            return Math.PI*Math.pow(this.r,2);
        }
        public void size() {
            System.out.println("圆的大小:" +getArea());
        }
    }
    public class test2{
        public static void main(String[] args){
            Scanner scanner=new Scanner(System.in);
            System.out.println("输入直线的长度:");
            Line line=new Line(scanner.nextDouble());
            System.out.println("输入圆的半径:");
            Circle circle=new Circle(scanner.nextDouble());
            line.size();
            circle.size();
        }
    }

    实验结果:

    编程总结:

    对于接口这个点还不是很熟,遇到很多卡壳的,需要花很多的时间,还要自己再多练习练习。

    课程总结:

    一.接口

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

    实现格式:class 子类 implements 接口A,接口B,...{
    }

    虽然看起来很简单,但操作起来还是有点卡壳的,还是要靠自己自学和练习才能熟练的使用。

    二.抽象类

    抽象类的使用格式:

    abstract class 抽象类名称{

                  属性;

                 访问权限 返回值类型 方法名称(参数){

                               【return 返回值】;

                 }

                 访问权限 abstract 返回值类型 方法名称(参数);

    }

    三.Object类
    在Java中所有的类都有一个公共的父类就是Object类,一个类只要没有明显的继承一个类,则肯定是Object类的子类。
    object类中的主要方法
    序号 方法名称 类型 描述
    1 public Object() 构造 构造方法
    2 public boolean equals(Object obj) 普通 对象方法
    3 public int hashCode( 普通 取得Hash码
    4 public String toString() 普通 对象打印时调用
     
  • 相关阅读:
    js计算器
    还差得远
    首个项目结束
    Web前端开发规范文档你需要知道的事
    CSS需要经过多次练习和积累才能掌握
    在Javascript中闭包(Closure)
    Web前端和网站美工
    IE中的条件注释
    计算机类期刊投稿
    忙就一个字
  • 原文地址:https://www.cnblogs.com/lyp82ndl/p/11663712.html
Copyright © 2020-2023  润新知