🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.java
Article #153625

Re: Zmienna z klasy potomnej w klasie bazowej

#153625
From: Arivald
Date: Sun, 28 Oct 2012 07:48
52 lines
2517 bytes
W dniu 2012-10-27 18:41, Smok pisze:
> Cześć.
> Czy w abstrakcyjnej klasie bazowej można użyć metody która wykorzystuje zmienną z klasy potomnej? Jak to zrobić?
> Mam klasę "Działanie" w której chcę napisać metodę która wyrzuci na standardowe wyjście wartość zmiennej char ustawionej już klasie pochodnej (np dodawanie wyrzuci znak + a mnożenie wyrzuci znak *).
> Dzięki
> Smok.
>

Dziwne pytanie. Skoro wiesz co to "klasa abstrakcyjna", to wydawało by 
się że wiesz jak działają funkcje wirtualne.


Co do pytania, w klasie bazowej deklarujesz tą metodę z modyfikatorem 
"virtual", opcjonalnie "abstract" jeśli nie chcesz dostarczać ciała 
metody w klasie bazowej.

type Dzialanie= class
public
   procedure PrintOperator(); virtual; abstract;

W klasie potomnej redeklarujesz metodę z modyfikatorem "override".

type Mnozenie = class(Dzialanie)
public
   procedure PrintOperator(); override;


procedure Mnozenie.PrintOperator();
begin
   Print('*');
end;

i teraz dla kodu:

   var zmienna: Dzialanie.

   zmienna = Mnozenie.Create();

Przy wywołaniu
   zmienna.PrintOperator();

Zostanie wykonana wersja metody z Mnozenie. A skoro tak, to może ona 
używać wszystkich zmiennych z Mnozenie.


BTW do tak prostego zadanie nie musisz nawet mieć zmiennej. Operator 
może być hardkodowany w implementacji funkcji. To dość typowe 
zastosowanie funkcji wirtualnych.


-- 
Arivald
Technical Details
Message-ID: <k6io11$i4g$1@news.dialog.net.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.task.gda.pl!news.dialog.net.pl!not-for-mail
References: <76d5aa43-7b1d-4f05-85d7-35c20ccb23e2@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.task.gda.pl!news.dialog.net.pl!not-for-mail
From: Arivald <NOSPAMarivald@interia.pl>
Newsgroups: pl.comp.lang.java
Subject: Re: Zmienna z klasy potomnej w klasie bazowej
Date: Sun, 28 Oct 2012 08:48:52 +0100
Organization: Dialog Net
Lines: 53
Message-ID: <k6io11$i4g$1@news.dialog.net.pl>
References: <76d5aa43-7b1d-4f05-85d7-35c20ccb23e2@googlegroups.com>
NNTP-Posting-Host: dynamic-78-8-143-68.ssp.dialog.net.pl
Mime-Version: 1.0
X-Trace: news.dialog.net.pl 1351410529 18576 78.8.143.68 (28 Oct 2012 07:48:49 GMT)
X-Complaints-To: abuse@dialog.net.pl
NNTP-Posting-Date: Sun, 28 Oct 2012 07:48:49 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/17.0 Thunderbird/17.0
In-Reply-To: <76d5aa43-7b1d-4f05-85d7-35c20ccb23e2@googlegroups.com>
X-Antivirus: avast! (VPS 121027-1, 2012-10-27), Outbound message
X-Antivirus-Status: Clean
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit