Java——4种访问权限、4种内部类

本文详细介绍了Java中的四种访问权限:public、protected、默认和private的范围比较,以及四种内部类:成员内部类、静态内部类、局部内部类和匿名内部类的特性和使用方法。对于内部类,讲解了它们如何访问外部类的变量和方法以及实例化规则。

1.访问权限

范围比较:public > protected > 默认 > private
  • 属性\方法:这4个都能去修饰
  • 类:public、默认可以去修饰
  • 接口:public、默认可以去修饰
修饰符同类同包子类任意位置
public
protected×
默认××
private×××

2.Java的内部类有哪些

Java的四种内部类

1.成员内部类
  • 不能存在static关键字;
  • 可以直接访问外部类变量、方法;
  • 外部类必须先new一个内部类,才能访问其变量、方法;
public class Main {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.testOut();
        访问成员内部类的方法时
        Outer.Inner inner = new Outer().new Inner();
        inner.testIn();
    }
}


class Outer{
    private String Outname = "outer";

    public void testOut(){
        必须先new,才能访问成员内部类的变量,而且可以访问其private修饰的变量
        System.out.println("外部类输出:"+new Inner().name);
    }

    class Inner{
        private String name = "inner";
        public int age = 10;
        public void testIn(){
            System.out.println("成员内部类输出:"+Outname);
        }
    }
}
2.静态内部类
  • 1.外部类通过类名.变量名,访问 静态内部类 的 静态变量
  • 2.外部类先new一个静态内部类实例,再访问 实例变量
  • 3.直接访问外部类的静态变量
  • 4.先new一个外部类实例,再访问其 实例变量
public class Main {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.testOut();
        new 1 个静态内部类 实例
        Outer.Inner inner = new Outer.Inner();
        inner.testIn();
    }
}


class Outer{
    private static String Outname = "outer";
    private int age = 20;

    public void testOut(){
        1.外部类通过类名.变量名,访问 静态内部类 的 静态变量
        System.out.println("外部类输出:"+Inner.name);
        2.外部类先new一个静态内部类实例,再访问 实例变量
        System.out.println("外部类输出:"+new Inner().age);
    }

    static class Inner{
        private static String name = "inner";
        public int age = 10;
        public static void testIn(){
            3.直接访问外部类的静态变量
            System.out.println("成员内部类输出:"+Outname);
            4.new一个外部类实例,再访问其 实例变量
            System.out.println("成员内部类输出:"+new Outer().age);
        }
    }
}
3.局部内部类

定义在代码块、方法体内、作用域(使用花括号“{}”括起来的一段代码)内的类叫局部内部类。

  • 不能有static关键字
4.匿名内部类
  • 不能有static关键字
  • 独特之处
    • 1.匿名内部类是内部类的一种特殊情况。它只有一个实例,而且没有引用。所以,一般在能用内部类实现,但是实例只用一次的情况下使用它(可以减少资源开销);
    • 2.想要定义匿名内部类:需要前提,内部类必须继承一个类或者实现 接口
public class Main {
    1.接口
    interface HelloWorld {
        public void greet();
        public void greetSomeone(String someone);
    }
    public static void main(String[] args) {

        2.匿名内部类实现
        HelloWorld hello = new HelloWorld() {
            2.1.不能有static关键字
            // public static int age = 10;
            @Override
            public void greet() {
                System.out.println("你好……");
            }

            @Override
            public void greetSomeone(String someone) {
                System.out.println("你好,"+someone);
            }
        };

        3.调用
        hello.greet();
        hello.greetSomeone("李焕英……");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值