`

老生常谈——抽象类和接口异同

    博客分类:
  • java
 
阅读更多

     今天是在这个公司的最后一天,外面下着雨,跟我心情一样!虽然不是什么大公司,但是跟同事的感情还是不错的。革命尚未成功,同志仍需努力!未来的路还很长,所以时刻准备着迎接新的挑战!为了我所心爱的人,不断努力,不断奋斗,永不停息前进的脚步!

    

    因为交接工作基本完成,所以这几天一直在等放假!闲来无事,就看看java基础。看到抽象类和接口的知识点时,突然想起自己当年在面试过程中遇到过。细细想想有些问题模糊不清,所以根据俄自己的理解,写了个关于抽象类和接口的比较的例子。希望能对初学者有些帮助。由于本人能力有限,写的不足之处希望大家能够谅解!嘿嘿!有点扯多了,书归正传!

 

1、抽象类(abstract class)

  • 抽象类和抽象方法都是由abstract进行修饰的。
  • 抽象类不能够进行实例化。
  • 抽象方法只能声明,不能进行实现。也就是说没有方法体。
  • 含有抽象方法的类必须是抽象类。
  • 继承抽象类的子类,必须实现所有抽象类中的方法,否则这个子类依然是抽象类。

2、接口(interface)

  • 所有方法都是抽象的。只能声明,不能进行实现。
  • 所有变量都是常量。

值得注意的是,有些面试的时候会出一些挑错的题。由于在学习时,忽略了一些不常用的知识点,所以在笔试的时候一定要注意细节,接口中是可以声明变量的,但是必须给这个变量赋值。同时,抽象类是可以存在一般方法的,也可以声明成员变量。继承抽象类,除了抽象方法必须重写之外,也可以对父类中的一般方法进行重写。

 

3、例子

 

Person抽象类:

package com.alex.test;

/**
 * 抽象类
 * @author Alex
 */
public abstract class Person {
	
	public String name;
	public int age; 
	//设置信息的方法,定义为抽象方法,抽象方法必须在子类中进行实现
	public abstract void setInfo(String name,int age);
	//定义了一个一般方法
	public void getInfo() {
		System.out.println("名字是:" + this.name);
		System.out.println("年龄是:" + this.age);
	}
}

 医生子类Doctor:

package com.alex.test;

/**
 * 医生子类类
 * @author Alex
 */
public class Doctor extends Person {
	/**
	 * 实现setInfo方法,这个是Person抽象类的方法
	 */
	@Override
	public void setInfo(String name,int age) {
		super.age = age;
		super.name = name;
	}
}

 测试类:

package com.alex.test;

/**
 * 测试类
 * @author Alex
 */
public class Test {

	public static void main(String[] args) {
		Doctor doctor = new Doctor();
		doctor.setInfo("Doctor",20);
		doctor.getInfo();
	}
}

 

然后添加一个Profession接口。同时,Doctor类实现这个接口,并继承Person抽象类。

Profession接口:

package com.alex.test;

/**
 * 职业接口
 * @author Alex
 */
public interface Profession {
	//在接口中定义变量的话,默认就是public static final修饰,也就是说接口中的成员变量都是常量
	String professionName = "医生";
	public void getProfessionName();   
}

Doctor类:

package com.alex.test;
/**
 * 医生实现类
 * @author Alex
 */
public class Doctor extends Person implements Profession {

	/**
	 * 实现setInfo方法,这个是Person抽象类的方法
	 */
	@Override
	public void setInfo(String name, int age) {
		super.name = name;
		super.age = age;
	}

	/**
	 * 实现getProfessionName方法,这个是Profession接口的方法
	 */
	@Override
	public void getProfessionName() {
		//因为professionName是常量,所以使用类名.变量名方式引用
		System.out.println("职业是:" + Profession.professionName);
	}
}

在测试类中增加一行代码:

doctor.getProfessionName();

运行之后的结果就可以看到:

名字是:Doctor
年龄是:20
职业是:医生

本篇博文内容比较基础,希望大家多多包涵!

7
2
分享到:
评论
1 楼 dianthus 2012-09-29  
基础很重要

相关推荐

    电子技术的老生常谈——接地.pdf

    正如标题所言,《电子技术的老生常谈——接地》一文中提到的那样,尽管接地的基本概念在每一次培训和交流中都会被提及,但往往缺乏一个通用而全面的方法论指导。本文旨在深入探讨接地的各种类型、目的以及具体的实施...

    老生常谈position定位——让人又爱又恨的属性

    在CSS世界里,`position`属性是一个至关重要的概念,它决定了元素在页面上的布局方式,因此被称为“老生常谈”的话题。`position`属性控制元素的定位模式,赋予开发者极大的灵活性来创建复杂的布局。然而,这也是一...

    Axure入门案例系列——进阶轮播图.docx

    Axure 入门案例系列——进阶轮播图 Axure 软件是一款功能强大且易于使用的原型设计工具。通过本教程,我们将学习如何使用 Axure 创建一个进阶轮播图,掌握基本的软件使用和元件交互事件。下面是教程的详细信息: ...

    老生常谈 java匿名内部类

    匿名内部类的声明通常以 `new 父类或接口(){...}` 的形式出现,其中 `...` 是匿名内部类的成员变量和方法定义。在上述示例中,`AbsDemo d = new AbsDemo() {...};` 就是一个匿名内部类的实例化。 4. **匿名内部类...

    老生常谈python之鸭子类和多态

    在Python中,如果一个对象提供了与某个接口(方法和属性)相匹配的接口,那么它就可以被视为实现了该接口。 例如,`P`、`D` 和 `F` 类都提供了 `__add__` 方法和 `info` 方法,即使它们没有显式地继承同一个基类,...

    老生常谈Log4j和Log4j2的区别(推荐)

    Log4j和Log4j2的区别 Log4j和Log4j2是两个常用的日志记录工具,它们都来自Apache开源项目。虽然它们都是日志记录工具,但是它们之间有很多区别。下面我们将从配置文件类型、核心JAR包、文件渲染和Log调用四个方面来...

    老生常谈反射之Class类的使用(必看篇)

    在Java编程语言中,反射是动态访问类信息和对象成员的一种机制,它允许程序在运行时检查和操作类、接口、字段以及方法等。本文将深入探讨反射中的核心概念——Class类,及其在实际开发中的应用。 Class类是Java反射...

    重构-改善既有代码的设计.pdf

    当对象技术成为老生常谈之后——尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,与...

    7个常用的电路接口要点及说明

    接口类型基本是老生常谈的吧,从上大学学习模拟电路、数字电路开始,对于一般的电路设计,TTL电平接口基本就脱不了“干系”!它的速度一般限制在30MHz以内,这是由于BJT的输入端存在几个pF的输入电容的缘故(构成一...

    重构:改善既有代码的设计

    当对象技术成为老生常谈之后——尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,与...

    老生常谈外链 站长要做到对症下药.pps

    老生常谈外链 站长要做到对症下药.pps

    重构 改善既有代码的设计中文版

    当对象技术成为老生常谈之后——尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,与...

    重构-改善既有代码的设计 中文版

    当对象技术成为老生常谈之后——尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,与...

    重构-改善既有代码的设计

    当对象技术成为老生常谈之后——尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,与...

    重构_改善既有代码的设计(中文版)

    当对象技术成为老生常谈之后——尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,与...

    敏捷软件开发:原则、模式与实践

    当对象技术成为老生常谈之后——尤其在Java编程语言之中,新的问题也在软件开发社区中浮现了出来。缺乏经验的开发人员完成了大量粗劣设计,获得的程序不但缺乏效率,也难以维护和扩展。渐渐地,软件系统专家发现,与...

Global site tag (gtag.js) - Google Analytics