/**
* <p>
* 内部类说明<br/>
*
* @className Outer.java<br/>
* 类是用于描述事物的,内部类可以直接访问外部类的成员
*/
public class Outer {
private int x = 3;
private static int y = 4;
class Inner {
private int z = 0;
void function() {
System.out.println("Outer:" + x);// System.out.println("Outer:"+Outer.this.x);
}
}
static class Inner2 {
void function() {
System.out.println(y);
}
}
private class Inner3 { // 内部类可以用private修饰(类可以被private修饰),外部调用,只能通过提供方法供外部访问
int m = 0;
void function() {
System.out.println("Outer:" + m);// System.out.println("Outer:"+Outer.this.x);
}
}
//提供外部访问Inner3的方法
public void showInner3(){
Inner3 i = new Inner3();
i.function();
}
public static void main(String[] args) {
Inner i = new Outer().new Inner();
i.function();
System.out.println(i.z);
// 外部其他类中访问内部类
Outer.Inner in = new Outer().new Inner();
in.function();
Inner2 inn = new Outer.Inner2();// 内部类被static修饰
inn.function();
}
}
/**<p>匿名内部类<br/>
* @className Outer2.java<br/>
*/
public class Outer2{
public static void main(String[] args) {
OuterTz o = new OuterTz();
o.method();
}
}
class OuterT {
private int x = 3;
void mehtod(){
final int x = 4;
class Inner{//内部类可在任意位置,此在局部
void function(){
System.out.println("Outer:"+x);//System.out.println("Outer:"+Outer.this.x);
}
}
Inner i = new Inner();
i.function();
}
}
class OuterTs {
private int x = 3;
void mehtod(){
final int x = 4;
class Inner{//局部内部类访问局部成员变量,要加final修饰
void function(){
System.out.println("Outer:"+x);//System.out.println("Outer:"+Outer.this.x);
}
}
Inner i = new Inner();
i.function();
}
}
//抽象类(匿名内部类要继承抽象类或实现接口,一般有一个两个的抽象方法)
abstract class AbsDemo{
abstract void show();
}
class OuterTz{
void method(){
class Inner extends AbsDemo{
void show() {
System.out.println("复写父类的方法");
}
}
Inner i = new Inner();
i.show();
}
}
class OuterTz1{
void method(){
/*
class Inner extends AbsDemo{
void show() {
System.out.println("复写父类的方法");
}
}
Inner i = new Inner();
i.show();
*/
new AbsDemo(){ //这就是匿名内部类:匿名子类,
void show() {
System.out.println("复写父类的方法");
}
void function(){
System.out.println("多态方法");
}
};
AbsDemo ab = new AbsDemo(){ //这就是匿名内部类:匿名子类,可以简写代码
void show() {
System.out.println("复写父类的方法");
}
void function(){
System.out.println("多态方法");
}
};
ab.show();
//ab.funcion();编译出错
new AbsDemo(){ //这就是匿名内部类:匿名子类,
void show() {
System.out.println("复写父类的方法");
}
void function(){
System.out.println("多态方法");
}
}.show();
new AbsDemo(){ //这就是匿名内部类:匿名子类,
void show() {
System.out.println("复写父类的方法");
}
void function(){
System.out.println("多态方法");
}
}.function();
}
}