概念

对象的多种形态。

引用多态
//多态
Animal ani1=new Animal();
//父类引用可以指向子类对象
Animal pig = new Dog();

//子类引用不能指向父类对象
Dog sheep =new Animal();
方法多态

创建本类对象,调用的方法为本类方法。

创建子类对象,调用的方法为子类重写的方法或继承的方法。

Animal ani1=new Animal();
//父类引用可以指向子类对象
Animal pig = new Dog();
ani1.eat(); //父类对象的吃方法
pig.eat();  //子类对象的吃方法
//子类引用不能指向父类对象
//Dog sheep =new Animal();

注:子类引用指向的父类对象创建的对象无法使用子类自身的方法。

//子类中的方法
public void run(){
    System.out.println("I can run fast!");
}
Animal pig = new Dog();
pig.run();//调用出错,通过父类创建的子类对象无法使用子类自身的方法

引用类型转换

1.向上类型转换(小类型到大类型)
2.向下类型转换(大类型到小类型)

Dog dog=new Dog();
Animal animal=dog;//自动类型提升 向上类型转换
Dog dog1=(Dog)animal;//强制类型转换 向下类型转换

当dog不是animal子类时转换会出错,解决方案:使用instanceof判断类型依赖关系,一般用法:

if(animal instanceof dog){
    Dog dog1=(Dog)animal;
}else{
    System.out.println("找不到无法进行转化");
}

抽象类

1.语法定义
抽象类使用abstract关键字修饰,则该类为抽象类。

2.使用场景
不关心具体类的实现,只关心某些方法必须存在。

3.使用规则
- abstract定义抽象类
- abstract定义抽象方法,只有声明不需要实现
- 包含抽象方法的类是抽象类
- 抽象类中可以包含普通方法,也可以没有抽象方法
- 抽象类不能直接创建,可以定义引用变量

接口

概念

接口定义了某一批类所需要遵守的规范,接口不关心这些内部数据,也不关心这些类里方法的实现细节,只规定这些类里必须提供某些方法。

语法
[修饰符]interface 接口名[extends 父接口1,父接口2...]{

}

接口就是用来被继承被实现的,修饰符建议用public(不能用private和protected修饰接口)

接口属性都是常亮,会默认加上public static final修饰符。

接口的属性会默认加上public abstract修饰符。

使用接口

一个类可以实现一个或多个接口,实现接口使用implements关键字。

继承父类实现接口语法:

[修饰符]class 类名 extends 父类 implements 接口1,接口2...{

}

继承父类必须在实现接口之前。

与匿名内部类配合使用接口

匿名内部类就是没还有名字的内部类,多用于关注实现而不关注实现类的名称。

语法格式:

Interface i = new Interface(){
    public void method() {
        System.out.println("匿名内部类实现接口的方式");
    }
}

以上完整的代码请点击这里。

END