欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

浅谈Java抽象类和接口的个人理解

程序员文章站 2023-12-16 15:38:04
今天来说一波自己对java中抽象类和接口的理解,含参考内容: 一、抽象类 1、定义: public abstract class 类名{} java语言中所有的对象...

今天来说一波自己对java中抽象类和接口的理解,含参考内容:

一、抽象类

1、定义:

public abstract class 类名{}

java语言中所有的对象都是用类来进行描述,但是并不是所有的类都是用来描述对象的。我所理解的抽象类其实就是对同一类事物公共部分的高度提取,这个公共部分包括属性和行为。比如牛、羊、猪它们的公共属性是都有毛,公共行为是都哺乳,所以我们可以把公共部分抽象成一个哺乳类,含有属性毛和行为哺乳,当牛、羊、猪继承了哺乳类后也就有了哺乳的功能,至于怎么完成这个功能就需要自己去实现了。

2、特点

(1)被abstract关键字修饰的类是抽象类;

(2)含有抽象方法的类一定是抽象类,但是抽象类不一定含有抽象方法;且抽象方法必须是public或protected,否则不能被子类继承。默认为public。

(3)抽象方法中不能有实现,否则编译报错;

(4)抽象类中可以定义自己的成员变量和成员方法;

(5)子类继承抽象类时,必须实现抽象类中的所有抽象方法,否则该子类也要被定义为抽象类;

(6)抽象类不能被实例化。

3、验证以上规定是否确实如其所述

这是我在word中编辑的一张验证表,把它截成图片放在这里:

浅谈Java抽象类和接口的个人理解

从上图的验证结果来看,那些理论都是正确的

二、接口

1、定义:

public interface 接口名{}

接口是用来提供方法的。按我的理解,它是对多个类公共行为的高度提取,比如所有的动物它们的公共行为是吃和睡,那么我们就可以将这两个行为提取出来封装在一个接口中,当某个动物需要执行这个行为的时候只要调用该接口,然后在自己的类里面完成具体实现就行。这样理解好像跟抽象类没什么区别,那再看下面的这个例子。如果把这两个行为放在抽象类中,但是该抽象类中还有一个爬的行为,此时当一种爬行动物,比如蛇,当它继承这个类的时候,会实现吃、睡、爬行这三个方法,于是它便有了吃、睡、爬的功能;但是如果一个飞行类的动物如鸟,当它继承了这个方法的时候,同样的也有了吃、睡、爬的功能,很明显,爬不是它需要的功能,这就有点词不达意了,但是当他们继承了只有吃、睡的接口,就有了吃、睡的基本功能,至于爬和飞,可以抽象出来放在抽象类中,按需继承,按需实现自己需要的功能就ok了。

2、特点:

(1)接口中可以有自己的成员变量,但会被隐式地指定为public staic final,而且也只能是public staic final的,接口中所有的方法都是抽象方法,都会被隐式地指定为public abstract的。

(2)接口中只定义抽象方法,没有具体的实现;

(3)实现接口的类必须实现接口中定义的所有方法;

3、验证以上理论是否正确

浅谈Java抽象类和接口的个人理解

同样,验证出上面的理论都是对的!

三、抽象类和接口的区别:

1、抽象类中可以有自己的成员方法及它们的具体实现;接口中只能含有抽象方法;

2、抽象类中可以含有各种类型的成员变量;接口中的成员变量只能是public static final的;

3、一个类只能继承一个抽象类,但可以实现多个接口;

4、抽象类中可以含有静态代码块和静态方法;接口中不能定义静态代码块和静态方法;

验证一个类只能继承一个抽象类,但能实现多个接口

首先,定义两个抽象类:一个mummals哺乳类,一个crawler爬行类

/**
 * @createtime 2017年3月17日 上午10:33:27
 * @description 哺乳类 
 */
public abstract class mammals {
	public string foods;
	public abstract void nurse();
	public void eat(string food){
		this.foods = food;
		system.out.println("吃"+foods);
	}
}
/**
 * 
 * @createtime 2017年3月17日 上午11:23:09
 * @description 定义一个抽象类--爬行类
 */
public abstract class crawler {
	public abstract void crawl();
}

其次,定义两个接口:一个是baseaction基础接口;一个是specialaction特殊接口

/**
 * 
 * @createtime 2017年3月17日 上午11:03:42
 * @description 定义一个名为基本行为的接口
 */
public interface baseaction {
	public string name = "";
	public void eat();
	public void sleep();
}
/**
 * @createtime 2017年3月17日 上午11:24:56
 * @description 定义一个接口用来实现特殊行为
 */
public interface specialaction {
  
  public void study();
}

然后,定义一个基础类people,继承mummals类,实现baseaction接口和specialaction接口

/**
 * @createtime 2017年3月17日 上午11:25:48
 * @description 定义一个普通的类--人类,继承哺乳类,实现基础接口和特殊接口
 */
public class people extends mammals implements baseaction,specialaction{
	@override
	  public void study() {
		// todo auto-generated method stub
	}
	@override
	  public void eat() {
		// todo auto-generated method stub
	}
	@override
	  public void sleep() {
		// todo auto-generated method stub
	}
	@override
	  public void nurse() {
		// todo auto-generated method stub
	}
}

可以看出,一个子类是可以实现多个接口的

最后,让基础类people,同时继承mummals类和crawler类

/**
 * @createtime 2017年3月17日 上午11:25:48
 * @description 定义一个普通的类--人类,继承哺乳类,实现基础接口和特殊接口
 */
public class people extends mammals,crawler{
	@override
	  public void nurse() {
		// todo auto-generated method stub
	}
}

总结

以上就是本文关于浅谈java抽象类和接口的个人理解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

spring中bean的继承与抽象代码示例

hibernate核心思想与接口简介

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

上一篇:

下一篇: