实验四 类的继承
实验目的
理解抽象类与接口的使用;
了解包的作用,掌握包的设计方法。
实验要求
掌握使用抽象类的方法。
掌握使用系统接口的技术和创建自定义接口的方法。
了解 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) 利用接口类型的变量可引用实现该接口的类创建的对象。
一:实验代码
import java.util.Scanner; abstract class Hope{ //定义一个抽象类 public abstract double Area(); //求面积的抽象方法 } class Triangle extends Hope{ //三角形继承Hope 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 setA(double a) { this.a=a; } public double getA(){ return a; } public void setB(double b) { this.b=b; } public double getB() { return b; } public void setC(double c) { this.c=c; } public double getC() { return c; } public double Area() { //计算三角形的面积 double p=(a+b+c)/2; return Math.sqrt(p*(p-this.a)*(p-this.b)*(p-this.c)); } } class Rectangle extends Hope{ //矩形继承Hope private double width; private double hight; public Rectangle(double width,double hight) { //构造矩形的宽高 this.width=width; this.hight=hight; } public void setWidth(double width) { this.width=width; } public double getWidth() { return width; } public void setHigth(double hight) { this.hight=hight; } public double getHight() { return hight; } public double Area() { //计算矩形的面积 return this.width*this.hight; } } class Circle extends Hope{ //圆继承Hope private double r; public Circle(double r) { //构造圆的半径 this.r=r; } public void setR(double r) { this.r=r; } public double getR() { return r; } public double Area() { //计算圆的面积 return Math.PI*this.r*this.r; } } public class Excise { public static void main(String[] args) { System.out.println("请输入三角形三边"); Scanner s=new Scanner(System.in); double a=s.nextDouble(); //读取输入内容 double b=s.nextDouble(); double c=s.nextDouble(); Triangle triangle=new Triangle(a,b,c); //调用类输出 if((a+b)>c&&(a+c)>b&&(b+c)>a) { System.out.println("三角形的面积为:"+triangle.Area()); }else { System.out.println("这不是一个三角形请重新输入"); return; } System.out.println("请输入矩形的宽高"); Scanner s1=new Scanner(System.in); double width=s1.nextDouble(); //同上 double hight=s1.nextDouble(); Rectangle rectangle=new Rectangle(width,hight); //同上 System.out.println("矩形的面积为:"+rectangle.Area()); System.out.println("请输入圆的半径"); Scanner s2=new Scanner(System.in); double r=s2.nextDouble(); //读取输入内容 Circle circle=new Circle(r); //同上 if(r<0) { System.out.println("这不是一个圆请重新输入"); } else { System.out.println("圆的面积为:"+circle.Area()); } } }
结果截图
二:实验代码
interface Shape{ //定义接口Shape public abstract void size(); //size方法 }; class B implements Shape{ //实现直线接口 private double x1; private double x2; private double y1; private double y2; private double length; public B(double x1,double x2,double y1,double y2) { //构造圆的属性和计算面积 this.length=Math.sqrt(Math.pow(x1-x2, 2)+Math.pow(y1-y2, 2)); } public void size() { //覆写Shape接口中的抽象方法 System.out.println("直线的大小为:"+this.length); } }; class C implements Shape{ //实现圆接口 private double r; private double Area; public C(double r) { //构造圆的半径和计算面积 this.r=r; this.Area=r*r*Math.PI; } public void size() { //覆写Shape接口中的抽象方法 if(r<0) { System.out.println("这不是一个圆"); }else { System.out.println("圆的面积为:"+this.Area); } } }; public class Jieke { public static void main(String[] args) { Shape a=new B(5,6,7,8); //实例化子类B对象 Shape b=new C(20); //实例化子类C对象 a.size(); //调用被覆写过的方法 b.size(); //同上 } }
结果截图
学到的知识:
抽象类:
1.是以abstract关键字声明的一个类
2.抽象类不可以被实例化。因为用抽象方法无意义。
3.抽象类必须由其子类覆盖了所有的抽象方法,该子类才可以被实例化,否则这个子类还是抽象类。
Object类:
一个类只要没有明显的继承一个类,则肯定是Object类的子类。
Object类提供的equals()方法默认是比较地址。
接口:
interface 接口名称{
全局常量 ;
抽象方法 ;
}
实现接口:与抽象类一样,接口要使用也必须通过子类,子类通过implements关键字实现接口。
实现格式:class 子类 implements 接口A,接口B,...{
}
原文:https://www.cnblogs.com/hualikun/p/11663277.html