Java Interface and Abstraction

本文引用资源申明:

http://blog.csdn.net/xw13106209/article/details/6923556

http://www.cnblogs.com/dolphin0520/p/3811437.html

http://www.tutorialspoint.com/java/java_abstraction.htm

1. 抽象类

关键词:abstract

定义:含有抽象方法的类,也可以有具体方法。

抽象方法:只有方法的声明,没有body。 用;结尾,没有{}。抽象类的抽象方法就是强制子类必须去实现的。

抽象类是为了继承而存在的。如果一个父类,它的某个方法在父类中实现出来没有任何意义,必须根据子类的需求具体进行不同的实现,那么可以将这个方法声明为abstract方法,父类标为abstract类。

不要去写一个具体类去继承另外一个具体类,这个设计会有很大问题。

抽象类和普通类的区别:

a:抽象方法必须为public或者protected

b: 抽象类不能用来创建对象(因为有抽象方法,不能实现)

c:如果一个类继承与一个抽象类,子类必须实现父类的抽象方法。如果子类不能实现,那么子类也要是abstract。

2. 接口

定一个接口: public interface Name{}

接口中只能定义方法,不能有方法的实现。也就是说,接口中的方法都是抽象方法,而且是public abstract方法。接口中的变量都是public static final变量。

3. 区别

(1)总体来讲:

可以认为接口是抽象类的一种,只是多了许多限定条件。

a:接口中不能有静态代码块以及静态方法,抽象类可以有。

b:接口中不能提供方法的实现细节(body),抽象类的具体方法可以提供body。

c: 接口中的成员变量只能是public stratic final的

但是也有很大的好处,因为

一个类只能继承一个抽象类,但是可以引用(implement)多个接口,用,(逗号)连接

(2)

抽象类是对整个类包括属性、行为进行抽象,但是接口是对类的行为进行抽象。

如果一个类继承了某个抽象类,那么子类一定属于抽象类的种类(比如民用飞机属于飞机,燕子属于鸟)。但是接口是具备这个行为与否的关系,比如飞机和鸟都可以引用 “飞”这个接口来实现“飞”这个行为。所以,继承(extend)是“是不是”的关系,接口是“有没有”的关系。

举个例子,我们可以把飞机、鸟作为抽象类,“飞”作为接口,让整个两个抽象类实现“飞”这个接口,那他们就有了“飞”这个行为。让民用飞机继承飞机这个抽象类,那个民用飞机就可以飞并且含有飞机的基本属于,同理,燕子也是一样。

(3)

对于抽象类,如果需要添加新的方法,可以直接在抽象类的更改。但是对于接口,如果接口更改,则所有实现这个接口的类都必须做相应的改动。因为如果向接口添加了一个新的方法,那么所有实现这个方法的类都不能通过编译,必须让每一个类都实现这个方法才行。

如何在子类中实现抽象类的抽象方法?如果在引用接口的类中实现接口的方法??需要添加例子

时间: 2024-11-08 09:21:16

Java Interface and Abstraction的相关文章

Java Interface 是常量存放的最佳地点吗?(转帖学习,非原创)

Java Interface 是常量存放的最佳地点吗?(转帖学习,非原创) 由于java interface中声明的字段在编译时会自动加上static final的修饰符,即声明为常量.因而interface通常是存放常量的最佳地点.然而在java的实际应用时却会产生一些问题. 问题的起因有两个,第一,是我们所使用的常量并不是一成不变的,而是相对于变量不能赋值改变.例如我们在一个工程初期定义常量∏=3.14,而由于计算精度的提高我们可能会重新定义∏=3.14159,此时整个项目对此常量的引用都应

JAVA interface & abstract

摘要:JAVA interface & abstract 界面 & 抽象类 抽象定义:抽象就是从多个事物中将共性的,本质的内容抽取出来. ex:?狼和狗共性都是犬科,犬科就是抽象出来的概念.鸟跟飞机都会飞,但飞的内容不同 抽象类:Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类. abstract class Action{ ?????? abstract void fly(); } 抽象类特点: 1.??????????抽象方

java====interface接口

package cn.china; abstract class AbsDemo{ abstract void show1(); abstract void show2(); } /** *当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用 *另一种形式定义和表示,就是 接口 interface * *定义接口使用的关键字不是class,是interface. **/ interface Demo5{ public static final int NUMBER=4; public abs

java interface的两个经典用法

1.Java多态接口动态加载实例 编写一个通用程序,用来计算没一种交通工具运行1000公里所需的时间,已知每种交通工具的参数都为3个整数A.B.C的表达式.现有两种工具:Car和Plane,其中Car的速度运算公式为:A+B+C.需要编写三个类:ComputeTime.java,Palne.java,Car.java和接口Common.java.要求在未来如果增加第3中交通工具的时候,不必修改 以前的任何程序,只需要写新的交通工具的程序.其运行过程如下: 从命令行输入ComputeTime的四个

java interface 默认值

/* * Hibernate, Relational Persistence for Idiomatic Java * * Copyright (c) 2010, Red Hat Inc. or third-party contributors as * indicated by the @author tags or express copyright attribution * statements applied by the authors. All third-party contri

Java Interface,反射

先看代码, package reflect; //Class Word public class Word implements OfficeAble{ public static void main(String[] args){ } public void start(){ System.out.println("word...start..."); } public Word(){ } } package reflect; //Class Excel public class E

java interface 强制类型转换小记

1. Interface 可以用来持有任何implementation该Interface的对象,这和父类可以持有子类是一样的. 2. 任何需要一个类A的方法,你都可以把A的子类作为A的替代品来使用,当然有关具体的方法覆盖引起的问题,你要自己care 3. 一旦强制转换成功了,你就可以使用任意的属于转换后对象的方法,举例来说: > A a = (A)b  //把b实例转换成A对象的实例 > a.methodOfA() // 因为虽然是b,但是你告诉编译器我要把它当做a来用了,属于A的方法自然可

java interface中的变量和方法

一.interface中的变量 interface中的变量都是默认public static final修饰的 二.interface中的方法 interface中的方法都默认是public abstract修饰的 注意点: 这些修饰词可以省略一个,也可以省略多个(甚至都省略),但是不能用其他修饰词修饰. 不写public 不是默认的 default:写default会报错 例如: 变量: public static final int MAX_LENGTH = 1000: final int

java interface 中的变量和方法

一.interface中的变量都是默认public static final修饰的 二.interface中的方法都是默认public abstract修饰的 注意点: 这些修饰词可以省略一个,也可以省略多个(甚至都省略),但是不能用其他修饰词修饰. 不写public 不是默认的 default:写default会报错 例如: 变量: public static final int MAX_LENGTH = 1000: final int MAX_LENGTH = 1000; static in