Лекция: Интерфейсы

 

Интерфейсы в Java предназначены только для объявления некоторых методов и констант. Никакие реализации методов в интерфейсах не предусматриваются. Т. е. интерфейс только содержит информацию о том, что методы с такими-то названиями в мнем существуют, но не содержит информации, как именно эти методы работают. Реализация же методов интерфейса будет содержаться в классах, которые этот интерфейс реализуют.

 

Интерфейсы вводятся ключевым словом interface. В объявлении же класса, реализующего некоторый интерфейс, после имени класса идет ключевое слово implements, после которого следует имя интерфейса или интерфейсов (класс может реализовывать несколько интерфейсов).

 

Вот примеры интерфейса для геометрической фигуры и 3-х классов конкретных геометрических фигур, реализующих этот интерфейс:

public interface IFigure {

double pi = 3.1415;

// Площадь.

double square();

}

// Класс прямоугольника.

public class Rect implements IFigure {

int width = 0;

int height = 0;

Rect(int width, int height){

this.width = width;

this.height = height;

}

public double square(){

return width * height;

}

}

// Класс треугольника.

public class Triangle implements IFigure {

double leg1 = 0;

double leg2 = 0;

public Triangle(double leg1, double leg2){

this.leg1 = leg1;

this.leg2 = leg2;

}

public double square() {

return leg1 * leg2 * 0.5;

}

}

// Класс круга.

public class Circle implements IFigure {

 

double radius;

public Circle(double radius){

this.radius = radius;

}

public double square() {

return radius * radius * pi;

}

}

 

А вот использование указанного интерфейса и классов, его реализующих:

public class Test {

public static void main(String[] args) {

Rect r = new Rect(2, 4);

System.out.println(«Rect: » + r.square());

 

Triangle t = new Triangle(3, 4);

System.out.println(«Triangle: » + t.square());

 

Circle c = new Circle(1);

System.out.println(«Circle: » + c.square());

}

}

 

Обратите внимание, что каждый класс содержит метод square для вычисления площади. Этот метод обязан быть в каждом классе, так как он есть в интерфейсе, от которых классы наследуются. Также обратите внимание, что в классе Circle мы используем константу pi из интерфейса. В других языках программирования объявление констант в интерфейсах не допускается.

 

Выведет программа естественно Rect: 8.0 Triangle: 6.0 и Circle: 3.1415.

 

Проект «Подбор цвета»

 

import java.awt.*;

import java.awt.event.*;

 

public class ScrollTest extends Frame

{

Scrollbar sbRed = new Scrollbar(Scrollbar.VERTICAL, 127, 10, 0, 255);

Scrollbar sbGreen = new Scrollbar(Scrollbar.VERTICAL, 127, 10, 0, 255);

Scrollbar sbBlue = new Scrollbar(Scrollbar.VERTICAL, 127, 10, 0, 255);

//Scrollbar(int orientation, int value, int visible, int min, int max)

//задает ориентацию, начальное значение value, размер блока visible,

//диапазон значений min—max.

Label lblRGB = new Label();

Button btnPrim = new Button(«Применить»);

Button btnOtm = new Button(«Отменить»);

Button btnExit = new Button(«Выход»);

 

ScrollTest(String s){ super(s);

 

setLayout(null);

setFont(new Font(«Serif», Font.BOLD, 15));

 

Panel p = new Panel();

p.setLayout(null);

p.setBounds(10,50, 150, 260); add(p);

 

Label lblColor = new Label(«Подберите цвет»);

lblColor.setBounds(20, 0, 120, 30); p.add(lblColor);

 

Label lblMin = new Label(«0», Label.RIGHT);

lblMin.setBounds(0, 30, 30, 30); p.add(lblMin);

 

Label lblMiddle = new Label(«127», Label.RIGHT);

lblMiddle.setBounds(0, 120, 30, 30); p.add(lblMiddle);

 

Label lblMax = new Label(«255», Label.RIGHT);

lblMax.setBounds(0, 200, 30, 30); p.add(lblMax);

 

sbRed.setBackground(Color.red);

sbRed.setBounds(40, 30, 20, 200); p.add(sbRed);

sbGreen.setBackground(Color.green);

sbGreen.setBounds(70, 30, 20, 200); p.add(sbGreen);

sbBlue.setBackground(Color.blue);

sbBlue.setBounds(100, 30, 20, 200); p.add(sbBlue);

 

Label lblObraz = new Label(«Образец:»);

lblObraz.setBounds(250, 50, 120, 30); add(lblObraz);

 

lblRGB.setBackground(new Color(127, 127, 127));

lblRGB.setBounds(220, 80, 120, 80); add(lblRGB);

 

btnPrim.setBounds(230, 180, 100, 30); add(btnPrim);

btnOtm.setBounds(230, 220, 100, 30); add(btnOtm);

btnExit.setBounds(230, 260, 100, 30); add(btnExit);

 

setSize(400, 300); setVisible(true);

 

// Добавление обработчика для кнопки Применить

btnPrim.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

lblRGB.setBackground(new Color(sbRed.getValue(),sbGreen.getValue(),sbBlue.getValue()));

}

});

btnOtm.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

lblRGB.setBackground(new Color(127,127,127));

}

});

 

btnExit.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

System.exit(0);

}

});

}

 

public static void main(String[] args){

Frame f = new ScrollTest(«Выбор цвета»);

f.addWindowListener(new WindowAdapter(){

 

public void windowClosing(WindowEvent ev) {

System.exit(0);

}

});

}

}

 

Проект «Кардиоида»

 

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

 

class Panel extends JPanel{

public int x1,y1,x2,y2;

 

public Panel(){

setLayout(null);

}

 

protected void paintComponent(Graphics g){

super.paintComponent(g);

int a=100;

double r=a*(1+Math.sin(0));

int x0=250, y0=250;

x2=(int) (x0+r*Math.cos(0));

y2=(int) (y0-r*Math.sin(0));

for(double i=1;i<=360;i++){

double rad=Math.PI*i/180;

r=a*(1+Math.sin(rad));

x1=(int) (x0+r*Math.cos(rad));

y1=(int) (y0-r*Math.sin(rad));

g.drawLine(x1,y1,x2,y2);

x2=x1;

y2=y1;

}

}

}

 

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class program extends JFrame{

 

private Panel pane = new Panel();

private JButton start = new JButton(«Paint»);

 

public program(){

JFrame mf = new JFrame(«Paint Test»);

mf.setLayout(new BorderLayout());

mf.setSize(500, 500);

mf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

pane.setBorder(BorderFactory.createLineBorder(Color.BLACK));

pane.setBackground(Color.WHITE);

mf.add(pane, BorderLayout.CENTER);

mf.add(start, BorderLayout.SOUTH);

start.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent ae){pane.repaint();}});

mf.setVisible(true);

}

 

 

public static void main(String[] args){

SwingUtilities.invokeLater(new Runnable(){

public void run(){new program();}

});

}

}

 

еще рефераты
Еще работы по информатике