★ India’s Student Guidance Platform

Encapsulation in Java — ICSE Class 10 Computer Applications

Encapsulation in Java — ICSE Class 10 Computer Applications

Ab tak humne class ke andar saara saamaan bhar diya hai — data members, methods, constructors. Ek sawaal ab bhi baaki hai: is saamaan mein se kya-kya bahar wale ko dikhna chahiye? Agar koi bhi kahin se aakar aapke object ka data seedhe badal de, toh object ki poori zimmedari khatam. Encapsulation ka matlab hai data aur us par kaam karne wale methods ko ek hi class mein baandh dena, aur phir data ko bahar se chhupa dena taaki woh sirf aapke methods ke zariye hi badle. Yeh Unit 6 hai, aur syllabus ismein do cheezein maangta hai: access specifiers aur unki visibility, aur variables ka scope.

What Encapsulation Actually Means

Ek ATM ke baare mein sochiye. Aap paisa nikaal sakte hain, jama kar sakte hain, balance dekh sakte hain. Lekin aap machine kholkar note ginne nahi baithte. Andar ka cash chhupa hua hai, aur usse milne ke sirf kuch tay raaste hain — aur har raasta pehle jaanch karta hai.

Class mein bhi bilkul yehi hota hai. Data members private kar diye jaate hain, aur unhein padhne ya badalne ke liye public methods diye jaate hain. Isi ko data hiding kehte hain, aur yeh encapsulation ka sabse zaroori faayda hai.

Key Rule

Encapsulation aur data hiding ek hi cheez ke do pehlu hain. Encapsulation = data aur methods ko ek class mein baandhna. Data hiding = us data ko private karke bahar se pahunch se door rakhna. Definition question mein dono line likh dijiye — poore marks isi se milte hain.

The Three Access Specifiers

Syllabus teen access specifiers naam se maangta hai: private, protected aur public. Ye tay karte hain ki class ka koi member kahan tak dikhega.

  • private — sirf usi class ke andar dikhega. Bahar se koi nahi chhoo sakta. Data members ke liye yahi sahi chunaav hai.
  • protected — usi class mein, usi package mein, aur uski derived (child) classes mein dikhega. Beech ka raasta hai.
  • public — har jagah dikhega, kisi bhi class se. Methods ke liye aksar yahi use hota hai.

Agar aap kuch bhi na likhein toh use default access kehte hain — kai purani kitaabein ise friendly bhi likhti hain. Woh usi package ke andar dikhta hai.

Exam Tip

Ek ginti ka fark dhyaan mein rakhiye. Keywords teen hainprivate, protected, public. Lekin visibility ke star chaar hain, kyunki kuch na likhne par bhi ek access milta hai: default. Isliye agar sawaal “name the access specifiers” poochhe toh teen keywords likhiye, aur agar “levels of access” poochhe toh chaaron likhiye — private, default, protected, public.
Worked Example 1 — private really does block access

class E2
{
    public static void main(String args[])
    {
        Box b = new Box();
        System.out.println(b.secret);   // trying to reach a private member
    }
}

class Box
{
    private int secret = 42;
}

Compiler output

E2.java:6: error: secret has private access in Box
        System.out.println(b.secret);   // trying to reach a private member
                            ^
1 error

Yeh program chalta hi nahi — compiler ne wahin rok diya. Aur yehi private ka poora maqsad hai. Data hiding koi salaah nahi hai, woh compiler dwara laagu kiya gaya niyam hai.

Visibility Rules, Side by Side

Accessible from… private default protected public
The same class Yes Yes Yes Yes
Another class, same package No Yes Yes Yes
Derived class, different package No No Yes Yes
Any other class, different package No No No Yes
Exam Tip

Table ko upar se neeche padhiye toh ek seedhi baat dikhti hai: private sabse tight hai, phir default, phir protected, aur public sabse khula. Agar sawaal mein “arrange in increasing order of visibility” poochha jaaye, toh yehi kram likhiye.

Getters and Setters: Controlled Access

Agar data private hai toh use padhein kaise? Jawaab hai public methods. Padhne wale ko getter (accessor) kehte hain aur badalne wale ko setter (mutator). Asli faayda yeh hai ki setter ke andar aap jaanch laga sakte hain — galat value andar ghusegi hi nahi.

Worked Example 2 — A setter that refuses bad data

class E1
{
    public static void main(String args[])
    {
        Account a = new Account(500);
        a.deposit(250);
        System.out.println("Balance = " + a.getBalance());
        a.deposit(-100);
        System.out.println("Balance = " + a.getBalance());
    }
}

