跟我学JAVA / 第四课:深入Java类——类的封装,嵌套类与内部类

2018-03-08

本章我们将学到的知识点:

1、类的访问限制   2、类的封装   3、嵌套类与内部类

一.访问权限:

java中四种不同的限定词限定的成员(成员变量或成员方法),访问权限由大到小依次为:

1、public 公共的 可以被所有的类访问。

2、protected 受保护的 可以被这个类本身访问。 被它的子类(同一个包以及不同包中的子类)访问。 同一个包中的所有其他的类访问。

3、默认的/友好的 被这个类本身访问。 被同一个包中的类访问。

4、private 私有的 只能被这个类本身访问。 如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。

java中类的限定词的作用范围比较:

 

二、实现类的封装:

封装:将成员变量声明为私有的(private),再提供一个或多个公有(public)setXX() 和getXX()方法实现对该成员变量的访问和修改。

类中的私有成员变量/成员方法只能在该类内部调用,不能通过该类的对象调用。

封装的目的:隐藏类的实现细节; 让使用者只能通过指定的方法访问数据,可以方便加入控制逻辑,限制不合理的操作; 便于修改,增强代码可维护性; 可进行数据检查。

三、内部类(nested classes):

 

将一个类定义置入另一个类定义中就叫作“内部类”。

利用它可对那些逻辑上相互联系的类进行分组 并可控制一个类在另一个类里的“可见性”。

内部类对象保存了一个对外部类对象的引用。

OuterClassName.this代表外部类对象的引用

InnerClassName.this代表内部类对象的引用

 

内部类 –类中定义的内部类:

1、Inner类是在Outer内部定义的;

2、在Inner类中可以访问Outer类中 的成员属性outer_I;

3、在Outer类中可在方法test()中创建 内部类Inner的对象;

4、通过Outer类的对象调用test() 方法最终就可以执行Inner类中的方法。

class Outer{
  int outer_i = 100;
  void test(){
       Inner in = new Inner();
       in.display();
  }
    
  class Inner{
      void display(){
             System.out.println("display: outer_i = " + outer_i);
         }
  }
}

在内部类对象保存了一个对外部类对象的引用,当内部类的成员方法中访问某一变量时,

如果在该方法和内部类中都没有定义过这个变量,内部类中对this的引用会被传递给那个外部类对象的引用。

类中定义的内部类特点:

1、内部类可以直接访问外部类的成员,反之则不行。

2、内部类可以声明为private或protected。

3、内部类成员只有在内部类的范围之类是有效的。

private内部类调用方式: 在外部类的方法中实例化内部类,并调用自己的方法 实例化外部类,并调用包含内部类的方法。

static内部类,特点:

定义格式 修饰符 static class name{ }

static内部类可以象一个普通外部类一样直接创建该对象。

static内部类只能访问外部类中的静态成员或方法。

static内部类可以声明static成员,但非static的内部类不可以。 修饰符没有任何限制。

1、Inner为静态内部类。 2、Inner不能访问names属 性和PrintName()方法。 3、在外部类中可以直接创建 该类的对象。

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();
    }
}

内部类如何被外部类引用;

将内部类声明为非private的就可以通过外部类创建一个内部类的对象引用,并可通过该引用调用内部类自己定义的方法。

声明调用方法:

OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass ();

方法和作用域中的内部类:

内部类并非只能在类里定义,也可以在几个程序块的范围之内定义内部类。

特点: 可访问外部类的成员变量。 只能访问所在方法中的final类型的局部变量,因为用final定义的局部变量相当于一个常量,它的生命周期超出方法运行的生命周期。

该类型的内部类调用方法:

//直接通过外部类来调用内部类所在的方法。
OuterClass.innerOfOuterMethod( );
public class InOut {
     String str = new String("Between");
     public void amethod(final int iArgs) {
           fianl  int a = 12;
           class Bicycle {
                public void sayHello() {
                     System.out.println(str);
                     System.out.println(a);
                     System.out.println(iArgs);
                 } 
            }
             
            Bicycle bicycle = new Bicycle();
           bicycle.sayHello();
      }
}

1、str为外部类的成员变量。 2、iArgs和 a都是方法amethod 的局部final变量。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值