• 第七周编程总结&&实验报告五


    实验四 类的继承
    实验目的

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

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

    (一)抽象类的使用

    设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。 继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。
    注:三角形面积s=sqrt(p(p-a)(p-b)*(p-c)) 其中,a,b,c为三条边,p=(a+b+c)/2
    实验代码

    package 实验5;
    
    abstract class Shape{
        private double area;
        public void area() {
            
        }
    }
    
       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 void area() {
        double p=(a+b+c)/2;
        double s = p*(p-a)*(p-b)*(p-c); 
        double result = Math.sqrt(s); 
        System.out.println("三角形的面积=="+result);
      }
    }   
    
    class Rectangle extends Shape{   
    private double height;//定义矩形的变量
    private double width;
    
    public Rectangle(double height,double width){  
        this.height = height;
        this.width = width;
    }
    
        public void area() {
        double sm =(height*width);
        System.out.println("矩形面积=="+sm);
     }
    }
    
      class Circle extends Shape{     
      private  double r;//定义圆特有变量
      public Circle(double r){
        this.r = r;
    }
    
        public void area() {
        double cm =Math.PI *Math.pow(r, 2);
        System.out.println("圆形面积=="+cm);
     }
    }
         public class xingzhuang {
      public static void main (String [] args){
        Shape triangle = new Triangle(10,8,6);
        triangle.area();
        Shape rectangle = new Rectangle(6,9);
        rectangle.area();
        Shape circle = new Circle(4);
        circle.area();
       
        }
    }
    

    实验结果

    (二)使用接口技术

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

    package 实验5;
    
    	public interface Shape {       
    	    public abstract void size();      
    	}
    	class Straight implements Shape{     
    	   private double figure;
    	   public Straight(double figure){     
    	       this.figure=figure;             }
    	    public void size() {         
    	        System.out.println("直线的大小=="+figure);
    
    	    }
    	}
    	class Circle2 implements Shape{     
    	    private  double radious;
    	   public Circle2(double radious){    
    	       this.radious=radious;          
    	   }
    	    public void size() {        
    	        System.out.println("圆的面积=="+Math.PI*radious*radious);
    
    	    }
    	}
    	package 实验5;
    
    	public class java {
    
    		
    			    public static void main(String[] args){
    			        Shape s1=new Straight(12);
    	                s1.size();
    			        Shape s2=new Circle2(9); 
    			        s2.size();   
    			          
    			    }
    			
    		}
    

    实验结果

    学习总结
    本周学习了抽象类与抽象方法
    抽象类它本身并不能直接创建对象,只能通过继承的子类来创建对象,可以看做是一个模板
    1、凡是用abstract修饰符修饰的类被称为抽象类。凡是用abstract修饰符修饰的方法称为抽象方法。
    2、抽象类中可以有零个或多个抽象方法,也可以包含非抽象的方法。·抽象类中可以没有抽象方法,但是,有抽象方法的类必须是抽象类。
    3、对于抽象方法来说,在抽象类中只指定其方法名及其类型,而不书写其实现代码。
    4、抽象类可以派生子类,在抽象类派生的子类中必须实现抽象类中定义的所有抽象方法。
    5、抽象类不能创建对象,创建对象的工作由抽象类派生的子类来实现。
    6、如果父类中已有同名的abstract方法,则子类中就不能再有同名的抽象方法。
    7、abstract不能与final并列修饰同一个类。
    还学习了接口与它的一些相关内容
    我们可以把接口看做是一种特殊的类,接口的整体由全局常量和public定义的抽象方法组成(接口中的抽象方法默认为public)通常使用的是关键字implements,一个类可以同时实现多个接口,这个是和继承的明显区别,在网上搜索了一些接口与抽象类的区别,如下图所示,总体来说本周感觉还行,以后继续努力。

  • 相关阅读:
    从Pycharm说起
    前端工程师小A学习JS的旅程
    模板引擎开发(一)
    Bootstrap01
    Passbook详解与开发案例
    DLL文件知多少?
    C#中的索引器的简单理解和用法
    python 的列表遍历删除
    Node.js与Golang使用感受与小结1
    解决设计中的两难问题
  • 原文地址:https://www.cnblogs.com/ZJ999999/p/11663375.html
Copyright © 2020-2023  润新知