1.instanceof Cat
2.Cat
final
修饰符在 Java 中是用来表示不可修改或不可继承的意思。我们来逐一分析 final
修饰符在不同情况下的使用:
-
类:
final
可以修饰类,表示该类不能被继承。- 例如:
final class MyClass { }
- 这种情况下,
MyClass
不能作为父类,不能有子类。
- 例如:
-
接口:
final
不能修饰接口。- 这意味着我们不能声明一个
final
接口。接口本身就是为了被实现的,不能被标记为final
,因为如果接口被标记为final
,就无法继承它或实现它。
- 这意味着我们不能声明一个
-
方法:
final
可以修饰方法,表示该方法不能被子类重写。- 例如:
public final void myMethod() { }
- 这种情况下,子类无法重写
myMethod()
方法。
- 例如:
-
变量:
final
可以修饰变量,表示该变量一旦初始化后不能再修改其值。- 例如:
final int x = 10;
- 这表示
x
的值不可更改。
- 例如:
结论:
final
不能修饰接口。
重要
-
抽象类不一定含有抽象方法,接口中的方法都是抽象方法
- 正确。抽象类可以包含抽象方法,也可以包含具体方法(即有方法体)。接口中的方法默认都是抽象方法,除非方法被标记为
default
或static
,这些方法才可以有方法体。
- 正确。抽象类可以包含抽象方法,也可以包含具体方法(即有方法体)。接口中的方法默认都是抽象方法,除非方法被标记为
-
一个类只能继承一个抽象类,但可以实现多个接口;一个接口可以继承多个接口
- 正确。Java中,类只能继承一个抽象类(因为Java不支持多重继承),但可以实现多个接口。接口支持多重继承,一个接口可以继承多个接口。
-
抽象类和接口中的方法都没有方法体
- 错误。抽象类中的方法可以没有方法体,也可以有方法体(具体方法)。接口中的方法通常没有方法体,但从Java 8开始,接口可以包含有方法体的
default
方法和static
方法。
- 错误。抽象类中的方法可以没有方法体,也可以有方法体(具体方法)。接口中的方法通常没有方法体,但从Java 8开始,接口可以包含有方法体的
-
抽象类可以含有私有成员变量,接口不含有私有成员变量
- 正确。
- 抽象类:可以有私有成员变量,并且可以通过提供公共方法来操作这些变量。
- 接口:不能有任何成员变量(除了常量),只能声明方法,且这些方法默认是抽象的。
类实现接口
填空题
一个类如果实现一个接口,那么它需要实现接口中定义的全部(抽象方法),否则该类就被定义为(抽象类)。
接口声明的关键字是______。
填空题
接口声明的关键字(interface)
如果一个类引用了某个接口,就必须在类体中重写接口中定义的所有______。
填空题
如果一个类引用了某个接口,就必须在类体中重写接口中定义的所有(抽象方法)。
抽象方法只要包含抽象方法就可以
可以实现多接口,但不可以实现多继承
implement 接口
extends 父类(抽象)
-
abstract类中不应该有private的成员:
- 错误。抽象类中是可以有
private
成员的。抽象类的目的是为了提供一个可以被继承的基础类,它的成员可以是private
、protected
或public
,这取决于具体的设计需求。private
成员在抽象类中是允许的,但它只能被该类的其他成员方法访问。
- 错误。抽象类中是可以有
-
static方法中能直接调用类里的非static的属性:
- 错误。
static
方法属于类本身,而不是类的实例,因此它不能直接访问非static
成员(即实例变量或实例方法)。static
方法只能访问类的static
成员。如果需要在static
方法中访问非static
属性,必须先创建类的实例。java">class MyClass {int nonStaticVar = 10; // 非static属性static int staticVar = 20; // static属性static void staticMethod() {System.out.println(staticVar); // 可以访问static属性// System.out.println(nonStaticVar); // 编译错误,不能直接访问非static属性} }
- 错误。