Суббота, 2025-02-08, 00:02:17
Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Урок Наследование
CHerryДата: Пятница, 2011-10-14, 21:05:50 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 141
Репутация: 3732
Статус: 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
Генерал-майор
Группа: Администраторы
Сообщений: 21
Репутация: 1293
Статус: Offline
Вовчик!!! Я написал примерно то же самое. Единственное отличие было в том, что я все переменные классов объявлял закрытыми, что повлекло за собой необходимость писать методы доступа к этим переменным, соответственно мой код получился немножко длиннее!!!

Почему? ДА ЧЕРЕЗ ПОТОМУ КАК ЧТОЖ!
 
CHerryДата: Понедельник, 2011-10-17, 08:17:51 | Сообщение # 3
Генералиссимус
Группа: Администраторы
Сообщений: 141
Репутация: 3732
Статус: Offline
Quote (MINIsha)
все переменные классов объявлял закрытыми

Это очень правильно !
Выложи код посмотреть...
 
MINIshaДата: Понедельник, 2011-10-17, 14:46:53 | Сообщение # 4
Генерал-майор
Группа: Администраторы
Сообщений: 21
Репутация: 1293
Статус: 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
Генералиссимус
Группа: Администраторы
Сообщений: 141
Репутация: 3732
Статус: Offline
Quote (MINIsha)
Отличие в жабе интерфейсов и абстрактных классов в том, что классы не позволяют применять множественного наследования, а интерфейсы - да. Т.е. класс может быть наследником только одного класса, но может реализовывать большое кол-во интерфейсов:

Ага, т.е. если я правильно понял использовать чужие абстрактные классы мы можем только через интерфейсы ! Для чего они и введены в язык !

А вот код интерфейса не понял.
 
DimonДата: Вторник, 2011-10-18, 22:07:05 | Сообщение # 6
Рядовой
Группа: Проверенные
Сообщений: 11
Репутация: 0
Статус: 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
Генералиссимус
Группа: Администраторы
Сообщений: 141
Репутация: 3732
Статус: 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
Генерал-майор
Группа: Администраторы
Сообщений: 21
Репутация: 1293
Статус: 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);

}
}

Ни фига себе программка!!! wacko %) wacko

Очень жду ваших комментов! eek eek eek


Почему? ДА ЧЕРЕЗ ПОТОМУ КАК ЧТОЖ!

Сообщение отредактировал MINIsha - Четверг, 2011-10-20, 08:12:19
 
  • Страница 1 из 1
  • 1
Поиск: