twelve day("多态","抽象类","接口")

断了今生、忘了曾经 提交于 2020-01-11 23:03:35

多态

多态就是一个对象的多种形态

//父类引用子类对象
Aniaml a=new Dog();
//特点
//1,不能使用子类特有的方法
//2,调用方法时,编译看左边,运行看右边

好处:

可以让我们面向父类,操作所有的子类共性的内容 提升了程序的扩展性

多态的转型

//向下转型其实就是父类引用子类对象
Aniaml a=new Dog();
//向上转型是为了能够使用子类特有的内容
//与强制类型转换的格式一样
Dog d=(Dog)a;
//转型异常:ClassCastException
//为了解决这个异常,提供了关键字: instanceof
//通过instanceof关键字,可以判断要转的类型是否符合当前类型
boolean   结果= 多态变量名   instanceof    类名;
//转型仅仅是对象的形态发生了变化,对象的地址并没有变化

抽象类

抽象方法和抽象类要使用abstract关键字来修饰
抽象方法:没有方法体的方法就是抽象方法
当无法确认方法体的具体内容时,可以使用抽象方法
抽象类:含有抽象方法的类一定是抽象类

//抽象类格式:
public  abstract class  类名{}

//抽象方法格式:
public  abstract 返回值类型   方法名(参数列表);

特点

1:抽象类不能直接创建对象;(语法规定)
2:抽象类中,可以有构造方法;(构造方法的作用,仅仅是给子类调用,或给本类的成员变量赋值)
3:如果一个子类,继承抽象类的时候,不能重写所有的抽象方法,那么这个子类也必须是抽象类;
(此时,子类必须还要继续有子类,才可以创建对象)
4:抽象类中可以不写抽象方法;(即使没有写抽象方法,也是无法直接创建抽象类的对象的!)

接口

接口其实就是一种规范

interface   接口名{
成员;
}

jdk之前,接口里只有两部分成员:抽象方法和常量
接口里的常量格式:
默认修饰符:public static final

public   static   final   数据类型   常量名  =  数据值;

接口里的方法格式:
默认修饰符:public abstract

public abstract void 方法名();

特点

1:接口无法直接创建对象;
2:接口中没有构造方法;(也没有静态代码块)
3:接口与接口之间允许多继承;
4:接口与类之间,只能是类实现接口;

类与接口的关系

只能是类实现接口
使用implements关键字表示

类名 implements 接口名

抽象类与接口的对比

相同点 不同点
都不能直接创建对象 抽象类属于类的范畴,只能是单继承;而接口可以多实现
都可以包含抽象方法 抽象类包含构造方法,而接口的成员都是固定的形式(修饰符省略了,java会自动添加上去)
都是父亲的角色(都是位于继承体系的顶端)

结论:
如果使用抽象类和接口都可以满足需求,优先考虑使用接口

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!