本文实例讲述了Java面向对象程序设计:抽象类,接口用法。分享给大家供大家参考,具体如下:
本文内容:
抽象类 接口 抽象类与接口的异同首发日期:2018-03-24
抽象类:
虽然已经有了父类,但有时候父类也是无法直接描述某些共有属性的,比如哺乳类和人类都会叫,而一般来说哺乳类这个父类并没有准确定义“叫”的属性的,显然应该由子类来决定怎么“叫”,但“叫”这个属性是共有的,那么可以把这个属性抽象化(抽象则代表没有具体内容),由子类来实现具体内容。 普通类中无法定义抽象方法,所以定义了抽象类。 由于抽象方法子类是必须重写的,不然会运行失败,所以可以确保子类重写抽象方法。 抽象类可以有抽象方法,也可以没有抽象方法(没有抽象方法的抽象类),没有抽象方法时,子类继承不需要覆盖方法。 抽象类不可以实例化,不能用new关键字创建对象。 只有子类覆盖所有的抽象方法后,子类具体化,子类就可以创建对象。如果没有覆盖所有的抽象方法,子类还是抽象类。 抽象方法一定定义在抽象类中,都需要abstract来修饰。抽象方法只允许声明,不允许定义。故此不能有大括号。抽象方法也不允许用final修饰。 抽象类的定义格式: 抽象方法的定义格式:abstract class A{ abstract void talk();//只能声明,不能具体定义 } class B extends A{ void talk() { System.out.println("run in B");//子类必须重写抽象方法 } } public class Demo { public static void main(String[] args) { B b=new B(); b.talk(); } }
接口:
接口也是抽象的,抽象的原因与抽象类的原因类似。但用处不同,接口一般用于定义类的统一行为,而抽象类是“继承”。 类重写一个接口中的所有抽象方法称为接口的实现。 接口解决的问题:JAVA不直接支持多继承,但支持多实现。 接口体中包含常量定义和方法声明,不允许对方法进行定义。 接口可以说是完全抽象的抽象类。 子类需要覆盖接口中的所有的抽象方法才能实例化,否则它是一个抽象类。 如果一个类实现了一个接口,该类必须对接口中声明的方法进行定义。实现方法时方法的名字、返回类型、参数个数及参数类型必须与接口声明的一致。 接口中,方法的修饰符默认是public abstract;接口中的常量的修饰符默认是public static final;所以子类中必须使用public来修饰定义的方法。 接口的定义格式: 接口的实现:package 接口; interface A{ public static final int size=100; public abstract void talk(); // public abstract void eat(); } class B implements A{ //实现A中的抽象方法 public void talk() { System.out.println("B talk"); } } public class Demo { public static void main(String[] args) { new B().talk(); } }
注意:
- 如果一个类声明实现了一个接口,但没有实现接口的所有方法,那么这个类必须是抽象类 如果一个类没有完全实现接口中的所有方法,那么这个类必须是一个抽象类。