Ví dụ minh họa về interface ví dụ 2

Tiếp tục ví dụ hướng dẫn các bạn hoc lap trinh java hiểu thêm về interface nhưng trong ví dụ 2 chúng ta dùng interface để định nghĩa cho Shape thay vì một lớp trừu tượng.Vì vậy tất cả các phương thức trong interface Shape phải được hiện thực trong lớp Point là lớp cài đặt trực tiếp interface Shape.
// Định nghĩa một interface Shape trong tập tin shape.java
public interface Shape
{
// Tính diện tích
public abstract double area();
// Tính thể tích
public abstract double volume();
// trả về tên của shape
public abstract String getName();
}
Lớp Point cài đặt/hiện thực interface tên shape.
// Định nghĩa lớp Point trong tập tin Point.java
public class Point extends Object implements Shape
{
protected int x, y; // Tọa độ x, y của 1 điểm
// constructor không tham số.
public Point()
{
setPoint( 0, 0 );
}
// constructor có tham số.
public Point(int xCoordinate, int yCoordinate)
{
setPoint( xCoordinate, yCoordinate );
}
// gán tọa độ x, y cho 1 điểm
public void setPoint( int xCoordinate, int yCoordinate )
{
x = xCoordinate;
y = yCoordinate;
}
// lấy tọa độ x của 1 điểm
public int getX()
{
return x;
}
// lấy tọa độ y của 1 điểm
public int getY()
{
return y;
}
// Thể hiện tọa độ của 1 điểm dưới dạng chuỗi
public String toString()
{
return "[" + x + ", " + y + "]";
}
// Tính diện tích
public double area()
{
return 0.0;
}
// Tính thể tích
public double volume()
{
return 0.0;
}
// trả về tên của đối tượng shape
public String getName()
{
return "Point";
}
} // end class Point
Lớp Circle là lớp con của lớp Point, và cài đặt/hiện thực gián tiếp interface tên shape.
// Định nghĩa lớp Circle trong tập tin Circle.java
public class Circle extends Point
{ // Dẫn xuất từ lớpPoint
protected double radius;
// constructor không tham số
public Circle()
{
// ngầm gọi đến constructor của lớp cha
setRadius( 0 );
}
// constructor có tham số
public Circle( double circleRadius, int xCoordinate,
int yCoordinate )
{
// gọi constructorcủa lớp cha
super( xCoordinate, yCoordinate );
setRadius( circleRadius );
}
// Gán bán kính của đường tròn
public void setRadius( double circleRadius )
{
radius = ( circleRadius >= 0 ? circleRadius:0 );
}
// Lấy bán kính của đường tròn
public double getRadius()
{
return radius;
}
// Tính diện tích đường tròn Circle
public double area()
{
return Math.PI * radius * radius;
}
// Biểu diễn đường tròn bằng một chuỗi
public String toString()
{
return "Center = " + super.toString() +
"; Radius = " + radius;
}
// trả về tên của shape
public String getName()
{
return "Circle";
}
} // end class Circle
// Định nghĩa lớp hình trụ Cylinder
// trong tập tin Cylinder.java.
public class Cylinder extends Circle
{
// chiều cao của Cylinder
protected double height;
// constructor không có tham số
public Cylinder()
{
// ngầm gọi đến constructor của lớp cha
setHeight( 0 );
}
// constructor có tham số
public Cylinder( double cylinderHeight,
double cylinderRadius, int xCoordinate,
int yCoordinate )
{
// Gọi constructor của lớp cha
super( cylinderRadius, xCoordinate,
yCoordinate );
setHeight( cylinderHeight );
}
// Gán chiều cao cho Cylinder
public void setHeight( double cylinderHeight )
{
height = ( cylinderHeight >= 0 ? cylinderHeight
:0 );
}
// Lấy chiều cao của Cylinder
public double getHeight()
{
return height;
}
// Tính diện tích xung quanh của Cylinder
public double area()
{
return 2 * super.area() + 2 * Math.PI * radius *
height;
}
// Tính thể tích của Cylinder
public double volume()
{
return super.area() * height;
}
// Biểu diễn Cylinder bằng một chuỗi
public String toString()
{
return super.toString() + "; Height = " + height;
}
// trả về tên của shape
public String getName()
{
return "Cylinder";
}
} // end class Cylinder
// Test.java
// Kiểm tra tính kế thừa của Point, Circle, Cylinder với interface Shape.
// Khai báo thư viện
import java.text.DecimalFormat;
public class Test
{
// Kiểm tra tính kế thừa của các đối tượng hình học
public static void main( String args[] )
{
 // Tạo ra các đối tượng hình học
Point point = new Point( 7, 11 );
Circle circle = new Circle( 3.5, 22, 8 );
Cylinder cylinder = new Cylinder( 10, 3.3, 10, 10 );
// Tạo một mảng các đối tượng hình học
Shape arrayOfShapes[] = new Shape[ 3 ];
// arrayOfShapes[ 0 ] là một đối tượng Point
arrayOfShapes[ 0 ] = point;
// arrayOfShapes[ 1 ] là một đối tượng Circle
arrayOfShapes[ 1 ] = circle;
// arrayOfShapes[ 2 ] là một đối tượng cylinder
arrayOfShapes[ 2 ] = cylinder;
// Lấy tên và biểu diễn của mỗi đối tượng hình học
String output =
point.getName() + ": " + point.toString() + "\n" +
circle.getName() + ": " + circle.toString() + "\n" +
cylinder.getName() + ": " + cylinder.toString();
DecimalFormat precision2 = new DecimalFormat("0.00" ); duyệt mảng arrayOfShapes lấy tên, diện tích, thể tích của mỗi đối tượng hình học trong mảng.
for ( int i = 0; i < arrayOfShapes.length; i++ )
{
output += "\n\n" + arrayOfShapes[ i ].getName() +
": " + arrayOfShapes[ i].toString() +
"\n Area = " +
precision2.format( arrayOfShapes[ i ].area() ) +
"\nVolume = " +
precision2.format( arrayOfShapes[ i ].volume() );
}
System.out.println(output);
System.exit( 0 );
}
} // end class Test
Kết quả thực thi chương trình:

0 nhận xét: