接口
- 多个无关的类可以实现同一个的接口.
- 一个类可以实现多个无关的接口.但只能继承一个抽象类.
- 接口中的属性只能是public static final的.
- 方法只能是抽象的.
- 接口中继承的关键字是 implements.
- 抽象类可以有构造方法.
接口和类的相似点
- 一个接口可以有多个方法.
- 接口文件保存在.java结尾文件中.,文件名使用接口名.
- 接口的字节码文件保存在.class结尾的文件中.
- 接口相应的字节码文件必须在与包名称相匹配的目录结构中.
接口与类的区别
- 接口不能用于实例化对象.
- 接口没有构造方法.
- 接口中的所有方法必须是抽象方法.
- 接口不能包含成员变量,出了static和final变量.
- 接口不是被类继承了,而是被类实现了.
- 接口支持多继承.
抽象类和接口的区别
- 抽象类可以定义非抽象方法,接口不行(必须是抽象方法).
- 抽象类有构造方法,接口没有.
- 一个类只能继承一个抽象类,而一个类可以实现多个接口.(接口可以多继承).
接口的案例
public interface Carepet {
public void play();
public void eat();
}
interface playgrame{
public void plays();
}
class work implements Carepet,playgrame
{
public static void main(String[] args) {
Carepet carepet = new work();
work w = (work)carepet;
w.plays();
w.play();
w.eat();
}
@Override
public void play() {
System.out.println("在工地上完");
}
@Override
public void eat() {
System.out.println("吃剩饭");
}
@Override
public void plays() {
System.out.println("在网吧玩游戏");
}
}
class farmer implements Carepet{
@Override
public void play() {
System.out.println("在农场玩");
}
@Override
public void eat() {
System.out.println("吃饭");
}
}
class leader implements Carepet{
@Override
public void play() {
System.out.println("在操场玩");
}
@Override
public void eat() {
System.out.println("吃专用粮");
}
}
多态
- 父类引用指向子类对象. [Animal a = new Cat()]
- 必须有继承.
- 重写.
- 强制类型转换 Animal a = new Cat() Cat c = (Cat)a;
*instanceof 判断真实类型
多态案例
public class Test1 {
public static void main(String[] args) {
//Cat cat = new Cat();
Animal a = new Cat();
a.eat();
//instanceof 当父类中没有子类的方法的时候需要强转 判断a的真实类型是不是cat.
if (a instanceof Cat) {
System.out.println("猫类");
Cat c = (Cat) a;//强制类型转换
c.sleep();
}
}
}
class Animal{
void eat(){
System.out.println("动物吃");
}
}
class Dog extends Animal{
@Override
void eat() {
System.out.println("狗狗爱吃骨头");;
}
}
class Cat extends Animal{
@Override
void eat() {
System.out.println("猫爱吃鱼");;
}
void sleep(){
System.out.println("猫睡觉");
}
}