答:三种情况都可以。接口用 extends 继承一个或多个接口;抽象类可以 implements 接口,并允许把尚未实现的抽象行为留给具体子类;抽象类也能 extends 一个允许被继承的具体类。是否有 abstract 修饰,不会取消 Java 的普通继承与访问规则。
答:常用的 Class.forName(String) 根据二进制类名取得 Class 对象,必要时加载,并要求初始化对应类;它不会顺手创建该类的普通实例。带 initialize 参数的重载可以选择不因这次调用而初始化,类加载器的选择也必须明确,不能笼统说成永远使用系统类加载器。
答:静态字段属于声明它的运行时类,同一个类的实例共享这份类状态;实例字段属于具体对象,每个实例分别保存自己的值。static 不等于常量,也不等于线程安全。讨论“只有一份”时,还需限定运行时类身份,不能忽略不同定义类加载器可能加载同名类。
答:普通类的字段分为静态字段和实例字段;方法、构造器等代码中还会使用参数和局部变量。类本身不只由变量组成,还可以声明方法、构造器、初始化器和嵌套类型。回答这题时应区分“字段属于谁”与“某个名字在哪里有效”。
答:常见的运行时多态是:父类或接口类型的引用指向具体子类对象,调用可重写的实例方法时,选择实际对象对应的实现。编译器先检查调用是否合法、选定签名,运行时再进行相应的方法分派。字段、静态方法、private 方法和构造器不能一概套用同一套规则。
答:成员变量也称字段,声明在类体中,用来表达类状态或对象状态;局部变量声明在方法、构造器、代码块等局部范围内。字段可以使用相应的访问修饰符,并有默认初始值;局部变量不能随意加 public、private、static,且读取前必须满足明确赋值规则。
答:构造器与类同名,没有返回类型,负责建立新实例的初始状态,可以重载但不能继承或重写。普通类未声明任何构造器时,编译器才会提供默认构造器。Java 21 中,显式的 this 或 super 构造器调用必须在构造器体第一条语句,构造链不能循环。
答:先纠正题目前提:并非一定调用父类无参构造器。子类构造器可以显式 super(参数),也可以先 this 委托;若没有显式委托,普通类通常隐含 super()。父类实例部分需要先完成初始化,子类才能在相应基础上继续建立自己的状态。
答:子类能按访问与继承规则获得父类的 public、protected 成员,同包情况下还可能获得包访问成员;private 成员不作为子类的继承成员。构造器不会被继承。是否能在某个位置使用成员,还需要结合访问权限、包、模块以及具体表达式判断。
答:引用赋值只是让两个变量指向同一个对象,没有创建副本。浅拷贝创建外层副本,但引用字段或容器元素仍可能共享内部对象;深拷贝则按需求继续复制需要隔离的可变对象。深拷贝不是把所有东西无条件复制,必须先明确哪些状态需要独立。