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

    实验四 类的继承

    实验目的

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

    实验要求

    掌握使用抽象类的方法。
    掌握使用系统接口的技术和创建自定义接口的方法。
    了解 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()。
    ②一个类不要去继承已实现好的类,要抽象类与接口二选一。若两者都可以使用,为避免单继承局限,要优先使用接口。
    ③接口不可使用构造、普通、抽象方法及变量。
    ④抽象类可实现多个接口,接口不能继承抽象类。
    ⑤两者都通过对象的多态性产生实例化对象。

    学习总结:

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

  • 相关阅读:
    超级变态之access查询
    计算机安全病毒问题汇集(转自华军)
    Avast I Love You
    Windows2003 3389端口修改
    希捷 250G 7200.10 8M(串口/5年盒)(买硬盘了~~~)
    DataTable 中Remove方法的使用
    我的主板(p5pl2e)
    冼东妹(为奥运冠军名字作诗)
    李彦宏告诫年轻人:向前看两年
    郭文珺(为奥运冠军名字作诗)
  • 原文地址:https://www.cnblogs.com/qzy7/p/11655696.html
Copyright © 2011-2022 走看看