【Java】抽象类与接口

抽象类与接口

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值