回顾
14.1.3 对象签名hashcode()
14.1.4 使用Object接收任意引用数据类型对象
学习小结
14.2 内部类
内部类即在一个类的内部有定义了其他类的情况。
14.2.1 内部类的基本定义
内部类的定义格式如下:
标识符 class 外部类的名称{
// 外部类成员
标识符 class 内部类的名称{
// 内部类成员
}
}
内部类作用:
①内部类提供更好的封装;
②内部类成员可直接访问外部类的私有数据;
③匿名内部类适合用于创建仅需要一次的类。
范例 14-8:内部类的使用
package com.Javastudy2;
/**
* @author Y.W.
* @date 2018年3月9日 下午11:23:45
* @Description TODO 内部类的使用
*/
public class P362_14_8 {
public static void main(String[] args) {
Outer outer = new Outer();
outer.inst();
}
}
class Outer {
int score = 95;
void inst() {
Inner in = new Inner();
in.display();
}
public class Inner {
// 在内部类中声明name属性
String name = "张三";
void display() {
System.out.println("成绩:score = " + score); // 输出外部类中的属性
}
}
}
运行结果:
14.2.2 使用static定义的内部类就是外部类
使用static定义的内部类就是外部类,也称静态内部类。
范例 14-9:用static声明的内部类访问非static的外部类属性
package com.Javastudy2;
/**
* @author Y.W.
* @date 2018年3月9日 下午11:35:49
* @Description TODO 用static声明的内部类访问非static的外部类属性
*/
public class P363_14_9 {
public static void main(String[] args) {
StaticInnerClassTest outer = new StaticInnerClassTest();
outer.display();
}
}
class StaticInnerClassTest {
private int prop1 = 5;
private static int prop2 = 9;
void display() {
StaticInnerClass in = new StaticInnerClass();
in.display();
}
static class StaticInnerClass {
// 静态内部类里可以包含静态成员
private static int age;
public void display() {
// 下面代码报错
// 静态内部类无法访问外部类的实例成员
System.out.println(prop1);
// 下面代码正常
System.out.println(prop2);
}
}
}
运行结果:
注释报错行运行
规则:静态成员不能访问非静态成员。
14.2.3 在方法中定义内部类
范例 14-10:在方法中定义内部类
package com.Javastudy2;
/**
* @author Y.W.
* @date 2018年3月9日 下午11:51:06
* @Description TODO 在方法中定义内部类
*/
public class P365_14_10 {
public static void main(String[] args) {
InnerClassTest outer = new InnerClassTest();
outer.inst();
}
}
class InnerClassTest {
int score = 95;
void inst() {
class Inner {
void display() {
System.out.println("成绩:score = " + score);
}
}
Inner in = new Inner();
in.display();
}
}
运行结果:
思考
内部类;静态成员不能访问非静态成员。
记于2018年3月10日00:02:50
Yvan