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

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

一、抽象类

1、定义:

public abstract class 类名{}

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

2、特点

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

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

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

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

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

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

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

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

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

二、接口

1、定义:

public interface 接口名{}

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

2、特点:

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

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

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

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

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

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

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核心思想与接口简介

java中接口(interface)及使用方法示例

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

(0)

相关推荐

  • Java的抽象方法和抽象类实例详解

    本文实例讲述了Java的抽象方法和抽象类.分享给大家供大家参考,具体如下: 一 点睛 抽象方法是只有方法签名,没有方法实现的方法. 抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义为抽象类,抽象类里可以没有抽象方法. 抽象类和抽象方法的规则: 抽象类必须使用abstract修饰符来修饰,抽象方法必须使用abstract修饰符来修饰,抽象方法不能有方法体. 抽象类不定被实例化.即使抽象类里不包含抽象方法,这个抽象类也不能创建实例. 抽象类可以包含成员变量.方法(普通方

  • JAVA 继承基本类、抽象类、接口介绍

    封装:就是把一些属性和方法封装到一个类里. 继承:就如子类继承父类的一些属性和方法. 多态:就如一个父类有多个不同特色的子类. 这里我就不多讲解,下面我主要说明一个继承.继承是OOP(面向对象)的一个特色,java只支持单继承(如果继承两个有同样方法的父类,那么就不知道继承到那个父类的,所以java只支持单继承).继承是java的一个特色,我们用的所以类都继承Objict类,所以就要Object类的方法,如toString().getClass().wait()--所以我们建立的类都有父类. J

  • java中抽象类、抽象方法、接口与实现接口实例详解

    前言 对于java中的抽象类,抽象方法,接口,实现接口等具体的概念就不在这里详细的说明了,网上书本都有很多解释,主要是我懒,下面通过一个例子来说明其中的精髓要点,能不能练成绝世武功,踏上封王之路,就看自己的的啦(不要误会,我指的只是我自己啦啦) 用接口实现一个简单的计算器 1.利用接口做参数,写个计算器,能完成+-*/运算 (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 (3)设计一个类UseCo

  • Java中的接口和抽象类用法实例详解

    本文实例讲述了Java中的接口和抽象类用法.分享给大家供大家参考,具体如下: 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类往往用来表征我们在对问题领域进行分析. 设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象,我们不能把它们实例化(拿不出一个具体的东西)所以称之为抽象. 比如:我们要描述"水果",它就是一个抽象,它有质量.体积等

  • Java接口和抽象类用法实例总结

    本文实例讲述了Java接口和抽象类用法.分享给大家供大家参考,具体如下: 接口 1 因为java不支持多重继承,所以有了接口,一个类只能继承一个父类,但可以实现多个接口,接口本身也可以继承多个接口. 2 接口里面的成员变量默认都是public static final类型的.必须被显示的初始化. 3 接口里面的方法默认都是public abstract类型的.隐式声明. 4 接口没有构造方法,不能被实例化. 5 接口不能实现另一个接口,但可以继承多个接口. 6 类如果实现了一个接口,那么必须实现

  • Java 抽象类定义与方法实例详解

    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量.成员方法和构造方法的访问方式和普通类一样. 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用.也是因为这个原因,通常在设计阶段决定要不要设计抽象类. 父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法. 抽象类 在Java语言中使

  • Java中接口和抽象类的区别与相同之处

    1. 抽象类: (1).概念:抽象类是对一种事物的抽象,即对类抽..抽象类是对整个类整体进行抽象,包括属性.行为.Java抽象类和Java接口一样,都用来声明一个新的类型.并且作为一个类型的等级结构的起点. (2).格式: 复制代码 代码如下: public abstract class abstractDemo{             /**属性*/             private String name;             /**方法*/             public

  • JAVA抽象类和抽象方法(abstract)实例分析

    本文实例讲述了JAVA抽象类和抽象方法(abstract).分享给大家供大家参考,具体如下: 一.抽象(abstract)的使用 当父类的某些方法不确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]. 我们都知道,父类是将子类所共同拥有的属性和方法进行抽取,这些属性和方法中,有的是已经明确实现了的,有的还无法确定,那么我们就可以将其定义成抽象,在后日子类进行重用,进行具体化.这样,抽象类也就诞生了. 例如,定义了"动物"父类,其中&qu

  • Java抽象类和抽象方法定义与用法实例详解

    本文实例讲述了Java抽象类和抽象方法定义与用法.分享给大家供大家参考,具体如下: 一.Java抽象类 参考资料:Java抽象类 详解 1.抽象类的说明 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量.成员方法和构造方法的访问方式和普通类一样. 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用.也是因为这

  • java 抽象类与接口的区别总结

    java 抽象类与接口的区别总结 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于 abstract class和interface 选择显得比较随意. 其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的 理解

  • 简单学习Java抽象类要点及实例

    使用抽象类应该注意的几个要点: 包含一个或者多个抽象方法的类必须被声明为抽象类. 将类声明为抽象类,不一定含有抽象方法.通常认为,在抽象类中不应该包括具体方法,建议尽量将通用的域和方法放在超类中.抽象类不可以被实例化.即不能创建这个类的对象 实例代码: 复制代码 代码如下: import java.util.*; /** * This program demonstrates abstract classes. * @version 1.01 2004-02-21 * @author Cay H

随机推荐