Java编程基础之抽象类和接口区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011466469/article/details/88803843

1、什么是抽象类?在java面向对象的概念中,抽象类是没有过多信息描述具体的对象一类。下面看代码分析抽象类有哪些特点:

public abstract class AbstractDemo {
	/**
	 * 抽象类定义的关键字 abstract, 有抽象方法的类一定是抽象类 如果一个类没有描述具体事务的个体就是抽象类,
	 * 抽象类里可以是抽象方法,非抽象方法
	 * 
	 */
	int speed;

	// 抽象方法没有方法体,只有方法名
	public abstract void increaseSpeed(int initspeed);

	// 构造方法,
	public AbstractDemo(int startSpeed) {
		speed = startSpeed;
		System.out.println("这是抽象类的构造方法");
	}

	// 普通方法
	public void show(int endspeed) {
		System.out.println("抽象类的普通方法~");
	}
}

2、如何使用抽象类的方法?想使用抽象类就要先继承它:

public class UseAbstractDemo extends AbstractDemo {

	/**
	 * 抽象类不能被实例化、不能创建对象,可以被继承extends 子类继承父类,可以调用父类的任何方法, 但是必须实现父类未实现的抽象方法
	 * 在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口
	 * 
	 * @param startSpeed
	 */
	// 构造方法继承抽象类的方法
	public UseAbstractDemo(int startSpeed) {
		super(startSpeed);

		// 抽象不能被实例化。可以通过super关键字,访问其他方法
		super.show(23);
		// TODO Auto-generated constructor stub
	}

	// 重写抽象类的抽象方法
	@Override
	public void increaseSpeed(int initspeed) {
		// TODO Auto-generated method stub
		System.out.println("重写父类的方法");
	}

}

3、子类继承父类,调用父类方法,测试代码如下:

//  子类继承父类,调用所有方法,必须实现父类有的抽象方法
	public static void main(String [] args){
		UseAbstractDemo ua=new UseAbstractDemo(1);
		ua.increaseSpeed(12);
	}

4、什么是接口?在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。

public interface InterfaceDemo1 {
	/**
	 * 接口是抽象方法的集合,一个类通过继承接口来继承接口的抽象方法 接口无法被实例化,但是可以被实现,
	 * 
	 * 与抽象类的区别 : 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
	 * 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
	 * 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
	 * 一个类只能继承一个抽象类,而一个类却可以实现多个接口,实现接口重现抽象的方法;
	 * 
	 * 
	 */
	// public static final固定写法,可以不写
	public static final int i = 4;
	String str = "我是接口!";

	// 抽象方法必须是抽象类,public abstract 也是固定写法,可以不写;
	public abstract void show1(String str);

	// 所以下面这些都是抽象方法
	public void show2();;

	void show3();
}

5、再来创建第二个接口:

public interface InterfaceDemo2 {
//	定义一个也是抽象类
	String str="我是接口2";
	
	void show4();
}

6、现在再创建一个类实现上面两个接口的抽象方法:

public class ImplementDemo implements InterfaceDemo1, InterfaceDemo2 {

	@Override
	public void show1(String str) {
		// TODO Auto-generated method stub
		System.out.println("这是接口1抽象方法的实现");
	}

	// 实现接口的方法,需要实现接口所有的抽象类方法,

	@Override
	public void show1(String str) {
		// TODO Auto-generated method stub
		System.out.println("这是接口2抽象方法的实现");
	}

// 下面抽象方法的空实现,但是必须要有方法体
	@Override
	public void show2() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void show3() {
		// TODO Auto-generated method stub
		
	}

}

7、测试一下,上面的类实现的接口的方法:

public class Demo {

	public static void main(String[] args) {
		// 多态,同样的对象有两种类型,继承或是实现的关系
		InterfaceDemo1 myInterface = new ImplementDemo();
		ImplementDemo myIneterface2 = new ImplementDemo();
		myInterface.show1("interface接口类型(也可以是实现接口的类)  变量名=new 实现接口的类");
		myIneterface2.show1("str");
	}

}

猜你喜欢

转载自blog.csdn.net/u011466469/article/details/88803843