一、类和对象分配内存

  

二、Java中的内部类  : 可以直接去访问外部类的所有属性(包括私有成员)

  1.Java中成员内部类

  (1).内部类的方法可以直接访问外部类的类中的所有成员变量

  (2).外部类不能直接去访问内部类的私有的成员变量,可以通过创建内部类的对象取间接的去访问

  (3)外部去声明内部类的方法   即:外部类.内部类 对象名 = new 外部类对象.new 内部类( );

    Inter.Inter1  inter = new Inter().new Inter1();

  (4).如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法

     如果要访问外部类的成员变量,可以使用 外部类的对象.this 关键字

      public class HelloWorld{
      //外部类的私有属性name
      private String name = "imooc";
      //外部类的成员属性
      int age = 20;
      //成员内部类Inner
      public class Inner {
      String name = "爱慕课";
      //内部类中的方法
      public void show() {
      System.out.println("外部类中的name:" + HelloWorld.this.name);
      System.out.println("内部类中的name:" + name);        //默认为内部类成员变量
      System.out.println("外部类中的age:" + age);
    }
  }  
      //测试成员内部类
      public static void main(String[] args) {
      //创建外部类的对象  
      HelloWorld o = new HelloWorld ();
      //创建内部类的对象
      Inner inn = o.new Inner();
      //调用内部类对象的show方法
      inn.show();
    }
  }

  (5).方法中的内部类

  1. class InterNumber{
    public void printf(final int num){
    final int num1 = 0;
    class InterNumber1{
    public void println(){
    System.out.printf(""+num);
    System.out.printf(""+num1);
    }
    }
    }
  2.  
  3. }
    方法中的内部类想访问该方法的参数以及成员变量,必须加上final这个关键字,它的作用只是起到一个标记的作用

    

    

  2.Java中静态内部类

  (1).静态内部类不能直接访问外部类的非静态成员(因为没有this这个指针),但可以通过 new 外部类().成员 的方式访问

  (2).如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员

  (3).创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类()

  1. public class MyClass {
  2.  
  3. // 外部类中的静态变量score
    private static int score = 84;
    private int sum = 10;
    // 创建静态内部类
    public static class SInner {
    public void show() {
    System.out.println("访问外部类中的score:" + MyClass.score);
    System.out.println("访问内部类中的sum:" + new MyClass().sum);
    }
    }
  4.  
  5. // 测试静态内部类
    public static void main(String[] args) {
    // 直接创建内部类的对象
    SInner si = new SInner();
    // 调用show方法
    si.show();
    }
    }
  6.  
  7. 3.Java 中的方法内部类
    由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和static修饰符
  1. public class MyClass {
    private String name = "爱慕课";
    // 外部类中的show方法
    public void show() {
    // 定义方法内部类
    class MInner {
    int score = 83;
    public int getScore() {
    return score + 10;
    }
    }
  2.  
  3. // 创建方法内部类的对象
    MInner mi = new MInner();
    // 调用内部类的方法
    int newScore = mi.getScore();
    System.out.println("姓名:" + name + "\n加分后的成绩:" + newScore);
    }
    // 测试方法内部类
    public static void main(String[] args) {
    // 创建外部类的对象
    MyClass mo = new MyClass();
    // 调用外部类的方法
    mo.show();
    }
    }
  4.  
  1.   

Java基础学习篇---------封装的更多相关文章

  1. Java基础学习篇---------继承

    一.覆写(重写) 1.含义:子类的定义方法.属性和父类的定义方法.属性相同时候 方法名称相同,参数相同以及参数的个数也相同,此时为覆写(重写) 扩充知识点: 覆盖:只有属性名字和方法名字相同,类型.个 ...

  2. Java基础学习篇---------this、object的学习

    一.this的学习方法 1.使用this调用构造方法市一定放在构造方法的首行 2.使用this调用构造方法时一定流出调用的出口 public class MyClass { public MyClas ...

  3. Java基础学习篇---------String、集合的学习

    一.String常用的方法: 1. == 实质比较两个对象的地址数值 String a = "hello"  (hello为匿名对象) String a1 = "hell ...

  4. Java基础学习篇---------static

    一.static的使用 1.使用static定义的属性往往通过类名直接调用,它的属性(方法)不属于某一个的对象的.所以对象没有创建之前就可以对static的属性的调用,方法亦如此. 2.static ...

  5. Java基础学习篇---------多态

    一.多态性的理解 1.向上转型:子类为父类对象实例化,调用的一定是子类覆写的方法,他们之间找的是共性 2.向下转型:子类扩充了父类的某些功能,而父类中没有该功能,他们之间找的是特性 案例: Numbe ...

  6. Java基础学习篇---------多线程

    一.编写两种多线程的方法 (1).Thread(它是继承Runnable的子类) class MyThread extends Thread{ private int ticket = 5; @Ove ...

  7. Java基础学习-- 继承 的简单总结

    代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...

  8. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  9. Java基础学习(2)

    Java基础学习(二) 面向对象 对象:客观存在的事物 面向对象:人具体关注的事物的某些信息 类:是模子,确定对象会拥有的特征(属性)和行为(方法) 对象的属性:对象具有的各种特征 对象的方法:对象能 ...

随机推荐

  1. php下ajax的文件切割上传

    html5中的File对象继承Blob二进制对象,Blob提供了一个slice函数,可以用来切割文件数据. <!DOCTYPE HTML> <html lang="zh-C ...

  2. Spring框架的特点

    1. 为什么要学习Spring的框架 * 方便解耦,简化开发 * Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理 * AOP编程的支持 * Spring提供面向切面 ...

  3. SqlServer中批量update

    现在我有两张表分别是S_PERSON,S_USER S_PERSON S_USER 我现在想把S_USER表中的ACCOUNT批量修改成S_PERSON的ACCOUNT 我们可以发现S_USER表中有 ...

  4. docker实战

    docker基础入门 docker网络

  5. db2 查看表空间使用率

    1. 统计所有节点表空间使用率 select substr(TABLESPACE_NAME,1,20) as TBSPC_NAME,bigint(TOTAL_PAGES * PAGE_SIZE)/10 ...

  6. Vue.js (Frontend & Backend)尝试前后端分离

    前言 前端用什么框架都可以,这里选择小巧的vuejs. 要实现的功能很简单:1.登录功能,成功将服务器返回的token存在本地2.使用带token的header访问服务器的一个资源 本次实验环境: & ...

  7. 让IIS 7 如同IIS 8 第一次请求不变慢

    当我们把网站部署在IIS7或IIS6S的时候,每当IIS或是Application Pool重启后,第一次请求网站反应总是很慢,原因大家都知道(不知道可以参考这个动画说明ASP.NET网页第一个Req ...

  8. JSONModel简便应用

    JSONModel, Mantle 这两个开源库都是用来进行封装JSON->Model的, 想想看, 直接向服务器发起一个请求,然后回来后,就是一个Model, 直接使用, 这是一个多么美好的事 ...

  9. 633. Sum of Square Numbers

    static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...

  10. 2018.10.19 bzoj1057: [ZJOI2007]棋盘制作(悬线法)

    传送门 悬线法板题. 如果只求最大矩形面积那么跟玉蟾宫是一道题. 现在要求最大正方形面积. 所以每次更新最大矩形面积时用矩形宽的平方更新一下正方形答案就行了. 代码: #include<bits ...