class Account
{
    private int balance;

    Account(int b)
    {
        balance = b;
    }

    public int getBalance()
    {
        return balance;
    }

    public void deposit(int amt)
    {
        if (amt > 0)
            balance = balance + amt;
        else
            System.out.println("Deposit must be positive");
    }
}

Output

Balance = 750
Deposit must be positive
Balance = 750

Yahi encapsulation ka poora point hai. balance private hai, isliye koi seedhe a.balance = -9999; nahi likh sakta. Paisa sirf deposit() se aata hai, aur deposit() ne -100 ko mana kar diya. Balance 750 hi raha — object ne apni hifaazat khud ki.

Scope of Variables — The Four Kinds

Syllabus chaar tarah ke variables naam se maangta hai. Fark yeh hai ki woh kahan banta hai, kab tak zinda rehta hai, aur kis-kis ko dikhta hai.

Kind Kahan declare hota hai Zindagi aur pahunch
Class variable Class ke andar, static ke saath Sirf ek copy, saare objects mein saanjhi. Class load hote hi ban jaata hai.
Instance variable Class ke andar, static ke bina Har object ke paas apni alag copy. Object ke saath banta hai, object ke saath jaata hai.
Argument variable
(paper mein aksar parameter likha jaata hai)
Method ya constructor ke brackets mein Sirf us method ke andar. Call khatam, variable khatam.
Local variable Method ke body ke andar Sirf apne block ke andar. Koi default value nahi milti — khud value dena zaroori hai.
Worked Example 3 — All four kinds in one program

class E3
{
    static int classVar = 100;
    int instanceVar = 50;

    void show(int argVar)
    {
        int localVar = 5;
        System.out.println("class variable    = " + classVar);
        System.out.println("instance variable = " + instanceVar);
        System.out.println("argument variable = " + argVar);
        System.out.println("local variable    = " + localVar);
    }

    public static void main(String args[])
    {
        E3 a = new E3();
        E3 b = new E3();
        b.instanceVar = 77;
        E3.classVar = 200;
        a.show(9);
        b.show(9);
    }
}

Output

class variable    = 200
instance variable = 50
argument variable = 9
local variable    = 5
class variable    = 200
instance variable = 77
argument variable = 9
local variable    = 5

Do objects, do baar output — aur fark sirf ek line mein hai. classVar dono baar 200 hai, kyunki woh static hai aur dono objects usi ek copy ko dekh rahe hain. instanceVar pehli baar 50 aur doosri baar 77 hai, kyunki har object ke paas apni copy hai aur humne sirf b wali badli thi. Yeh do lines poora static-vs-instance fark samjha deti hain.

When a Local Variable Hides a Data Member

Yeh cheez aap constructors chapter mein this ke saath dekh chuke hain, aur yahan woh scope ke nazariye se samajh mein aati hai. Agar ek local variable ka naam data member jaisa ho, toh method ke andar local hi jeetta hai — kyunki woh zyada paas hai.

Worked Example 4 — Same name, two different variables

class DE2
{
    int n = 10;

    void test()
    {
        int n = 20;
        System.out.println("Inside test, n = " + n);
        System.out.println("Data member n = " + this.n);
    }

    public static void main(String args[])
    {
        DE2 ob = new DE2();
        ob.test();
        System.out.println("From main, n = " + ob.n);
    }
}

Output

Inside test, n = 20
Data member n = 10
From main, n = 10

Khaali n ne local wala 20 diya. this.n ne data member wala 10 diya. Aur main() se dekhne par bhi 10 hi mila — kyunki local n toh method khatam hote hi mar chuka tha. Ek naam, do alag zindagiyan.

Common Mistake

Local variable ko bina value diye use karna. Data members ko default value milti hai, local variables ko nahi. int sum; sum = sum + 5; likhne par compiler saaf mana karta hai: “variable sum might not have been initialized”. Har local variable ko shuru mein value dena aadat bana lijiye — aksar int sum = 0;.

Dry-Run Bank — Output Questions

Pehle kaagaz par trace kijiye, phir answer kholiye.

Dry Run 1 — static shared, instance separate

class DE1
{
    static int count = 0;
    int id;

    DE1()
    {
        count++;
        id = count;
    }

    public static void main(String args[])
    {
        DE1 p = new DE1();
        DE1 q = new DE1();
        System.out.println(p.id + " " + q.id);
        System.out.println(p.count + " " + q.count);
        p.id = 99;
        System.out.println(p.id + " " + q.id + " " + DE1.count);
    }
}
Show Answer
1 2
2 2
99 2 2

