抽象类与接口
1、抽象类
(1)抽象类定义了一组抽象的方法,至于这组抽象方法的具体表现形式由子类来继承实现。
(2)在解决实际问题时,一般将父类定义为抽象类,需要使用这个父类进行继承与多态处理。
(3)在java语言中设置抽象类不可以实例化对象。
(4)abstract是定义抽象类的关键字。
使用abstract定义的类称为抽象类,被子类继承。
使用abstract定义的方法成为抽象方法,抽象方法没有方法体,可以在子类中重写。
(5)若当前类需要实现不同类中的方法,通过继承这一方式是无法实现的。
Java中规定,类不能同时继承多个父类,为了解决这一问题,可以采用接口机制。
(6)抽象类中,不但可以定义抽象方法,还可以定义普通方法,且存在方法体。
(7)抽象类中成员变量可以是各种类型。
例如:
public abstract class Abstract_Test {
public abstract void testAbstract(); //定义抽象方法
public void OrdinaryFunction()
{
System.out.println("Abstract_Test&OrdinaryFunction()=====>我在测试普通方法"); //定义普通方法
}
}
2、接口
(1)在 Java 编程语言中是一个抽象类型,是抽象方法的集合。一个类通过继承接口的方式,从而来继承接口的抽象方法。
(2)使用interface关键字定义接口,一个类可以同时实现多个接口使用implements关键字实现
例如:
public interface Interface_Test {
public void testInterface();
abstract void testAbstractInInterf();
}
(3)接口中不含有静态代码块(static修饰的方法),接口定义的方法被定义为public或是abstract形式,缺省为public
接口中的成员变量只能是public static final类型的,并且是隐式的,缺省的
(4)接口是可以继承的
例如:
public interface Interface_inherit extends Interface_Test {
public void testInterfaceInherit();
}
(5)若实现某接口,其接口内的方法都要被重写;否则,将报错。
例如:
public interface Interface_inherit extends Interface_Test {
public void testInterfaceInherit();
public void extraFunction(); //定义一个新的方法
}
在实现该接口的类中未实现该接口中方法的方法体,报错
public class Abstract_Interface extends Abstract_Test implements Interface_inherit {
.....
}
3、抽象类与接口的对比
4、代码
1、Abstract_Interface.java
public class Abstract_Interface extends Abstract_Test implements Interface_inherit {
@Override
public void testAbstract() {
System.out.println("Abstract_Test&testAbstract()=====>I am testing Abstract");
}
@Override
public void testInterface() {
System.out.println("Interface_Test&testInterface()=====>I am testing Interface");
}
@Override
public void testInterfaceInherit() {
System.out.println("Interface_inherit&testInterfaceInherit()=====>I am testing Interface Inherit");
}
@Override
public void testAbstractInInterf() {
System.out.println("Interface_Test&testAbstractInInterf()=====>I am testing Abstract Function In Interface");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Abstract_Interface AI = new Abstract_Interface(); //定义对象
AI.testAbstract(); //在类中测试抽象类中抽象方法
AI.OrdinaryFunction(); //在类中测试抽象类中普通方法
AI.testInterface(); //在类中测试接口中方法
AI.testInterfaceInherit(); //在类中测试接口继承
AI.testAbstractInInterf(); //在类中测试接口中的抽象方法
}
}
2、Abstract_Test.java
public abstract class Abstract_Test {
public abstract void testAbstract(); //定义抽象方法
public void OrdinaryFunction()
{
System.out.println("Abstract_Test&OrdinaryFunction()=====>我在测试普通方法"); //定义普通方法
}
}
3、Interface_Test.java
public interface Interface_Test {
public void testInterface();
abstract void testAbstractInInterf(); //接口中定义一个抽象方法
}
4、Interface_inherit.java
public interface Interface_inherit extends Interface_Test {
public void testInterfaceInherit();
//public void extraFunction(); //定义一个新的方法
}
5、结果
5、参考
https://blog.youkuaiyun.com/qing_gee/article/details/89530335