首页 > 其他 > 详细

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

时间:2019-10-11 22:55:36      阅读:126      评论:0      收藏:0      [点我收藏+]

实验四 类的继承

实验目的

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

实验要求

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

实验内容

(一)抽象类的使用

设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。 继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。
注:三角形面积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) 接口中定义的方法在实现接口的具体类中要重写实现;

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

1.实验源码:

package di;

abstract class Shape {
    //定义a,b,c属性
    private double a;
    private double b;
    private double c;
    //取得或修改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 Shape() {
        
    }
    //生成三种不同的构造方法
    public Shape(double a) {
        this.a=a;
    }
    public Shape(double a,double b) {
        this.a =a;
        this.b=b;
    }
    public Shape(double a,double b,double c) {
        this.a =a;
        this.b=b;
        this.c=c;
    }
    //生成一个抽象方法,area()由子类决定
    public abstract void area();

}
package di;

public class Traingle extends Shape {
    //调用父类构造方法
    public Traingle(double a,double b, double c) {
        super(a,b,c);
    }
    //覆写父类抽象方法
    public void area() {
        double p=(this.getA()+this.getB()+this.getC()/2);
        double s=Math.sqrt(p*(p-this.getA())*(p-this.getB())*(p-this.getC()));      
        System.out.println("三角形面积为:"+s);
    }
}
package di;

public class Circle extends Shape {

    public Circle(double a) {
        super(a);
    }
    
    public void area() {
        double s=Math.pow(this.getA(), 2)*Math.PI;
        System.out.println("圆的面积为:"+s);

    }

}
package di;

public class Rectangle extends Shape {

    public Rectangle(double a,double b) {
        super(a,b);
    }
    public void area() {
        double s=this.getA()*this.getB();
        System.out.println("矩形的面积为:"+s);
    }

}
package di;

public class Test {
    public static void main(String args[]) {
    
        Shape shape1=new Traingle(1,2,3);
        shape1.area();
        
        Shape shape2=new Circle(1);
        shape2.area();
        
        Shape shape3=new Rectangle(1,2);
        shape3.area();
    }

}

实验结果:

技术分享图片

2.实验源码:

package di1;

public interface Shape {
    //不同图形的尺寸       
      public void size();
}
  //定义子类Line 
  class Line implements Shape{
  //覆写父类size()方法
      public void size() {        
          System.out.println("直线周长为:"+10);
      }   
  
}
package di1;

class Circle implements Shape{
      // 定义半径a属性
      private double a;
      //获取修改a属性内容
      public double getA() {
        return a;
    }

    public void setA(double a) {
        this.a = a;
    }
    //带一个参数的构造方法
    public Circle (double a) {
         this.a=a; 
        }
    //计算面积的方法
    public double getArea() {
         return Math.pow(a, 2)*Math.PI;
  }
    //覆写父类size()方法
    public void size(){
         System.out.println("圆的面积为:"+this.getArea());  
      }
}
package di1;

public class Test {

    public static void main(String[] args) {
        Shape shape=new Line();
        shape.size();
        Shape shape1=new Circle(1);
        shape1.size();
    }

}

实验结果:

技术分享图片

实验过程:

第一题为抽象类,在父类Shape中定义子类需要用到的共同属性a,b,c,并生成三种不同的构造方法供子类调用,再生成一个由子类决定的抽象方法area()。子类将继承父类的属性,通过调用不同的构造方法及覆写父类抽象方法area()。第二题为接口,在父类中生成一个接口的方法size(),再定义不同的子类。子类通过覆写size()方法再输出。

课程总结:

抽象类(模板):父类相当于定义了一个模板,在主办法中调用的为普通/构造/抽象方法,子类只需要实现父类的抽象方法。
接口(标准):接口规定出一个标准,对具体的下面的类内容不关心
注意:

①为抽象类与接口实例化:A a=new B()。
②一个类不要去继承已实现好的类,要抽象类与接口二选一。若两者都可以使用,为避免单继承局限,要优先使用接口。
③接口不可使用构造、普通、抽象方法及变量。
④抽象类可实现多个接口,接口不能继承抽象类。
⑤两者都通过对象的多态性产生实例化对象。

学习总结:

上课的时候感觉自己懂了一点点,回来做题的时候,又出现了种种问题。原来上课听老师讲的只听进去了表面,想要真的懂,还是需要课后的多多练习。老师给出的题目都是典型的,我还是算法太弱了,没有一个大体思维。

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

原文:https://www.cnblogs.com/qzy7/p/11655696.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!