Pehli line: har object ne apna id rakha → 1 aur 2. Doosri line: count static hai, isliye p.count aur q.count dono usi ek copy ko dekh rahe hain → 2 aur 2. Teesri line: p.id badalne se q.id par koi asar nahi pada, kyunki woh alag variable hai.

Exam Tip

Upar wale program mein humne jaan-boojh kar p.count likha, taaki aap dekh sakein ki Java ise allow karta hai. Lekin yeh acchi aadat nahi hai. Static variable class ka hota hai, kisi object ka nahi — isliye use hamesha class ke naam se likhiye: DE1.count. Aakhri line mein humne wahi kiya hai. Answer sheet mein yahi form likhiye.
Dry Run 2 — a setter that validates

class QE1
{
    public static void main(String args[])
    {
        Student s = new Student("Meera", 88);
        System.out.println(s.getName() + " scored " + s.getMarks());
        s.setMarks(150);
        System.out.println("After invalid set : " + s.getMarks());
        s.setMarks(95);
        System.out.println("After valid set   : " + s.getMarks());
    }
}

class Student
{
    private String name;
    private int marks;

    Student(String n, int m)
    {
        name = n;
        marks = m;
    }

    public String getName()
    {
        return name;
    }

    public int getMarks()
    {
        return marks;
    }

    public void setMarks(int m)
    {
        if (m >= 0 && m <= 100)
            marks = m;
        else
            System.out.println("Marks must be between 0 and 100");
    }
}
Show Answer
Meera scored 88
Marks must be between 0 and 100
After invalid set : 88
After valid set   : 95

150 ko setter ne rok diya, isliye marks 88 hi raha. 95 valid tha, isliye woh andar gaya. Agar marks public hota toh koi bhi s.marks = 150; likh kar yeh jaanch chakma de deta — yahi hai encapsulation ka asli faayda.

How This Chapter Is Examined

CISCE ke Class X syllabus ke anusaar Computer Applications (86) mein ek written paper, do ghante ka, 100 marks hota hai, aur uske alaawa Internal Assessment bhi 100 marks ka, jo poori tarah practical hai aur jismein saal bhar mein kam se kam 20 lab assignments karne hote hain. CISCE ke question paper mein yeh 100 marks do hisson mein bante hain: Section A — 40 marks, jismein saare sawaal karne hote hain, aur Section B — 60 marks, jismein chhe sawaalon mein se koi chaar karne hote hain. Section A khud do sawaalon ka banta hai: Question 1 20 marks ke MCQs, aur Question 2 20 marks ke chhote sawaal — das hisse, har ek 2 marks ka.

Yeh chapter Section A ka pakka mehmaan hai. Access specifiers ki visibility, encapsulation ki definition, class variable aur instance variable ka antar, local variable ki default value — ye sab chhote sawaalon mein aate hain aur inke jawaab ek-do line ke hote hain. Section B ke bade programs mein bhi is chapter ka asar dikhta hai, kyunki wahan data members ko private aur methods ko public likhna hi accha style maana jaata hai.

Exam Tip

Do shabdon mein aksar ghalti hoti hai. Access specifier woh hai jo visibility tay karta hai — private, protected, public. Modifier jaise static ya final visibility nahi, vyavhaar tay karta hai. Sawaal mein “access specifier” likha ho toh static mat likhiye.

Practice Worksheet (10 Questions)

Pehle khud kijiye, phir answer kholiye.

Q1. Define encapsulation. How is it related to data hiding?

Show Answer

Encapsulation is the wrapping up of data and the methods that operate on that data into a single unit, namely a class. Data hiding is the part of encapsulation that keeps the data out of reach from outside the class, achieved by declaring the data members private and providing public methods to work with them. In short: encapsulation binds them together, data hiding controls who may reach them.

Q2. Name the three access specifiers and arrange them in increasing order of visibility.

Show Answer

The three access specifiers are private, protected and public. In increasing order of visibility: private (same class only), then protected (same class, same package and derived classes), then public (everywhere). If default access is also to be placed, it sits between private and protected.

Q3. Distinguish between a class variable and an instance variable.

Show Answer

A class variable is declared with the static keyword and only one copy exists, shared by every object of the class; changing it through one object changes it for all. An instance variable is declared without static and every object gets its own separate copy, so changing it in one object leaves the others untouched. A class variable belongs to the class; an instance variable belongs to the object.

Q4. Give the output.

class DE2
{
    int n = 10;

    void test()
    {
        int n = 20;
        System.out.println("Inside test, n = " + n);
        System.out.println("Data member n = " + this.n);
    }

