学习总结

这周我们加深了对抽象类与接口的学习,获得的知识点也比上周多了许多,抽象类与接口很相似,就比如别人还没有做完的是交给你来做,而他那些样式都做好了,你只需要完善即可
但也有不同点。

定义包含一个抽象方法的类抽象方法和全局变量的集合
组成构造方法、抽象方法、普通方法、常量、变量常量、抽象方法
使用子类继承抽象类(extends)子类实现接口(implements)
关系抽象类可以实现多个接口接口不能继承抽象类,但允许继承多个接口
常见设计模式模板设计工厂设计,代理设计
局限抽象类有单继承的局限接口没有单继承的局限
实际作为一个模板是作为一个标准或不是一种能力
对象都通过对象的多态性产生实例化对象都通过对象的多态性产生实例化对象
选择如果抽象类和接口都可使用的话,优先使用接口,因为避免单继承的局限如果抽象类和接口都可使用的话,优先使用接口,因为避免单继承的局限
特殊一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类

这周我们还学习了一个特殊的类object类,object类就像一个公共类,如果一个类没有明显的继承一个类,那么它就是object的子类了。

实验报告

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

package test7;

abstract class Shape {
    abstract public double Area();

}

三角形

package test7;

public 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 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 Area() {
        double p=(a+b+c)/2;
        return Math.sqrt(p*(p-a)*(p-b)*(p-c));
    }

}

矩形

package test7;

public class Ractangle extends Shape {

    private double height;
    private double width;
    public  Ractangle(double height,double width) {
        this.height=height;
        this.width=width;
    }

    public double getHeight() {
        return height;
    }
    public void setHeight(double height) {
        this.height = height;
    }
    public double getWidth() {
        return width;
    }
    public void setWidth(double width) {
        this.width = width;
    }
    public double Area() {
        return height*width;
    }

}

圆形

package test7;

public class Circle extends Shape {

    private double r;

    public Circle(double r) {
        this.r=r;
    }

    public double getR() {
        return r;
    }

    public void setR(double r) {
        this.r = r;
    }
    public double Area() {
        return Math.PI*r*r;
    }

}

测试类

package test7;

public class Ceshi {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Shape s1=new Triangle(4,5,6);
        Shape s2=new Ractangle(7,8);
        Shape s3=new Circle(4);
        System.out.println("三角形面积:"+s1.Area());
        System.out.println("长方形面积:"+s2.Area());
        System.out.println("圆形面积:"+s3.Area());

    }

}

运行截图

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

package test8;

interface Shape {
    public double getSize();

}

圆类

package test8;

class Circle implements Shape {
    private double r;
    public Circle(double r) {
        this.r=r;
    }

    public double getR() {
        return r;
    }

    public void setR(double r) {
        this.r = r;
    }

    public double getSize() {
        // TODO Auto-generated method stub
        return Math.PI*r*r;
    }

}

直线类

package test8;

class Line implements Shape {
    private double x1,y1,x2,y2;
    public Line(double x1,double y1,double x2,double y2) {
        this.x1=x1;
        this.y1=y1;
        this.x2=x2;
        this.y2=y2;
    }
    public double getX1() {
        return x1;
    }
    public void setX1(double x1) {
        this.x1 = x1;
    }
    public double getY1() {
        return y1;
    }
    public void setY1(double y1) {
        this.y1 = y1;
    }
    public double getX2() {
        return x2;
    }
    public void setX2(double x2) {
        this.x2 = x2;
    }
    public double getY2() {
        return y2;
    }
    public void setY2(double y2) {
        this.y2 = y2;
    }
    public double getSize() {
        return Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
    }

}

测试类

package test8;

public class Ceshi {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Shape s1=new Circle(5);
        Shape s2=new Line(4,5,7,9);
        System.out.println("圆的面积:"+s1.getSize());
        System.out.println("直线长度:"+s2.getSize());

    }

}

运行截图

02-12 19:35