zoukankan      html  css  js  c++  java
  • 第七周课程总结&实验报告(五)

    实验四 类的继承

    • 实验目的
    • 理解抽象类与接口的使用;
    • 了解包的作用,掌握包的设计方法。
    • 实验要求
    • 掌握使用抽象类的方法。
    • 掌握使用系统接口的技术和创建自定义接口的方法。
    • 了解 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) 利用接口类型的变量可引用实现该接口的类创建的对象。

    1-1、实验代码

    public abstract class shape {
        
        
        public String shape;
        public double area;
        
        public String getShape() {
            return shape;
        }
    
        public void setShape(String shape) {
            this.shape = shape;
        }
    
        public double getArea() {
            return area;
        }
    
        public void setArea(double area) {
            this.area = area;
        }
    
        public void shape()
        {
            if(this.area() != 0)
                System.out.println(this.shape+"的面积为:"+this.area());
            else
                System.out.println("无法计算");
        }
        
        public abstract double area();
    }

    1-2、实验代码

    public class triangle extends shape {
    
        private double a,b,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 triangle (String shape ,double a, double b, double c ) {     //赋值
            this.shape = shape;
            this.a = a;
            this.b = b;
            this.c = c;
        }
        public double area() {   //覆写
            if(a + b >= c && a + c >= b && b + c >= a)  //判断是否为三角形
            {
                double p = (a + b + c)*0.5;
                double q = (p*(p-a)*(p-b)*(p-c));
            
                return Math.sqrt(q);
                
            }
            else
            {
                System.out.println("这不是三角形,请重新输入!!!");
            }
            return 0;
        }
    }

    1-3、实验代码

    public class rectangle extends shape {
    
        
        private double High ,Width;    // //定义自己的变量
        
        public double getHigh() {
            return High;
        }
    
        public void setHigh(double high) {
            High = high;
        }
    
        public double getWidth() {
            return Width;
        }
    
        public void setWidth(double width) {
            Width = width;
        }
        public rectangle (String shape ,double High, double Width ) {     //赋值
            this.shape = shape;
            this.High = High;
            this.Width = Width;
        }
        public double area() {     //覆写
            if(High >= 0 && Width >=0)  //判断是否为矩形
            {
                double s = 2*(Width+High);
                return s;
            }
            else 
            {
                System.out.println("这不是矩形,请重新输入!!!");
            }
                
            return 0;
        }
    
    }

    1-4、实验代码

    public class circle extends shape {
    
        private double r;    //定义自己的变量
        
        public double getR() {
            return r;
        }
    
        public void setR(double r) {
            this.r = r;
        }
        
        public circle (String shape ,double r) {    //赋值
            this.shape = shape;
            this.r = r;
        }
        public double area() {      //覆写
            if(r >= 0)    //判断是否为圆
            {
                double S = Math.PI * Math.pow(r, 2);
                
                return S;
            }
            else 
            {
                System.out.println("这不是圆,请重新输入!!!");
            }
            return 0;
        }
    
    }

    1-5、实验代码

    public class text {
    
        public static void main(String[] args) {
            shape s1= new triangle("三角形",3,4,5);
            shape s2= new rectangle("矩形",1,1);
            shape s3 =new circle("圆",2);
            
            s1.shape();
            s2.shape();
            s3.shape();
        }
    
    }

    1-2、运行结果截图

    本题小结:这个题目总体上来说不是特别难,注意一些细节还是可以写完。

    2-1、实验代码

    import java.util.Scanner;
    
    public interface shape1 
    {
         public void longing();
    }

    2-2、实验代码

    import java.util.Scanner;
    class line implements shape1{
        
        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 y1,double x2,double y2) {   //赋值
            this.x1=x1;
            this.x2=x2;
            this.y1=x2;
            this.y2=y2;
        }
    
        public void longing() {
            
            double S = Math.pow(x1, x2) + Math.pow(y1, y2);
            
            System.out.println("直线的长度为:"+ S);
            
        }
        
    }

    2-3、实验代码

    import java.util.Scanner;
    //System.out.println("直线的长度为:"+ Math.sqrt(Math.pow(x1-x2, 2)+Math.pow(y1-y2, 2)));
    class circle1 implements shape1{
        
        private double r;
        
        public double getR() {
            return r;
        }
    
        public void setR(double r) {
            this.r = r;
        }
        public circle1(double r) {   //赋值
            
            this.r = r;
            
        }
    
        public void longing() {
            if(r >= 0)  //判断是否为圆
            {
                double p = Math.PI*Math.pow(r, 2);
                System.out.println("圆的面积为:"+ p);
            }
            else 
            {
                System.out.println("这不是圆,请重新输入!!!");
            }
        }
    }

    2-4、实验代码

    import java.util.Scanner;
    
    public class text1 {
    
        public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);
            System.out.println("请输入圆的半径:");
            double r=sc.nextDouble();
            circle1 p1=new circle1(r);    //实例化对象
            
            p1.longing();
            
            System.out.println("请输入直线两端段点坐标:");
            double x1=sc.nextDouble();
            double y1=sc.nextDouble();
            double x2=sc.nextDouble();
            double y2=sc.nextDouble();
            
            line p2=new line(x1,y1,x2,y2);
            p2.longing();
        }
        }

    2-2、运行结果截图

    本题小结:这个题目写出来后发现没有输出,全部用return 返回了,后来就改成了用输出;

    总结:这次的题目总体来说难度一般,不过这次我又忘记了打double x1=sc.nextDouble();来输入,结果导致我在主函数那里卡了很久,以后要记住这种方法。

    第七周课程总结

    1、抽象类与接口的关系

     2、Object类

     3、接口的使用方法

    1) 因为java不支持多重继承,所以有了接口,一个类只能继承一个父类,但可以实现多个接口,接口本身也可以继承多个接口。

    2 )接口里面的成员变量默认都是public static final类型的。必须被显示的初始化。

    3 )接口里面的方法默认都是public abstract类型的。隐式声明。

    4 )接口没有构造方法,不能被实例化。

    5 )接口不能实现另一个接口,但可以继承多个接口。

    6 )类如果实现了一个接口,那么必须实现接口里面的所有抽象方法,否则类要被定义为抽象类。

     4、抽象类的使用方法

    1 如果将一个类声明为abstract,此类不能生成对象,只能被继承使用。

    2  抽象方法必须存在于抽象类中。

    3  抽象类中可以有一般的变量和一般的方法。

    4 子类继承抽象类必须实现其中抽象方法,除非子类为抽象类。 
      

        private void print(){};//此语句表示方法的空实现。 
        abstract void print(); //此语句表示方法的抽象,无实现。

    5、接口和抽象类的区别

    1 )接口只能包含抽象方法,抽象类可以包含普通方法。 
    2 )接口只能定义静态常量属性,抽象类既可以定义普通属性,也可以定义静态常量属性。 
    3 )接口不包含构造方法,抽象类里可以包含构造方法。    

    4)抽象类不能被实例化,但不代表它不可以有构造函数,抽象类可以有构造函数,备继承类扩充

    5) 接口是核心,其定义了要做的事情,包含了许多的方法,但没有定义这些方法应该如何做。 
    6) 如果许多类实现了某个接口,那么每个都要用代码实现那些方法 
    7)如果某一些类的实现有共通之处,则可以抽象出来一个抽象类,让抽象类实现接口的公用的代码,而那些个性化的方法则由各个子类去实现。

    所以,抽象类是为了简化接口的实现,他不仅提供了公共方法的实现,让你可以快速开发,又允许你的类完全可以自己实现所有的方法,不会出现紧耦合的问题。

    欲知更详细内容请参考:https://www.jb51.net/article/76738.htm

  • 相关阅读:
    LeetCode算法题-Factorial Trailing Zeroes(Java实现)
    LeetCode算法题-Excel Sheet Column Number(Java实现)
    FluentData 学习 第一弹
    加油 加油
    FluentData -Micro ORM with a fluent API that makes it simple to query a database
    RX
    创业哲学
    9种新思想
    事件总线 EventBus
    关于 C#和.net 的 发展
  • 原文地址:https://www.cnblogs.com/wangweihanqq2001/p/11656153.html
Copyright © 2011-2022 走看看