Урок Наследование
|
|
CHerry | Дата: Пятница, 2011-10-14, 21:05:50 | Сообщение # 1 |
![CHerry](/avatar/97/8071-240618.gif) Генералиссимус
Группа: Администраторы
Сообщений: 141
Статус: Offline
| Реализовать наследие классов млекопитающие - собаки, кот, человек. Code public class Main { public static void main(String[] args) {
dog d = new dog(); d.aName = "Reks"; d.getType();
human h = new human(); h.aName = "Alex"; h.getType(); } }
abstract class mammal { String aName; String aType; void name(String n) { aName=n; } void getType() { System.out.println(aName+" "+aType); } }
class dog extends mammal { dog(){ this.aType = "gav-gav"; } }
class human extends mammal { human(){ this.aType = "hello"; } }
|
|
| |
MINIsha | Дата: Воскресенье, 2011-10-16, 18:23:40 | Сообщение # 2 |
![MINIsha](/avatar/89/323772.jpg) Генерал-майор
Группа: Администраторы
Сообщений: 21
Статус: Offline
| Вовчик!!! Я написал примерно то же самое. Единственное отличие было в том, что я все переменные классов объявлял закрытыми, что повлекло за собой необходимость писать методы доступа к этим переменным, соответственно мой код получился немножко длиннее!!!
Почему? ДА ЧЕРЕЗ ПОТОМУ КАК ЧТОЖ!
|
|
| |
CHerry | Дата: Понедельник, 2011-10-17, 08:17:51 | Сообщение # 3 |
![CHerry](/avatar/97/8071-240618.gif) Генералиссимус
Группа: Администраторы
Сообщений: 141
Статус: Offline
| Quote (MINIsha) все переменные классов объявлял закрытыми Это очень правильно ! Выложи код посмотреть...
|
|
| |
MINIsha | Дата: Понедельник, 2011-10-17, 14:46:53 | Сообщение # 4 |
![MINIsha](/avatar/89/323772.jpg) Генерал-майор
Группа: Администраторы
Сообщений: 21
Статус: Offline
| Запросто! Желание Админа - закон:
Code abstract class mammal { private String name, speak;
public String getName() {//т.к. переменные закрытые - пишу к ним метод доступа return this.name ; } public String getSpeak(){//т.к. переменные закрытые - пишу к ним метод доступа return this.speak ; } public String setName(String n){//метод установки имени this.name = n; return n; } public String setSpeak(String s){//метод установки речи this.speak = s; return s; }
} //----------------------------------------------------------------------------------------------------------------- class Dog extends mammal { public Dog(String n,String s){//конструктор для содания класса с заданием имени и речи super.setName(n); //использую метод установки имени родительского класса super.setSpeak(s); } public Dog(){//конструктор для содания класса по умолчанию super.setName("DOG");//использую метод установки имени родительского класса super.setSpeak("GAV!!!"); } } class Cat extends mammal{ public Cat(String n, String s){//конструктор для содания класса с заданием имени и речи super.setName(n); //использую метод установки имени родительского класса super.setSpeak(s); } public Cat(){//конструктор для содания класса по умолчанию super.setName("CAT");//использую метод установки имени родительского класса super.setSpeak("MYAU!!!"); } } class Human extends mammal{ public Human(String n, String s){//конструктор для содания класса с заданием имени и речи super.setName(n); //использую метод установки имени родительского класса super.setSpeak(s); } public Human(){//конструктор для содания класса по умолчанию super.setName("HUMAN");//использую метод установки имени родительского класса super.setSpeak("SPEACH!!!"); } } //-------------------------------------------------------------------------------------------------------------------- class showMammal { //класс для отображения выше написанных классов (с методом Main) public static void main (String[] args){ Dog d = new Dog("DOG","GAV!!!");//использую конструктор с возможностью задания имени и речи Human h = new Human();//использую конструктор создания экземпляра класса по умолчанию Cat c = new Cat(); System.out.println(d.getName()+" "+d.getSpeak()+"\n"+h.getName()+" "+h.getSpeak() +"\n"+c.getName()+" "+c.getSpeak());//используя методы доступа к имени и речи родительского класса //вывожу их на печать } }
Добавлено (2011-10-17, 14:46:53) --------------------------------------------- Специально для Владимира хочу поделиться своими соображениями: Интерфейс - это техническое задание, шаблон, условия (называйте как хотите) - это то, какие методы должен реализовывать класс!!! Т.е. класс может быть наследником только одного класса, но может реализовывать большое кол-во интерфейсов: Code class myClass extends MainClass{ } //--------------------------------------------------------------------------------- interface A{ void interfaceMethod(); }
interface B{ int interfaceMethod(); }
interface C{ String interfaceMethod(); }
interface D{ boolean interfaceMethod();
}
interface E{ double interfaceMethod();
}
class myClass implements A, B, C, D, E...{//интерфейсы, описанные выше }
Так же в жабе есть готовые интерфейсы, которые можно использовать.
Возможна и такая реализация интерфейса:
Code interface I { void interfaceMethod(); } public class ImplementingInterface implements I { void interfaceMethod() { System.out.println("Этот метод реализован из интерфейса I"); } public static void main(String[] args) { ImplementingInterface temp = new ImplementingInterface(); temp.interfaceMethod(); } }
Короче говоря границы между абстрактными классами и интерфейсами весьма размытые!!!
Почему? ДА ЧЕРЕЗ ПОТОМУ КАК ЧТОЖ!
Сообщение отредактировал MINIsha - Понедельник, 2011-10-17, 21:05:19 |
|
| |
CHerry | Дата: Понедельник, 2011-10-17, 17:10:37 | Сообщение # 5 |
![CHerry](/avatar/97/8071-240618.gif) Генералиссимус
Группа: Администраторы
Сообщений: 141
Статус: Offline
| Quote (MINIsha) Отличие в жабе интерфейсов и абстрактных классов в том, что классы не позволяют применять множественного наследования, а интерфейсы - да. Т.е. класс может быть наследником только одного класса, но может реализовывать большое кол-во интерфейсов: Ага, т.е. если я правильно понял использовать чужие абстрактные классы мы можем только через интерфейсы ! Для чего они и введены в язык !
А вот код интерфейса не понял.
|
|
| |
Dimon | Дата: Вторник, 2011-10-18, 22:07:05 | Сообщение # 6 |
Рядовой
Группа: Проверенные
Сообщений: 11
Статус: Offline
| А я все-таки реализовал через интерфейс ))
Code interface Voice { public String getVoice(String s); }
abstract class Mammal { String mType; }
class clDog extends Mammal implements Voice { clDog(){ this.mType = "Dog"; }
public String getVoice(String s) { return s; } }
class clCat extends Mammal implements Voice { clCat () { this.mType = "Cat"; }
public String getVoice(String s) { return s; } }
class clHuman extends Mammal implements Voice { clHuman () { this.mType = "Human"; }
public String getVoice(String s) { return s; } } public class Mammals {
public static void main(String[] args) {
clDog dog = new clDog(); System.out.println("class: " + dog.mType + " tell: " + dog.getVoice("gav-gav"));
clCat cat= new clCat(); System.out.println("class: " + cat.mType + " tell: " + cat.getVoice("murr-murr"));
clHuman human = new clHuman (); System.out.println("class: " + human.mType + " tell: " + human.getVoice("Hello")); }
Добавлено (2011-10-18, 22:07:05) --------------------------------------------- как видно из моего кода, строки:
Code public String getVoice(String s) { return s; }
явно увеличивают количество строк программы. Но насколько я понял, от этого никуда не деться
Сообщение отредактировал Dimon - Вторник, 2011-10-18, 21:41:32 |
|
| |
CHerry | Дата: Среда, 2011-10-19, 10:09:42 | Сообщение # 7 |
![CHerry](/avatar/97/8071-240618.gif) Генералиссимус
Группа: Администраторы
Сообщений: 141
Статус: Offline
| меня смущает код Code [quote=Dimon]System.out.println("class: " + cat.mType + " tell: " + cat.getVoice("murr-murr")); [/quote] в частности Code cat.getVoice("murr-murr")) мы закидываем в метод тоже, что он и отдает. Мне кажется это не рационально, какой в этом смысл ? Насколько я понял задачу, при передаче типа объекту, он должен сам опредялять, что должен делать этот тип, murr-murr или Hello или gav-gav.
|
|
| |
MINIsha | Дата: Четверг, 2011-10-20, 08:08:39 | Сообщение # 8 |
![MINIsha](/avatar/89/323772.jpg) Генерал-майор
Группа: Администраторы
Сообщений: 21
Статус: Offline
| Вот ещё пример наследования:
import java.io.*;
abstract class Devaices { private String power; private int power1; int id = 0; public void setPower (String other){ power = other;
} public void setPower1 (){ power1 = power.length();
} public String getPower (){
return power; } public int getPower1(){ return power1; } } class electricMains { private static String power = "****************"; private static int power1 = power.length(); public String getPower (){
return power; } public int getPower1(){
return power1; } public double percentLoad(int other){ double p = other*100/getPower1(); return p; } } class clothesWasher extends Devaices{
public clothesWasher(){ setPower("***"); setPower1();
}
} class flatiron extends Devaices{ public flatiron() { setPower("**"); setPower1(); } } class foehn extends Devaices{ public foehn() { setPower("*"); setPower1(); } } class TVset extends Devaices{ public TVset() { setPower("*"); setPower1(); } } class microwave extends Devaices{ public microwave() { setPower("**"); setPower1(); } } class boiler extends Devaices{ public boiler() { setPower("***"); setPower1(); } } class airConditioner extends Devaices{ public airConditioner() { setPower("****"); setPower1(); } } class computer extends Devaices{ public computer() { setPower("*"); setPower1(); } } //----------------------------------------------------------------------------------------------------------------- class showMains extends electricMains{ static electricMains eM = new electricMains();
public static void main (String[] args) throws IOException {
BufferedReader sb = new BufferedReader(new InputStreamReader(System.in)); //------------------------------------------------------------------------------------------------------------------
String power = eM.getPower() ; double watt = eM.percentLoad(0); //--------------------------------------------------------------------------------------------------------------------- clothesWasher cW = new clothesWasher(); airConditioner aC = new airConditioner(); computer comp = new computer(); boiler b = new boiler(); microwave mic = new microwave(); flatiron flat = new flatiron(); foehn fo = new foehn(); TVset tv = new TVset(); System.out.println("Это электрическая сеть."+"\n"+"В неё можно включать и выключать приборы."); System.out.println("Вот список приборов которые есть в сети:"); System.out.println("air conditioner"+"\n"+"boiler"+"\n"+"computer"+"\n"+"clother washer"); System.out.println("flatiron"+"\n"+"foehn"+"\n"+"microwave"+"\n"+"TVset"); System.out.println("Чтобы включить или выключить прибор поставьте + или - перед его именем"); //----------------------------------------------------------------------------------------------------------------------- do{ String total = sb.readLine(); try{ if (total.equals("+clother washer")){ cW.id++; if (cW.id==1){ power = power.substring(cW.getPower1()); watt = watt +eM.percentLoad(cW.getPower1()); System.out.println("The load electric mains: "+watt+"%"+" "+power); } else System.out.println("Этот прибор уже включен!"); } if (total.equals("-clother washer")){ if(power.length()!=16){
if(cW.id>0){ cW.id--; power = power.concat(cW.getPower()); watt = watt-eM.percentLoad(cW.getPower1()); System.out.println("The load electric mains: "+watt+"%"+" "+power); } else System.out.println("Этот прибор не включен в сеть!"); } else System.out.println("Ни один прибор не включен в сеть!"); } //-----------------------------------------------------------------------------------------------------------------
if (total.equals("+air conditioner")){ aC.id++; if (aC.id==1){
power = power.substring(aC.getPower1()); watt = watt +eM.percentLoad(aC.getPower1()); System.out.println("The load electric mains: "+watt+"%"+" "+power); } else System.out.println("Этот прибор уже включен!"); } if (total.equals("-air conditioner")){ if(power.length()!=16){
if(aC.id>0){ aC.id--; power = power.concat(aC.getPower()); watt = watt-eM.percentLoad(aC.getPower1()); System.out.println("The load electric mains: "+watt+"%"+" "+power); } else System.out.println("Этот прибор не включен в сеть!"); } else System.out.println("Ни один прибор не включен в сеть!"); } //-------------------------------------------------------------------------------------------------------------------
if (total.equals("+microwave")){ mic.id++; if (mic.id==1){ power = power.substring(mic.getPower1()); watt = watt +eM.percentLoad(mic.getPower1()); System.out.println("The load electric mains: "+watt+"%"+" "+power); } else System.out.println("Этот прибор уже включен в сеть!"); } if (total.equals("-microwave")){ if(power.length()!=16){
if(mic.id>0){ mic.id--; power = power.concat(mic.getPower()); watt = watt-eM.percentLoad(mic.getPower1()); System.out.println("The load electric mains: "+watt+"%"+" "+power); } else System.out.println("Этот прибор не включен в сеть!"); } else System.out.println("Ни один прибор не включен в сеть!"); } //--------------------------------------------------------------------------------------------------------------------- if (total.equals("+boiler")){ b.id++; if (b.id==1){ power = power.substring(b.getPower1()); watt = watt +eM.percentLoad(b.getPower1()); System.out.println("The load electric mains: "+watt+"%"+" "+power); } else System.out.println("Этот прибор уже включен в сеть!"); } if (total.equals("-boiler")){ if(power.length()!=16){
if(b.id>0){ b.id--; power = power.concat(b.getPower()); watt = watt-eM.percentLoad(b.getPower1()); System.out.println("The load electric mains: "+watt+"%"+" "+power); } else System.out.println("Этот прибор не включен в сеть!"); }
else System.out.println("Ни один прибор не включен в сеть!"); } //----------------------------------------------------------------------------------------------------------------------- if (total.equals("+computer")){ comp.id++; if (comp.id==1){ power = power.substring(comp.getPower1()); watt = watt +eM.percentLoad(comp.getPower1()); System.out.println("The load electric mains: "+watt+"%"+" "+power); } else System.out.println("Этот прибор уже включен в сеть!"); } if (total.equals("-computer")){ if(power.length()!=16){
if(comp.id>0){ comp.id--; power = power.concat(comp.getPower()); watt = watt-eM.percentLoad(comp.getPower1()); System.out.println("The load electric mains: "+watt+"%"+" "+power); } else System.out.println("Этот прибор не включен в сеть!"); } else System.out.println("Ни один прибор не включен в сеть!"); } //---------------------------------------------------------------------------------------------------------------- if (total.equals("+flatiron")){ flat.id++; if (flat.id==1){ power = power.substring(flat.getPower1()); watt = watt +eM.percentLoad(flat.getPower1()); System.out.println("The load electric mains: "+watt+"%"+" "+power); } else System.out.println("Этот прибор уже включен в сеть!"); } if (total.equals("-flatiron")){ if(power.length()!=16){
if(flat.id>0){ flat.id--; power = power.concat(flat.getPower()); watt = watt-eM.percentLoad(flat.getPower1()); System.out.println("The load electric mains: "+watt+"%"+" "+power); } else System.out.println("Этот прибор не включен в сеть!"); } else System.out.println("Ни один прибор не включен в сеть!"); } //------------------------------------------------------------------------------------------------------------------ if (total.equals("+foehn")){ fo.id++; if (fo.id==1){ power = power.substring(fo.getPower1()); watt = watt +eM.percentLoad(fo.getPower1()); System.out.println("The load electric mains: "+watt+"%"+" "+power); } else System.out.println("Этот прибор уже включен в сеть!"); } if (total.equals("-foehn")){ if(power.length()!=16){
if(fo.id>0){ fo.id--; power = power.concat(fo.getPower()); watt = watt-eM.percentLoad(fo.getPower1()); System.out.println("The load electric mains: "+watt+"%"+" "+power); } else System.out.println("Ни один прибор не включен в сеть!"); } else System.out.println("Этот прибор не включен в сеть!"); } //-------------------------------------------------------------------------------------------------------------------- if (total.equals("+TVset")){ tv.id++; if (tv.id==1){ power = power.substring(tv.getPower1()); watt = watt +eM.percentLoad(tv.getPower1()); System.out.println("The load electric mains: "+watt+"%"+" "+power); } else System.out.println("Этот прибор уже включен в сеть!"); } if (total.equals("-TVset")){ if(power.length()!=16){
if(tv.id>0){ tv.id--; power = power.concat(tv.getPower()); watt = watt-eM.percentLoad(tv.getPower1()); System.out.println("The load electric mains: "+watt+"%"+" "+power); } else System.out.println("Этот прибор не включен в сеть!"); } else System.out.println("Ни один прибор не включен в сеть!"); } //--------------------------------------------------------------------------------------------------------------------- } catch(StringIndexOutOfBoundsException a){ System.out.println("Сеть перегружена!!!"); } }
while(power.length()>0);
} }
Ни фига себе программка!!! %)
Очень жду ваших комментов!
Почему? ДА ЧЕРЕЗ ПОТОМУ КАК ЧТОЖ!
Сообщение отредактировал MINIsha - Четверг, 2011-10-20, 08:12:19 |
|
| |