SPRAWOZDANIE
Języki programowania obiektowego
ćwiczenie nr 4
Podstawy JAVA- „Dziedziczenie”
Michał Grudziński
IMiR, Mechatronika gr.23
13.10.2010
Klasa punkt (super klasa)
package dane;
/**
* @author user
*
*/
public class punkt //deklaracja klasy(super)
{
private double m;
void setm(double mass) //Sprawdzenie i przypisanie
wartości do zmiennej
{
if(mass<0) m=0;
else m=mass;
}
double getm() //Zwrócenie wartości
{
return m;
}
punkt() //Konstruktor
{
m=0;
}
punkt(double a) //Konstruktor z parametrem
{
setm(a);
}
double moment() //Funkcja składowa licząca
moment bezwładności
{
return 0;
}
double st(double d)
{
return d*d*m+moment();
}
String opis()
{
return "Punkt materialny";
}
}
Klasa walec
package dane;
public class walec extends punkt //deklaracja podklasy
dziedziczącej z klasy
punkt
{
private double r ;
double getr(){
return r;
}
void setr(double a){ //sprwadzenie wartosci
zmiennej r
if(a<0) r=0;
else r=a;
}
walec(){
super(); //Konstruktor z odwołaniem do
kostruktora superklasy
r=0;
}
walec(double a ,double b){ //Konstruktor parametryczny
z odwołaniem do
kostruktora superklasy
super(a);
setr(b);
}
double moment(){ //obliczenie momentu
bezwladnosci
return 1/2*getm()*r*r;
}
String opis(){
return "walec";
}
}
Klasa kula
package dane;
public class kula extends punkt{ //Wszystkie deklaracje
konstruktory i funkcje
składowe są analogiczne do
klasy „walec”
private double r ;
double getr(){
return r;
}
void setr(double a){
if(a<0) r=0;
else r=a;
}
kula(){
super();
r=0;
}
kula(double a ,double b){
super(a);
setr(b);
}
double moment(){
return 2/5*getm()*r*r;
}
String opis(){
return "Kula";
}
}
Klasa pręt
package dane;
public class pret extends punkt { //Wszystkie deklaracje
konstruktory i funkcje
składowe są analogiczne do
klasy „walec”
private double r ;
protected double getr(){
return r;
}
void setr(double a){
if(a<0) r=0;
else r=a;
}
pret(){
super();
r=0;
}
pret(double a ,double b){
super(a);
setr(b);
}
double moment(){
return 1/12*getm()*r*r;
}
String opis(){
return "pret";
}
}
Program testowy
package dane;
/**
* @author user
*
*/
public class program {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
punkt obiekt_pkt= new punkt(5); //stworzenie obiektu dla
punktu i wyświetlenie
wartości obliczonych przez
funkcje składowe
System.out.println("Wartosc momentu: "+obiekt_pkt.moment() );
System.out.println("Wartosc steinera: "+obiekt_pkt.st(10) );
System.out.println(obiekt_pkt.opis() );
walec obiekt_walec= new walec(5, 6);
System.out.println("Wartosc momentu: "+obiekt_walec.moment());
System.out.println("Wartosc steinera: "+obiekt_walec.st(10) );
System.out.println(obiekt_walec.opis() );
kula obiekt_kula= new kula(5, 6);
System.out.println("Wartosc momentu: "+obiekt_kula.moment() );
System.out.println("Wartosc steinera: "+obiekt_kula.st(10) );
System.out.println(obiekt_kula.opis() );
pret obiekt_pret= new pret(5, 6);
System.out.println("Wartosc momentu: "+obiekt_pret.moment() );
System.out.println("Wartosc steinera: "+obiekt_pret.st(10) );
System.out.println(obiekt_pret.opis() );
punkt tablica[]= new punkt[4]; //deklaracja tablicy
tablica[0]= new punkt(2); //przypisanie nowych
wartosci tablicom
tablica[1]= new walec(2,3);
tablica[2]= new kula(2,3);
tablica[3]= new pret(2,3);
for (int n=0; n<=3;n++){ //pętla wyświetlająca wartości
zapisane w tablic
System.out.println("Wartosc momentu dla "+tablica[n].opis()+" wynosi: "+tablica[n].moment() );
System.out.println("Wartosc steinera dla "+tablica[n].opis()+" wynosi: "+tablica[n].st(10) );
}
}
}
Wynik programu
Wartosc momentu: 0.0
Wartosc steinera: 500.0
Punkt materialny
Wartosc momentu: 0.0
Wartosc steinera: 500.0
walec
Wartosc momentu: 0.0
Wartosc steinera: 500.0
Kula
Wartosc momentu: 0.0
Wartosc steinera: 500.0
pret
Wartosc momentu dla Punkt materialny wynosi: 0.0
Wartosc steinera dla Punkt materialny wynosi: 200.0
Wartosc momentu dla walec wynosi: 0.0
Wartosc steinera dla walec wynosi: 200.0
Wartosc momentu dla Kula wynosi: 0.0
Wartosc steinera dla Kula wynosi: 200.0
Wartosc momentu dla pret wynosi: 0.0
Wartosc steinera dla pret wynosi: 200.0
Odpowiedzi na pytania
1. Co zmienia zastąpienie pól prywatnych polami chronionymi w dziedziczeniu ?
Pola o charakterze prywatnym są dostępne jedynie wewnątrz danej klasy i nie ma do nich dostępu z poziomy innych klas. Co oznacza, że żadna inna klasa nie może ich ani odczytać ani zapisywać. Zmiana pól prywatnych na chronione zmienia możliwości dostępu do danych tej klasy. Pola chronione będą dostępne dla funkcji składowych danej klasy, jej klas potomnych oraz klas zawartych w tym samym pakiecie.
2. W jaki sposób i kiedy wywołuje się konstruktor superklasy?
W przypadku potrzeby odwołania się do konstruktora superklasy, należy go wywołać w odpowiedni sposób. Wywołanie takie wymaga konstrukcji ze słowem super, słowo to oznacza w tym przypadku wywołanie konstruktora superklasy:
Public
Class klasa_potomna extends klasa_bazowa
{
Klasa_potomna()
{
Super(argumenty); // wywołanie konstruktora superklasy
/*
…dalszy ciąg konstruktora
*/
}
}
3. W jaki sposób uzyskuje się dostęp do pól i metod superklasy?
Pola i metody mogą mieć różne rodzaje dostępu:
Protected - pole lub funkcje składową należy poprzedzic slowem protected. Pola określone w ten sposób dostępne będą jedynie dla danej klasy, klas potomnych oraz klas tego samego pakietu.
Private - pole lub funkcje składową należy poprzedzic slowem private. . Pola określone w ten sposób dostępne będą tylko z wnetrza klasy, w ktorej się znajduja.
Public - pole lub funkcje składową należy poprzedzic slowem public. Pola określone w ten sposób dostępne będą przez wszystkie inne klasy
Dostęp pakietowy-jest ustawiany jako domyślny (jeśli przed polem lub funkcją składową nie ma żadnego słowa). Dostęp do takiej składowej mają wszystkie klasy pakietu w którym się znajdują.