Министерство образования и науки РФ
Вологодский государственный технический университет
Кафедра Информационных систем и технологий
Отчет по теме:
Классы и интерфейсы в Java
Выполнил студент группы ИТ-31
Трифанов Д. А.
Проверил преподаватель
Вологда
2012
Построить объектную модель предметной области, реализовав один интерфейс, два класса с отношением родитель-потомок, реализующими этот интерфейс и один класс для работы с ними. (13 вариант, с машинами).
(Список я еще не сделал, посмотрите пожалуйста первые 3, хотя бы их пока что засчитать
Напишите какие зачтены.)
package otchet2;
// здесь интерфейс и класс его описывающий.
public interface Auto {
public int getNomer(); // метод возвращающий номер машины
public String getColor();// возвращает цвет
public int getProbeg();// пробег
public void setNomer(int a); // задание номера
public void setColor(String a);// цвета
public void setProbeg(int a); // пробега
}
package otchet2;
import java.util.Scanner;
import otchet2.CarInfoWriter;
import otchet2.Ford;
public class AutoR {
/** узнал что можно ((класс) переменная).метод
* вот так писать только сегодня.
* Где же это было раньше, когда делал 3 лабу.)
*
*
* @param args
*/
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);//для считывания данных
int ind=-1;// инидкатор какое действие выполнить
Licht [] x = new Ford[11]; // создание массива объектов и их иниц-я
for (int i=0; i<x.length; i++){
x[i]= new Ford();
}
CarInfoWriter.printHelp();// вывод, какие могут быть использованы
while (ind!=0) { // команды
System.out.println("Введите команду");
ind=sc.nextInt();
if (ind>=1 && ind<=10) {
// задание свойств объекта в массиве по индикатору
x[ind]=CarInfoWriter.fordInfoInput();
System.out.println("");
}
else if (ind==11) {
// поисковик
System.out.println("по какому признаку произвести поиск");
System.out.println("1-по номеру, 2-по цвету");
ind=sc.nextInt();
if (ind==1 ){
int Nomer, j=0;
System.out.println("Введите номер");
Nomer=sc.nextInt();
for (Licht f: x) {
if (f.getNomer()==Nomer) {
// вывод всех данных об объекте
CarInfoWriter.getAll(((Ford)f));
// и можно добавить еще строчки
// тех классов, коотрые потомки
// и тогда ищет по всем
System.out.println("_______________");
j++;
}
}
System.out.println("найдено "+j+" машин");
}
else {
String Color;
int j=0;
System.out.println("Введите цвет");
Color=sc.nextLine();
Color=sc.nextLine();
for (Auto f: x) {
if (f.getColor().equals(Color)) {
// вывод всех данных об объекте
CarInfoWriter.getAll(((Ford)f));
System.out.println("_______________");
j++;
}
}
System.out.println("найдено "+j+" машин");
}
}
}
}
}
package otchet2;
Import java.Util.Scanner;
// класс для вывода данных о машине.
public class CarInfoWriter {
public void getTypeCor(Ford a){
System.out.print("тип корпуса машины- ");
System.out.println(a.getTypeCor());
}
public void getFabric(Ford a){
System.out.print("Фабрика машины- ");
System.out.println(a.getFabric());
}
public void getSeries(Ford a){
System.out.print("Серия машины- ");
System.out.println(a.getSeries());
}
public void getNomer(Ford a){
System.out.print("Номер машины- ");
System.out.println(a.getNomer());
}
public void getColor(Ford a){
System.out.print("цвет машины- ");
System.out.println(a.getColor());
}
public void getProbeg(Ford a){
System.out.print("пробег машины- ");
System.out.println(a.getProbeg());
}
public static void getAll(Ford a){
System.out.print("цвет машины- ");
System.out.println(a.getColor());
System.out.print("Фабрика машины- ");
System.out.println(a.getFabric());
System.out.print("Номер машины- ");
System.out.println(a.getNomer());
System.out.print("пробег машины- ");
System.out.println(a.getProbeg());
System.out.print("Серия машины- ");
System.out.println(a.getSeries());
System.out.print("тип корпуса машины- ");
System.out.println(a.getTypeCor());
System.out.println("Форд");
}
public static void printHelp(){
System.out.println("команды");
System.out.println("цифры от 1-10 задание пар-ов машины");
System.out.println("цифра 11 поиск нужного автомобиля");
System.out.println("цифра 0 выход из программы");
}
public static Ford fordInfoInput(){
Ford a= new Ford();
Scanner sc= new Scanner(System.in);
System.out.println("задайте цвет машины");
a.setColor(sc.nextLine());
System.out.println("задайте фабрику машины");
a.setFabric(sc.nextLine());
System.out.println("задайте номер машины");
a.setNomer(sc.nextInt());
System.out.println("задайте пробег машины");
a.setProbeg(sc.nextInt());
System.out.println("задайте серию машины");
a.setSeries(sc.nextInt());
System.out.println("задайте тип кузова машины");
a.setTypeCor(sc.nextLine());
a.setTypeCor(sc.nextLine());
return a;
}
}
package otchet2;
public class Licht implements Auto {
private int nomer, probeg;// все переменные приватны
private String color="";
public int getNomer(){
return nomer;
}
public String getColor(){
return color;
}
public int getProbeg(){
return probeg;
}
public void setNomer(int a){
nomer=a;
}
public void setColor(String a){
color=a;
}
public void setProbeg(int a){
probeg=a;
}
}
package otchet2;
// потомок класса.
public class Ford extends Licht{
private String typeCor="", fabric="";
private int series;
public String getTypeCor(){
return typeCor;
}
public String getFabric(){
return fabric;
}
public int getSeries(){
return series;
}
public void setTypeCor(String a){
typeCor=a;
}
public void setFabric(String a){
fabric=a;
}
public void setSeries(int a){
series=a;
}
}
Написать программу для демонстрации механизмов раннего и позднего связывания в Java. Для этого написать два класса, связанных отношением наследования и реализующим определенный интерфейс. В программе завести переменные всех трёх типов и вызвать у них перегруженный, перекрытый и статический методы. Определить, какие методы вызываются в каком случае. Проделать то же самое со свойствами.
package otchet2.zadacha2;
public class Svjazivanie {
/**Вот, вроде все.
*
* @param args
*/
public static void main(String[] args) {
/////////////////////////
// объекты класса родителя, потомка и интерфайса.
Potomok x= new Potomok();
Roditel y=new Roditel();
Interface z=new Roditel();
Roditel t=new Potomok();
////////////////////
System.out.println(Roditel.StaticR());// вывод из статического метода родителя.
System.out.println(Potomok.StaticP());// вывод из статического метода потомка.
// вызвать статический метод у интерфейса невозможно.
//////////
System.out.println(y.metodPr2());// вывод метода у родителя
System.out.println(x.metodPr2());// вывод этого же метода с переопределение у потомка.
/////////
System.out.println(x.metodPr1());// перегрузка у потомка
System.out.println(y.metodPr1(50));// перегрузка у родителя
////////
System.out.println(z.metodPr1(70));// перегрузка у интерфейса.
//////////////////////////////// Со свойствами.
System.out.println(x.x);// просто вызывается свойство данного класса
System.out.println(y.x);// просто вызывается свойство данного класса
System.out.println(z.y);// свойство интерфейса.
////////// Для родилетя указывающего на потомка.
System.out.println(t.metodPr2()); //Статика от родителя.
System.out.println(t.metodPr1(50));//ерегрузка тоже родителя
System.out.println(t.x);// Тоже родителя
}
}
package otchet2.zadacha2;
public class Roditel implements Interface {
int x=0;
int y=3;
// метод
public int metodPr1(int a, int b){
return a+b+x;
}
// его перегрузка.
public int metodPr1(int a){
return a;
}
public String metodPr2(){
return "метод вызван из класса родителя.";
}
// статик метод.
public static int StaticR(){
return 30;
}
}
package otchet2.zadacha2;
public class Potomok extends Roditel{
int x=5;
// перегрузка метода у родителя
public int metodPr1(){
return 14+x;
}
public static int StaticP(){
return 47;
}
public String metodPr2(){
return "метод вызван из класса потомка. "+super.metodPr2();
}
}
package otchet2.zadacha2;
public interface Interface {
public int metodPr1(int a, int b);
public String metodPr2();
public int metodPr1(int a);
int y=6;
}
Используя иерархию из предыдущего задания определить тип связывания при вызове перекрытых методов. Для этого создать новую иерархию с одним перекрытым методом, использующим в качестве параметра классы и интерфейс из предыдущего задания. Определить, какие методы, когда вызываются.
package otchet2.zadacha3;
import otchet2.zadacha2.Interface;
import otchet2.zadacha2.Potomok;
import otchet2.zadacha2.Roditel;
public class Main {
/**
* В прошлый раз вы ее не прокомментировали
* Считаю, что вы ее засчитали.
* @param args
*/
public static void main(String[] args) {
Potomok x= new Potomok();
Roditel y=new Roditel();
Interface z=new Roditel();
TypeComm Type= new TypeComm();
TypeCommP TypeP= new TypeCommP();
System.out.println(TypeP.Int(z));// перегрузка
System.out.println(Type.Int(z));// перегруза
System.out.println(TypeP.Int(x));
System.out.println(TypeP.Rod(y));//перекрытие
System.out.println(Type.Rod(x));// перекрытие
}
}
package otchet2.zadacha3;
//import otchet2.zadacha2.Potomok;
import otchet2.zadacha2.Roditel;
public class TypeCommP extends TypeComm{
public int Int(Roditel b){
return 2;
}
public int Rod(Roditel a){
return 3;
}
}
package otchet2.zadacha3;
import otchet2.zadacha2.*;
public class TypeComm {
public int Int(Interface a){
return 0;
}
public int Rod(Roditel a){
return 1;
}
}
Написать классы и интерфейс для хранения объектов в виде списка. Должны быть доступны операции добавления, удаления, проверки размера списка. Реализовать два способа хранения в виде массива и в виде связанного списка.
package otchet2.zadacha4;
import java.util.*;