概念
对象的多种形态。
引用多态
//多态
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