Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Java]что использовать protected, privat, public


Автор: Warchief 24.11.2007, 23:28
Ребят, объясните пожалуйста какой уровень доступа к фукциям поставить лучше в этом классе? этот класс содержит ещё кучу  методов для ввода разных элементарных типов даннных и не только. Все методы опеределены как 
Код
protected static
, private тут не идёт вроде, так как потом в эти методы вызываются из другого source файла следующим образом  
Код
a=Input.readDouble();
. Объясните чем нужно руководствоваться при расставлении уровня доступа к функциям?


Код

import java.io.*; 
import java.math.BigInteger;


class Input { 
    
    
    
    //*******************************************************************************************************
    
    protected static BigInteger readBigInt()
    {    boolean test;
        String input ;
        BigInteger output = null;
        do{     
            test = true;
            //System.out.println("BigInteger input plz:" );
            try 
            { 
                BufferedReader bufRead = new BufferedReader (new InputStreamReader (System.in)); 
                input = bufRead.readLine();
                output = BigInteger.valueOf(Long.valueOf(input));
            }  
            catch (IOException e) 
            {    
                test = false;
                System.out.print("Error while reading input line!\n");
            }
            catch (NumberFormatException nfe) 
                {    
                test = false;
                System.out.print("Error while reading input line!\n");
                }
            }
        while(!test);
        //System.out.println("BigInt " + output);
    return  output;
    } 




Написал я ещё один класс для простейшей работы со сложными числами:

Код

public class complex
{
    private double real,img;
     complex() // 
        {
            real=0;
            img=0;
        }
    private complex(double w)// 
        {
            this();
            this.real=w;
        }
    complex(double w, double w1)// 
        {
            this(w);
            this.img=w1;
        }
    
    
    //***************************************************************************
                void setX(double wert)
                {
                    this.real=wert;
                }
                void setY(double wert)
                {
                    this.img=wert;
                }
                 double getX()
                {
                    return this.real;
                }
                double getY()
                {
                    return this.img;
                }            
    
    
    
    //**********************************************************************************
    
    
    complex add(complex zahl)
    {    
        return new complex(this.real + zahl.getX(), this.img + zahl.getY());
    }
    complex subst(complex zahl)
    {
        return new complex(this.real - zahl.getX(), this.img - zahl.getY());
    }
    complex divide(complex zahl)
    {
        complex nzahl = new complex();
        nzahl.real=(this.real*zahl.real+this.img*zahl.img)/(zahl.real*zahl.real+zahl.img*zahl.img); 
        nzahl.img=(this.img*zahl.real-this.real*zahl.img)/(zahl.real*zahl.real+zahl.img*zahl.img);
        return nzahl;
    }
     complex multiply(complex zahl)
    {
        complex nzahl = new complex();
        nzahl.real=this.real*zahl.real-this.img*zahl.img;    
        nzahl.img=this.real*zahl.img+this.img*zahl.real;    
        return nzahl;
    }
    
    
    //***************************************************************************************
        
            public String toString()
                {
                    return("algebraische darstellung: "+Math.round(real*1000)/1000.+" + "+Math.round(img*1000)/1000.+"i");
                }


}



Так-же вопрос, поставить методам из этого класса protected или лучше public?

Автор: Antropoid 25.11.2007, 00:13
В классе complex ставь всем методам public, иначе не сможешь к ним обращаться.

А вообще все зависит от логики отдельной программы.
private - если надо доступ только изнутри класса.
public - если надо доступ извне класса.
protected - если надо доступ в наследнике класса.
ниче не пишешь (называется default, или package) - если надо доступ внутри пакета, в котором содержится класс.

Автор: LSD 25.11.2007, 15:06
Цитата(Warchief @  24.11.2007,  23:28 Найти цитируемый пост)
Объясните чем нужно руководствоваться при расставлении уровня доступа к функциям?

Доступ должен быть самым "строгим", с учетом того как планируется использовать этот класс. Т.е. с одной стороны ты не должен довать сторонним пользователям вызвать лишний метод, а с другой стороны они все же должны суметь использовать твой класс.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)