Java中的内部类

普通内部类

  1. 外部类不能访问普通内部类属性和方法
  2. 普通内部类可以访问外部类属性和方法
  3. 创建普通内部类的时候必须创建外部类

静态内部类

  1. 静态内部类可以访问外部类静态属性和方法
  2. 静态内部类不能访问外部类非静态属性和方法
  3. 外部类不能访问静态内部类的属性和方法

示例代码:

public class A {

    private Integer a;
    private static Integer s = 10;

    public A() {
    }

    public A(Integer a) {
        this.a = a;
    }

    public void funA1() {
        System.out.println(a);
        // 外部类不能访问内部类属性
        System.out.println(aa);
    }

    public void funA2() {
        // 外部类不能访问内部类方法
        funAA1();
    }

    public static void funA3() {
        System.out.println(s);
    }

    // 普通内部类
    protected class AA {
        private Integer aa;

        public AA() {
        }

        public AA(Integer aa) {
            this.aa = aa;
        }

        public void funAA1() {
            // 内部类能访问外部类属性
            System.out.println(a);
            System.out.println(aa);
        }

        public void funAA2() {
            // 内部类能访问外部类方法
            funA1();
        }
    }

    // 静态内部类
    protected static class BB {
        private static Integer ss = 100;
        private Integer bb;

        public void funBB1() {
            // 内部类能访问外部类静态属性
            System.out.println(s);
            System.out.println(ss);
            // 内部类不能访问外部类非静态属性
            System.out.println(a);
        }

        public void funBB2() {
            // 内部类静态方法不能访问外部类非静态方法
            funA1();
            // 内部类静态方法能访问外部类静态方法
            funA3();
        }
    }
}

内部类实现多继承

示例代码:

public abstract class House {

    protected void keeping() {
        System.out.println("我是房子,我可以遮风挡雨!!!");
    }
}
public abstract class Person {
    public void  doing() {
        System.out.println("我是人,我可以做任何事!!!");
    }
}
public class kitchen extends House {
    private Cooker cooker;

    public kitchen() {
        this.cooker = new Cooker();
    }

    private void kitchenware() {
        System.out.println("我是厨房,我可以提供厨具!!!");
    }

    public void cooking() {
        this.cooker.cooking();
    }

    protected class Cooker extends Person {
        void cooking() {
            keeping();
            kitchenware();
            doing();
            System.out.println("我是厨师,有了房子和厨具,我可以做饭!!!");
        }
    }
}

测试代码:

public class Test {
    public static void main(String[] args){
        A.AA aa = new A(1).new AA(2);
        aa.funAA1();
        aa.funAA2();

        kitchen kitchen = new kitchen();
        kitchen.cooking();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值