Java面试知识点(十四)java文件中的同级类、内部类、匿名内部类

一、.java 文件中可以有几个同级类?

在一个.java 文件中可以有多个同级类(和 public 一样的位置,注意不是内部类). 其修饰符只可以 public/abstract/final/和无修饰符,不能是其他的 protected/private 等修饰符。所以 protected 类虽然可以在包内访问,但是也必须定义在另外类里面,protected 主要是保护子类访问,因此个人觉得其他类就尽量不要使用,便于规范;

不使用任何修饰符声明的属性和方法,对同一个包内的类是可见的。
接口里的变量都隐式声明为 public static final,而接口里的方法默认情况下访问权限为 public。
public:跨包可访问
无修饰符:包内可访问

public 修饰的只能有一个,且必须要与文件名相同;若没有 public 的则可与文件名不同。注意不是内部类

该文件同级的类之间可以互相调用,但是除了 public 的类,其他不能够在其他文件调用。

在一个.java 文件中由类/Enum/接口/Anontation 其中至少一个类型组成。单独一个方法/变量不能独自存在与文件中,所以公用方法的封装也是做成类方法。原因是 java 是类加载机制,需要编译一个 java 文件成多个 class 文件,当类来使用。java 文件的命名也是按照类名命名。也说明 java 面向对象的思想体现非常充分,不像 C/C++可以单独一个方法一个文件。

编译一个 java 文件会生成多个 class 文件

假设Test.java文件中:

public class Test{}
class Test2{}
abstract class Test3{}
final class Test6{}

编译后:Test.class Test2.class Test3.class Test6.class

二、内部类和匿名内部类

  1. 内部类
    内部类是一个类当中的一个类,相当于一个类进行了嵌套,就如同循环的嵌套一般。
    内部类有一个特征:内部类当中可以调用外部类当中的属性和方法,而外部类却不能调用内部类当中的。
  2. 匿名内部类
    匿名内部类之所以匿名是因为匿名内部类的具体名字不会被我们在程序当众编写出来,因为它已经在主方法当中被实例化了。
    匿名内部类可以继承两类数据结构:抽象类或者接口。
public class Main {
    public static void main(String[] args) {

        Chouxiang c=new Chouxiang() {
            String name="Geek Song too";
            public void say3()
            {
                System.out.println("这是匿名内部类当中的方法,重写了抽象类的方法");
                System.out.println(name);
            }

        };
        c.say3();
    }
}

    abstract class Chouxiang
    {
        String name="Geek Song";//抽象类的属性是不会被调用的,除了方法
        public void say3()
        {
            System.out.println("这是抽象类当中的方法,抽象类当中是允许有具体方法来进行实现的,接口不行");
        }

    }

这显然继承了一个抽象类,并且在主方法当中创建了抽象类的对象,本来我们是应该先继承这个抽象类再开始创建对象的,否则对象是无法创建的,但是为了简便,人们创建了了匿名内部类,允许我们在主方法当中进行抽象类的实例化,同时也可以进行对象的创建。

你可能感兴趣的:(java,面试,Java面试知识汇总)