    public static void main(String args[])
    {
        DE2 ob = new DE2();
        ob.test();
        System.out.println("From main, n = " + ob.n);
    }
}
Show Answer
Inside test, n = 20
Data member n = 10
From main, n = 10

Local n ne data member ko chhupa diya, isliye khaali n ne 20 diya. this.n ne data member ka 10 diya. Local variable method ke saath khatam ho gaya, isliye main() mein 10 hi bacha.

Q5. What error does the compiler give for the code below, and why?

class U1
{
    public static void main(String args[])
    {
        int sum;
        sum = sum + 5;
        System.out.println(sum);
    }
}
Show Answer
U1.java:6: error: variable sum might not have been initialized
        sum = sum + 5;
              ^
1 error

sum ek local variable hai, aur local variables ko default value nahi milti. Line 6 par uski value padhi ja rahi hai jab usmein kuch rakha hi nahi gaya. Sudhaar: int sum = 0; likhiye. Agar sum data member hota toh use apne aap 0 mil jaata aur koi error na aati.

Q6. Why are data members usually made private while methods are made public?

Show Answer

Making data members private prevents any code outside the class from reading or changing them directly, so the object cannot be put into an invalid state by accident. Making methods public provides controlled doorways to that data: the method can check the value before storing it, or format it before returning it. The class therefore decides what may be done to its own data, rather than trusting every other class to be careful.

Q7. Give the output.

class E3
{
    static int classVar = 100;
    int instanceVar = 50;

    void show(int argVar)
    {
        int localVar = 5;
        System.out.println(classVar + " " + instanceVar + " " + argVar + " " + localVar);
    }

    public static void main(String args[])
    {
        E3 a = new E3();
        E3 b = new E3();
        b.instanceVar = 77;
        E3.classVar = 200;
        a.show(9);
        b.show(9);
    }
}
Show Answer
200 50 9 5
200 77 9 5

classVar dono baar 200 — ek hi copy sabke liye. instanceVar 50 aur 77 — alag-alag copies. Argument aur local dono baar wahi, kyunki har call unhein naye sire se banata hai.

Q8. Write a class Account with a private int balance, a constructor, a public getter, and a public deposit(int) method that rejects amounts that are zero or negative. Show it being used.

Show Answer
class E1
{
    public static void main(String args[])
    {
        Account a = new Account(500);
        a.deposit(250);
        System.out.println("Balance = " + a.getBalance());
        a.deposit(-100);
        System.out.println("Balance = " + a.getBalance());
    }
}

class Account
{
    private int balance;

    Account(int b)
    {
        balance = b;
    }

    public int getBalance()
    {
        return balance;
    }

    public void deposit(int amt)
    {
        if (amt > 0)
            balance = balance + amt;
        else
            System.out.println("Deposit must be positive");
    }
}

Output:
Balance = 750
Deposit must be positive
Balance = 750

Dhyaan dijiye ki getBalance() ek pure (accessor) method hai aur deposit() impure (mutator), kyunki woh object ki state badalta hai.

Q9. A student declares a data member as private and then tries obj.member = 5; from another class. What happens? Give the fix.

Show Answer

The program does not compile. The compiler reports that the member has private access in that class, because a private member is visible only inside the class that declares it. The fix is to add a public setter method inside the class, for example public void setMember(int m) { member = m; }, and call obj.setMember(5); instead. Simply changing the member to public would also compile, but it defeats data hiding and is not the expected answer.

Q10. Name the four kinds of variables listed in the syllabus and state where each is declared.

Show Answer

(i) Class variable — declared inside the class with the static keyword; one shared copy. (ii) Instance variable — declared inside the class without static; each object has its own copy. (iii) Argument variable — declared in the brackets of a method or constructor; exists only for the duration of that call. (iv) Local variable — declared inside the body of a method or block; exists only within that block and receives no default value.

↑ Back to top

Aage kya? Ab tak har cheez ek-ek value ke saath thi — ek int, ek String. Agla padav hai arrays, jahan ek hi naam ke neeche saikdon values rakhi jaati hain, aur unhein dhoondhna aur sajaana sikhaya jaata hai. Peeche jaana ho toh Library Classes aur Constructors dobara dekh lijiye.

Kaizen: Aaj se jo bhi class likhiye, uske har data member ke aage private lagaiye — bina soche, aadat ke taur par. Phir jab program chalane par error aaye, tab ek getter ya setter jodiye. Ek hafte mein aapko khud dikhega ki aapke programs mein galat values ghusna band ho gayi hain, aur examiner ko bhi yahi style chahiye.

Written & reviewed by Team Principal Saab — Meet the team →