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

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

设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。 继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。
注:三角形面积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();
        }
}
posted @ 2019-10-11 20:57  晨曦呐  阅读(107)  评论(1编辑  收藏  举报