面向对象第十九课,内部类详解
来源:互联网 发布:云计算相关论文 编辑:程序博客网 时间:2024/06/03 22:44
内部类(innerclasses):在类里边定义的类
一般情况,我们把类定义成独立的但愿。这些情况下,我们把一个类放在另一个类的内部定义,称为内部类。
内部类的作用
- 内部类提供了更好的封装。只能让外部类直接访问,不允许统一个包中的其他类直接访问。
- 内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。但外部类不能访问内部类的内部属性。
内部类的使用场合
由于内部类提供了更好的封装特性,并且可以很方便的访问外部类的属性。所以,通常内部类在只为所在外部类提供服务的情况下优先使用。
内部类的分类:
1、成员内部类(可以使用private、proteted、public任意进行修饰。类文件:外部类$内部类.class)
a)非静态内部类(外部类里使用非静态内部类和平时使用其他类没什么不同)。
- 非静态内部类必须寄存在一个外部类对象里。因此,如果有一个非静态内部类对象那么一定存在对应的外部类对象。非静态内部类对象属于外部类的某个对象。
- 非静态内部类可以i使用外部类的成员,但是外部类不能直接访问非静态内部类成员。
- 非静态内部类不能有静态方法、静态属性、静态初始化快,只能定义普通方法、普通类、普通属性
- 静态成员不能访问非静态成员:外部类的静态方法、静态代码快不能访问非静态内部类,包括不能使用费静态内部类定义变量、创建实例。
- 成员变量访问格式:1、内部类里方法的局部变量:变量名。2、内部类属性:this.变量名。3、内部类属性:外部类名.this.变量名
- 内部类的访问:1、外部类中定义内部类写法:new 内部类名(); 2、外部类以外的地方使用非静态内部类的写法:
face f = new face();face.Nose fn = f.new Nose();
b)静态内部类。
定义方式:
使用要点:
static class Ear{}
- 当一个静态内部类对象存在,并不一定存在对应的外部类对象。因此,静态内部类的实例方法不能直接访问外部类的实例方法。
- 静态内部类看做外部类的一个静态成员。因此,外部类的方法中可以通过:静态内部类.名字 访问静态内部类的静态成员。通过new静态内部类()访问静态内内部类。
- 在外部类的外面创建内部类:
face.Ear fe = new face.Ear();fe.listen();
总结:
- 普通的成员内部类,他可以访问外部类的普通的属性、方法。
- 普通的成员内部类,可以看过外部类的一个普通的属性,他可以直接去访问内容,普通内部类必须寄宿在普通外部类里边,现有外部类对象才有内部类对象
- 静态内部类,加了static修饰,他存在,他的外部类不一定要存在,不能访问外部类里的普通属性,普通属性从属于对象,但是可以访问外部类里的静态属性和静态方法。
package com.pkushutong.oop.innerclasses;public class TestFace {public static void main(String[] args) {face f = new face();face.Nose fn = f.new Nose();fn.breathe();face.Ear fe = new face.Ear();fe.listen();}}/** * 外部类调用内部类 * * @author dell * */class face {int type;/** * 内部类定义 * * @author dell * */class Nose {String type;void breathe() {//调用外部类属性System.out.println(face.this.type);System.out.println("呼吸");}}/** * 静态内部类定义 */static class Ear{void listen(){//静态内部类的实例方法不能直接访问外部类的实例方法。System.out.println(type);System.out.println("呼吸");}}}
0 0
- 面向对象第十九课,内部类详解
- 面向对象--内部类
- 面向对象-内部类
- 面向对象-内部类
- 面向对象--内部类
- 面向对象 第七课 内部类
- 【第十九课】GUI---内部类的使用
- 51_面向对象_24_内部类详解
- 面向对象_内部类
- (9)面向对象内部类
- javaSE-面向对象-内部类
- 面向对象(静态内部类)
- 面向对象 object 内部类
- day04--面向对象--内部类
- java面向对象内部类
- 面向对象-四大内部类
- Java面向对象-内部类
- 面向对象---匿名内部类
- Java笔记----3. 流程控制与数组
- 用求解图内节点是否可达的算法来解决IFDS问题
- 大数据
- leetcode Permutations
- html5tricks.com
- 面向对象第十九课,内部类详解
- DebugView原理及应用
- 码农场 » POJ 2914 Minimum Cut 题解 《挑战程序设计竞赛》
- C++ 顺序容器 STL list类
- UVa 1591 - Data Mining(暴力)
- 数据库_Java与数据库数据类型对应表
- WSO2 ——(9)ESB功能:数据转换
- MVC理解
- 通用线程: 学习 Linux LVM -“逻辑卷管理”为存储器管理带来的魔力 (1)