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) 通过父类引用子类对象,通过该引用访问对象方法时实际用的是子类的方法。可将所有对象存入到父类定义的数组中。

    实验代码:

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

    class Tangle extends Mianji {
        double a;
         double b;
         double c;
         double p;
         public Tangle(double a,double b,double c) {
             this.a=a;this.b=b;this.c=c;
         }
        
        
        public double area() {
            double p=(a+b+c)/2;
            return Math.sqrt(p*(p-a)*(p-b)*(p-c));
        }
       
    }
     
    class Yuan extends Mianji  {
         double r;
     
         public Yuan(double r) {
             this.r=r;
           
         }
        public double area() {
           
              return  Math.PI*r*r;
        }
       
     }
     
    public class Rectangle{
         double width,height;
         public Rectangle (double w,double h){
             width=w;
             height=h;
         }
         public double arae() {
             return width*height;
         }
        
     }
     
    public class TEST {
        public static void main(String[] args) {
            Mianji m1=new Tangle(2,3,4);
            Mianji m2=new Yuan(5);
            Rectangle m3=new Rectangle(6,7);
         System.out.println(m1.area());
         System.out.println(m2.area());
         System.out.println(m3.arae());
        }
    }
    截图:

    (二)使用接口技术

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

    1. 编程技巧

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

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

    实验代码:

    package shyfive;

    interface Shape{
        public void size();
    }

    class Circle implements Shape{
        private double radius;
       
         public Circle(double radius) {
            this.radius=radius;
        }
        public double getRadius() {
            return radius;
        }
        public void setRadius(double radius) {
            this.radius = radius;
        }

        public double getArea() {
            double area=Math.pow(radius,2)*3.14;
            return area;
        }
        public void size() {
            System.out.println("圆的大小:"+getArea());
        }
    }
       
    class Segment implements Shape{
        private double length;
       
        public Segment(double length) {
            this.length=length;
        }

        public double getLength() {
            return length;
        }

        public void setLength(double length) {
            this.length = length;
        }
        public double getHigh() {
            double high=length;
            return high;
        }
        public void size() {
            System.out.println("直线长度:"+getHigh());
        }
    }

    public class Demo5 { public static void main(String[] args) {
            Shape str1=new Circle(5); Shape str2=new Segment(9);
            str1.size();
            str2.size();
        }

    }

    截图:

    课程总结:

    抽象:

    (1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法

    (2) 抽象类不能被实例化

    (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类

    (4) 具体派生类必须覆盖基类的抽象方法

    (5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们

    接口:

    (1) 接口不能被实例化

    (2) 接口只能包含方法声明

    (3) 接口的成员包括方法、属性、索引器、事件

    (4) 接口中不能包含常量、字段(域)、构造函数、析构函数、静态成员

    接口和抽象类的区别:

    (1)抽象类可以有构造方法,接口中不能有构造方法。

    (2)抽象类中可以有普通成员变量,接口中没有普通成员变量

    (3)抽象类中可以包含静态方法,接口中不能包含静态方法

    (4) 一个类可以实现多个接口,但只能继承一个抽象类。

    (5)接口可以被多重实现,抽象类只能被单一继承

    (6)如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法

     接口和抽象类的相同点:

    (1) 都可以被继承

    (2) 都不能被实例化

    (3) 都可以包含方法声明

    (4) 派生类必须实现未实实现的方法

     
  • 相关阅读:
    .net中的委托
    GridView, DataList and ListBox 行 单击与双击事件处理
    ChineseCalendar类[转]
    数据契约(DataContract)
    XPath 语法(复习)
    正则表达式学习笔记
    瑞星笔试:现场上机做题[转]
    发送带有附件的电子邮件使用 Cdosys.dll 库
    DataContractJsonSerializer 类 操作json类型数据
    i guess a bug on Castle
  • 原文地址:https://www.cnblogs.com/pzw200915/p/11656839.html
Copyright © 2011-2022 走看看