1. 抽象类和接口的区别是什么?
接口用interface表示,里面只能定义常量和抽象方法,以及default方法。
抽象类用abstract class表示,本质上还是一个类。抽象类可以定义常量、静态变量、成员变量,构造方法、静态方法、抽象方法以及普通方法。
接口内的所有东西默认是public的,且不能改变;抽象类可以设置权限。
子类继承抽象类使用extend
,且只能继承一个抽象类;可以实现多个接口,使用implement
。接口只能继承或继承自接口;抽象类可以继承自普通类,也可继承自抽象类,同时可以实现多个接口。
2. 什么是多态?
继承自同一个父类的多个子类的同一个方法可以产生不同的结果。
例如,对于作为父类的抽象类Animal
,有一个抽象方法eat()
。有两种动物羊Sheep
和老虎Tiger
,分别继承自Animal
。
abstract class Animal{
abstract void eat();
}
class Sheep{
void eat() { System.out.println("羊吃了一斤草"); }
}
class Tiger{
void eat() { System.out.println("老虎吃了一头羊"); }
}
对于同一个行为eat
,两个子类表现出了不同的结果,那就是羊吃草,老虎吃羊。
Animal sheep = new Sheep();
Animal tiger = new Tiger();
sheep.eat(); // 羊吃草
tiger.eat(); // 老虎吃羊
网友评论