实验内容
(一)抽象类的使用
设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。 继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。
注:三角形面积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();
}
}