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


    实验四 类的继承

    • 实验目的
    • 理解抽象类与接口的使用;
    • 了解包的作用,掌握包的设计方法。
    • 实验要求
    • 掌握使用抽象类的方法。
    • 掌握使用系统接口的技术和创建自定义接口的方法。
    • 了解 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作为超类。所有对象(包括数组)都实现这个类的所有方法。

  • 相关阅读:
    攻击方法
    Paillier 同态加密方案
    $EL Gamal$ 密码方案的椭圆曲线形式
    【hbase】hbase的基本使用
    【linux】创建用户,查看用户
    【linux】删除命令
    【linux】上传文件也可以直接拖动文件到xshell中
    【linux】安装pip时报错
    【Linux】界面快捷键
    【linux】Ubuntu无法下载mysql
  • 原文地址:https://www.cnblogs.com/Jay-h/p/11662927.html
Copyright © 2020-2023  润新知