Java的封装

来源:互联网 发布:mysql安装教程 编辑:程序博客网 时间:2024/06/03 21:03
速记:
顺序:public---->protected---->friendly(默认)---->private

快速重构source---->Generate getters and setters----->选择

说明
构造方法:用于实例化,初始化对象
setter函数:用于修改类的对象的成员变量的值

类的成员变量不需要初值,在构造函数中初始化

内部类相当于私有的

练习代码:Petshop,PetShopPrac1
内部类:ClassInner

整理:
为什么为什么要使用封装
下面代码有什么问题?
Dog d = new Dog(); 
d.health = 1000;  //不合理的赋值
为了不让别人任意修改值,因使用封装

什么是封装
封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 
封装的好处 
1、只能通过规定方法访问数据
 2、隐藏类的实现细节
3、方便加入控制语句
4、方便修改实现
封装的方法 
1、将成员变量声明为私有的(private)
2、再提供一个或多个公有(public)setXX() 和getXX()方法实现对该成员变量的访问和修改。 
3、类中的私有成员变量/成员方法只能在该类内部调用,不能通过该类的对象调用。  

内部类(nested classes) 
一、将一个类定义置入另一个类定义中就叫作“内部类”
class Outer{ 
    int outer_i = 100; 
    void test(){        
    Inner in = new Inner();        
    in.display(); }
      
    class Inner{ 
    Outter out = new Outter();
     void display(){              
     System.out.println("display: outer_i = " + outer_i);          
    } 
    }
 } 
1.Inner类是在Outer内部定义的 
2.在Inner类中可以访问Outer类中 的成员属性outer_I; 
3.在Outer类中可在方法test()中创建 内部类Inner的对象;
 4.通过Outer类的对象调用test() 方法最终就可以执行Inner类中的方法

二、类中定义的内部类特点 
1、内部类可以直接访问外部类的成员,反之则不行。
 2、内部类可以声明为private或protected。 
3、内部类成员只有在内部类的范围之类是有效的。 
4、非静态的内部类会持有外部类的一个隐式引用,当外部类被销毁后, 内部类仍然持有它的引用, 导致外部类无法被垃圾收集.静态的内部类不会持有外部类的引用  

private内部类和static内部类
一、private内部类调用方式: 
1、在外部类的方法中实例化内部类,并调用自己的方法 
2、实例化外部类,并调用包含内部类的方法

二、static内部类
一、定义格式 修饰符 static class name{ }
 static内部类特点: 
1、static内部类可以象一个普通外部类一样直接创建该对象。
2、static内部类只能访问外部类中的静态成员或方法。 
3、static内部类可以声明static成员,但非static的内部类不可以。 
4、修饰符没有任何限制。
二、例子
public class StaticInnerDemo {
     String name = "Tom";
     void PrintName(){
             System.out.println(" Outer name : "+name);
      }     
      public static class Inner{
            int age = 10;
            void PrintAge(){
            System.out.println(" inner age : "+age);
           }
      }     
public static void main(String[ ] args){
            Inner inner = new Inner();
            inner.PrintAge();
     } 
说明:
1.Inner为静态内部类。 
2.Inner不能访问name属 性和PrintName()方法。 
3.在外部类中可以直接创建 该类的对象 

内部类如何被外部类引用 
将内部类声明为非private的就可以通过外部类创建一个内部类的对象引用,并可通过该引用调用内部类自己定义的方法。
eg:
 OuterClass outer = new OuterClass();
 OuterClass.InnerClass inner = outer.new InnerClass ();

方法和作用域中的内部类 
内部类并非只能在类里定义,也可以在几个程序块的范围之内定义内部类。

匿名类
匿名类是不能有名字的类,它们不能被引用,只能在创建时用New语句来声明它们。匿名类的声明是在编译时进行的,实例化在运行时进行。(疑问)
Java允许直接用接口名和一个类体创建一个匿名对象(疑问)
 












 
 

 












0 0