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


    实验内容
    (一)抽象类的使用

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

    (1) 抽象类定义的方法在具体类要实现;

    (2) 使用抽象类的引用变量可引用子类的对象;

    (3) 通过父类引用子类对象,通过该引用访问对象方法时实际用的是子类的方法。可将所有对象存入到父类定义的数组中。

    抽象类

    public abstract class Shape {
    
    	public abstract double getArea();
    	public abstract void print();
    
    }
    

    public class Circle extends Shape{
    
    	private double radius;
    
    	public double getRadius() {
    		return radius;
    	}
    
    	public void setRadius(double radius) {
    		this.radius = radius;
    	}
    	
    	public Circle(double r) {
    		radius=r;
    	}
    	public double getArea() {
    		return Math.PI*Math.pow(radius, 2);
    	}
    	public void print() {
    		System.out.println("圆的面积为:"+this.getArea());
    	}
    }
    

    三角形

    public class Trangle extends Shape {
    	private int a;
    	private int b;
    	private int c;
    	int p;
    	
    
    	public int getA() {
    		return a;
    	}
    
    	public void setA(int a) {
    		this.a = a;
    	}
    
    	public int getB() {
    		return b;
    	}
    
    	public void setB(int b) {
    		this.b = b;
    	}
    
    	public int getC() {
    		return c;
    	}
    
    	public void setC(int c) {
    		this.c = c;
    	}
    	
    	public Trangle(int a,int b,int c) {
    		this.a=a;
    		this.b=b;
    		this.c=c;
    				
    	}
    
    	@Override
    	public double getArea() {
    		p=(a+b+c)/2;
    		return Math.sqrt(p*(p-a)*(p-b)*(p-c));
    	}
    
    	@Override
    	public void print() {
    		System.out.println("三角形的面积为: "+this.getArea());
    
    	}
    
    }
    

    四边形

    public class Rectangle extends Shape {
    	private int a;
    	private int b;
    	
    	
    
    	public int getA() {
    		return a;
    	}
    
    	public void setA(int a) {
    		this.a = a;
    	}
    
    	public int getB() {
    		return b;
    	}
    
    	public void setB(int b) {
    		this.b = b;
    	}
    	
    	public Rectangle(int a,int b) {
    		this.a=a;
    		this.b=b;
    	}
    
    	@Override
    	public double getArea() {
    		// TODO 自动生成的方法存根
    		return a*b;
    	}
    
    	@Override
    	public void print() {
    		System.out.println("矩形的面积为: "+this.getArea());
    	}
    
    }
    

    测试类

    public class Test {
    
    	public static void main(String[] args) {
    		Shape s=new Circle(4);
    		s.print();
    		Shape s1=new Trangle(7,8,9);
    		s1.print();
    		Shape s2=new Rectangle(13,39);
    		s2.print();
    	}
    
    }
    

    运行截图

    (二)使用接口技术

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

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

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

    接口

    public interface Shape {
    	public double size();
    	public void print();
    
    }
    

    直线

    public class Line implements Shape {
    	private double a;
    	private double b;
    	private double c;
    	private double d;
    	
    	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 double getD() {
    		return d;
    	}
    	public void setD(double d) {
    		this.d = d;
    	}
    	
    	public Line(double a,double b,double c,double d) {
    		this.a=a;
    		this.b=b;
    		this.c=c;
    		this.d=d;		
    	}
    	
    	public double size(){
    		return Math.sqrt((a-b)*(a-b)+(c-d)*(c-d));
    	}
    	
    	public void print() {
    		System.out.println("直线的面积: "+this.size());
    	}
    
    }
    

    public class Circle implements Shape{
    	private double radius;
    
    	public double getRadius() {
    		return radius;
    	}
    
    	public void setRadius(double radius) {
    		this.radius = radius;
    	}
    	
    	public Circle(double radius) {
    		this.radius=radius;
    	}
    
    	public double size(){
    		return Math.PI*Math.pow(radius, 2);
    	}
    	
    	public void print() {
    		System.out.println("圆的面积: "+this.size());
    	}
    }
    

    测试

    public class Test {
    
    	public static void main(String[] args) {
    		Shape s=new Line (16,12,20,26);
    		s.print();
    		Shape s1=new Circle (36);
    		s1.print();
    
    	}
    
    
    
    

    运行截图

    学习总结
    这周学习了抽象类以及接口
    抽象类实例化

    abstract class A{                                              //定义抽象类A
             public abstract void print();                     //定义抽象方法print()
    }
    class B extends A{                                           //子类通过继承抽象类
             public void print(){
                  System.out.println("Hello World!!!");
          }
    }
    public class AbstractCaseDemo1{
       public static void main(String[] args){
         A a=newB();                                                //通过子类为抽象类实例化
          a.print();                                                     //调用的方法是被子类覆写过的方法
         }
    }
    

    接口实例化

    interface A{                                                        //定义接口A
              public abstract void print();                      //定义抽象方法print()
    }
    class B implements A{                                       //子类实现接口
             public void print(){
                   System.out.println("Hello World!!!");
         }
    }
    public class InterfaceCaseDemo1{
            public static void main(String[] args){
                 A a=new B();                                        //通过子类为接口实例化
                   a.print();
            }
    }
    
  • 相关阅读:
    征战蓝桥 —— 2017年第八届 —— C/C++A组第7题——正则问题
    征战蓝桥 —— 2017年第八届 —— C/C++A组第7题——正则问题
    征战蓝桥 —— 2017年第八届 —— C/C++A组第7题——正则问题
    征战蓝桥 —— 2017年第八届 —— C/C++A组第8题——包子凑数
    征战蓝桥 —— 2017年第八届 —— C/C++A组第8题——包子凑数
    征战蓝桥 —— 2017年第八届 —— C/C++A组第8题——包子凑数
    征战蓝桥 —— 2017年第八届 —— C/C++A组第9题——分巧克力
    征战蓝桥 —— 2017年第八届 —— C/C++A组第9题——分巧克力
    征战蓝桥 —— 2017年第八届 —— C/C++A组第9题——分巧克力
    征战蓝桥 —— 2017年第八届 —— C/C++A组第10题——油漆面积
  • 原文地址:https://www.cnblogs.com/cxnkkk/p/11656836.html
Copyright © 2020-2023  润新知