java-类的继承和接口使用

1. 实验目的

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

2. 实验要求

(1)掌握使用抽象类的方法。
(2)掌握使用系统接口的技术和创建自定义接口的方法。
(3)了解 Java 系统包的结构。
(4)掌握创建自定义包的方法。

3. 实验内容

(一)抽象类的使用

  1. 设计一个类层次,定义一个抽象类–形状,其中包括有求形状的面积的抽象方法。 继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。
    注:三角形面积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接口。分别创建一个“直线”、“圆”对象,将各类图形的大小输出。
    2.编程技巧
    (1) 接口中定义的方法在实现接口的具体类中要重写实现;
    (2) 利用接口类型的变量可引用实现该接口的类创建的对象。

4. 实验源码

(一)抽象类

package 实验报告五.抽象类;
/**
 * @program: JavaWork
 * @description: 设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。 继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。
 * @author: Tom里的同学
 * @create: 2021-11-14 -14:43
 */
import java.util.Scanner;
abstract class Shape{
    Scanner sc=new Scanner(System.in);
    String name;
    abstract void Area();
}
class Trangle extends Shape{//三角形

    double a,b,c;
    boolean bool;
    public Trangle(){
        System.out.print("请输入构成三角形的三边:");
        a=sc.nextDouble();
        b=sc.nextDouble();
        c=sc.nextDouble();
        this.name="三角形";
        if(a+b>c&&a+c>b&&b+c>a){
            System.out.println("能构成三角形");
            bool=true;
        }
        else
        {
            System.out.println("无法构成三角形");
            bool=false;
        }
    }
    public void Area(){
        if(bool){
            double p=(a+b+c)/2;
            double s=Math.sqrt((p-a)*(p-b)*(p-c));
            System.out.println("三角形面积为:"+s);
        }else {
            System.out.println("无法计算面积!");
        }
    }
}
class Rectangle extends Shape{
    double a,b;
    double s;
    public Rectangle(){
        System.out.print("请输入构成矩形的长宽:");
        a=sc.nextDouble();
        b=sc.nextDouble();
        if(a>0&&b>0)
        if(a==b)
            this.name="正方形";
        else
            this.name="矩形";
        else
            System.out.println("输入非法!");
    }
    public void Area(){
        s=a*b;
        System.out.println(this.name+"的面积是:"+s);

    }
}
class Circular extends Shape{
    double r,s;
    public Circular(){
        System.out.print("请输入半径:");

        r=sc.nextDouble();

        if(r>0)
        {
            this.name="圆";
        }else
            System.out.println("半径输入非法!");
    }
    public void Area(){
        s=Math.PI*Math.pow(r,2);
        System.out.println(this.name+"的面积为:"+s);
        }
}
public class Area{
    public static void main(String[] args) {
        Trangle tra=new Trangle();
        tra.Area();
        Rectangle rec=new Rectangle();
        rec.Area();
        Circular cir=new Circular();
        cir.Area();
    }
}

在这里插入图片描述

(二)接口

创建接口

public interface Shape {
    public abstract double size();
}

圆类

public class circular implements Shape{
    double r;

    circular (double r){
        this.r=r;
    }
    public double size(){
        return Math.PI*Math.pow(r,2);
    }
}

直线类

public class Line implements Shape {
    double l;
    Line(double l){
        this.l=l;
    }
    public double size(){
        return l;
    }
}
import java.util.Scanner;

public class Output {
   public static void main(String[] args) {
      Scanner sc=new Scanner(System.in);
      double l,r;
      System.out.print("输入直线长度:");
      l=sc.nextDouble();
      Line line=new Line(l);
      System.out.println("直线的长度:"+line.size());
      System.out.print("输入圆的半径:");
      r=sc.nextDouble();
      circular cir=new circular(r);
      System.out.println("圆的面积:"+cir.size());

   }
}

在这里插入图片描述

5. 结论

(一)抽象类定义:

abstract class 抽象类名称{
	属性;
	public void println(){;//普通方法
(内容);
}
	public abstract void print();//抽象方法
}

抽象类不能直接创建对象,必须被子类继承,并且不是抽象类的子类必须要覆写抽象类中的全部抽象方法。抽象类和抽象方法都是使用abstract关键字声明的。在抽象类中的抽象方法只需声明不需要实现;抽象方法不能使用private声明,因为abstract声明的方法必须要子类进行覆写,而private声明的方法无法被子类覆写。

(二)接口定义:

Interface 接口名称{
全局常量;
抽象方法;
}

public权限的问题:
在接口中如果不写public,也是public访问权限;

实现接口:
关键字:implements

class子类 implements 接口A,接口B...{
}

接口摆脱了java的单继承局限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tom里的同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值