一、类和对象分配内存

  

二、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).方法中的内部类

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);
}
}
} }
方法中的内部类想访问该方法的参数以及成员变量,必须加上final这个关键字,它的作用只是起到一个标记的作用

    

    

  2.Java中静态内部类

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

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

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

public class MyClass {

    // 外部类中的静态变量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);
}
} // 测试静态内部类
public static void main(String[] args) {
// 直接创建内部类的对象
SInner si = new SInner();
// 调用show方法
si.show();
}
} 3.Java 中的方法内部类
由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和static修饰符
public class MyClass {
private String name = "爱慕课";
// 外部类中的show方法
public void show() {
// 定义方法内部类
class MInner {
int score = 83;
public int getScore() {
return score + 10;
}
} // 创建方法内部类的对象
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();
}
}
  

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. 使用Linux之安装jdk 7

    工具/原料   jdk7源码安装压缩包 方法/步骤     卸载OpenJDK rpm -qa | grep java rpm -e --nodeps java-1.6.0-openjdk-1.6.0 ...

  2. linux用户和组

    1.用户隶属于用户组的. 2.用户与用户组配置文件 1)用户组配置文件 /etc/group 第一列:用户组的组名 第二列:组密码(真正的密码存储在了gshadow中) 第三列:用户组组ID,用户组唯 ...

  3. .NET资源文件实现多语言切换

    1.创建对应的资源文件 lang.en.resx  英文 lang.resx   中文,默认 lang.zh-tw.resx  繁体 首先说明,这三个文件前面部分名称需要一样,只是 点 后面的语言代号 ...

  4. Mina 系列(二)之基础

    Mina 系列(二)之基础 Mina 使用起来多么简洁方便呀,就是不具备 Java NIO 的基础,只要了解 Mina 常用的 API,就可以灵活使用并完成应用开发. 1. Mina 概述 首先,看 ...

  5. Task构造

    //原文:http://www.tuicool.com/articles/IveiQbQ 创建并且初始化Task 使用lambda表达式创建Task Task.Factory.StartNew(() ...

  6. c++中如何定义编译期间常量,即这个常量可以用于定义数组下标

    在c++中,类里面的成员变量不仅仅可以被const修饰,还可以被static const修饰,此时一个内建类型(如int ,char ,long等)的static const 可以看做是一个编译期间的 ...

  7. 2018.10.15 loj#6010. 「网络流 24 题」数字梯形(费用流)

    传送门 费用流经典题. 按照题目要求建边. 为了方便我将所有格子拆点,三种情况下容量分别为111,infinfinf,infinfinf,费用都为validi,jval_{id_{i,j}}valid ...

  8. 2018.08.18 NOIP模拟 travel(贪心)

    Travel 题目背景 SOURCE:NOIP2015-SHY4 题目描述 小 A 要进行一次旅行.这回他要在序号为 1 到 n 的 n 个城市之间旅行.这 n 个城市之间共有 m 条连接两个城市的单 ...

  9. 2018.07.31洛谷P1552 [APIO2012]派遣(可并堆)

    传送门 貌似是个可并堆的模板题,笔者懒得写左偏堆了,直接随机堆水过.实际上这题就是维护一个可合并的大根堆一直从叶子合并到根,如果堆中所有数的和超过了上限就一直弹直到所有数的和不超过上限为止,最后对于当 ...

  10. Django入门与实践-第19章:主题回复(完结)

    http://127.0.0.1:8000/boards/1/topics/1/reply/ http://127.0.0.1:8000/boards/1/topics/1/ #myproject/u ...