1.访问权限
范围比较:public > protected > 默认 > private
- 属性\方法:这4个都能去修饰
- 类:public、默认可以去修饰
- 接口:public、默认可以去修饰
| 修饰符 | 同类 | 同包 | 子类 | 任意位置 |
|---|---|---|---|---|
| public | √ | √ | √ | √ |
| protected | √ | √ | √ | × |
| 默认 | √ | √ | × | × |
| private | √ | × | × | × |
2.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("李焕英……");
}
}
本文详细介绍了Java中的四种访问权限:public、protected、默认和private的范围比较,以及四种内部类:成员内部类、静态内部类、局部内部类和匿名内部类的特性和使用方法。对于内部类,讲解了它们如何访问外部类的变量和方法以及实例化规则。
3632

被折叠的 条评论
为什么被折叠?



