Java编程思想学习(七) 抽象类和接口

1.抽象类和抽象方法

抽象方法:不完整的,仅有声明而没有方法体。

   abstract void f();

抽象类:包含抽象方法的类。(若一个类包含一个或多个抽象方法,则该类必须限定为抽象的。)

1.用抽象类直接创建对象是不安全的,因为这个抽象类是不完整的。编译器通过这种方式保证了
抽象类的纯粹性。

public abstract class Person {
    public abstract void eat();
    public abstract void pee();
    public abstract void sleep();
}

//不能直接用抽象类创建对象
//Person p = new Person();//错误

2.一个类从抽象类中继承,若想创建改类的对象,就必须实现基类中的所有抽象方法。否则将无法创建该类的对象,
并且导出类也是抽象类。

//一个类继承自抽象类,必须实现这个抽象类中的所有抽象方法
public class Male extends Person {
    @Override
    public void eat() {
        System.out.println("Male eat a lot!");
    }

    @Override
    public void pee() {
        System.out.println("Male pee by standing up");
    }

    @Override
    public void sleep() {
        System.out.println("Male sleep");
    }
}

//创建改导出类的对象
Person p = new Male();

3.可以创建一个没有任何抽象方法的抽象类。(若有这样一个类,包含任何抽象方法都显得没有实际意义,而且我们也想阻止产生这个类的任何对象)

4.抽象类并不需要所有的方法都是抽象的。

作用:
1.明确类的抽象性,并告诉用户和编译器打算怎样来使用它们。
2.抽象类是很有用的重构工具,使我们能很容易的将公共方法沿着继承层次向上移动(也就是将公共方法抽取重构到抽象类中)

2.接口

interface关键字使抽象更进一步,产生一个完全抽象的类,没有提供任何具体的实现。(只有方法名,参数列表和返回类型,没有任何方法体。接口只提供了形式,而未提供任何具体实现)

public interface People {
    void eat();
    void sleep();
    void pee();
}

一个接口表示:“所有实现了该特定接口的类看起来都像这样”

接口被用来建立类和类之间的协议(protocol)

接口不仅仅是一个极度抽象的类,因为接口允许我们通过创建一个能够被向上转型为多种基类的类型
来实现类似于多重继承的特性。(Java只支持单继承,但可以通过实现接口来达到多继承的效果)

接口中可以包含域,但是这些域隐式地是static和final的。

使用implements关键字让一个类遵循某个接口(或是一组接口)。它表示:"接口只是它的外貌(what it looks like),我们用类实现接口来声明它是如何工作的(how it works)"

3.完全解耦

    • 策略设计模式: 创建根据所传递的参数对象的不同而具有不同的行为的方法(这类方法包含所要执行的算法中
      固定不变的部分,而策略包含变换的部分,策略就是传递进去的参数对象)
    • 适配器设计模式: 适配器中的代码将接受所拥有的接口,并产生所需要的接口。
      将接口从具体实现中解耦使得接口可以应用于多种不同的具体实现,因此代码也就更具复用性。

 4.抽象类和接口的区别

尽管接口和抽象类看起来很是相似,但他们之间还是存在很多的不同点. 
(1).抽象类毕竟还是类,所以用class关键字声明然后用extends关键字继承.接口用interface声明,implements继承. 
(2).接口中方法权限必须是public,变量是static final型常量;抽象类中的方法权限可以自己设定,变量也一样. 
(3).接口中的所有方法都必须是抽象的而抽象类中可以是抽象的也可以是普通的. 
(4).最后也是最重要的一点区别是:接口支持多重继承而抽象类是不可以的!这一点带来的一个好处就是,我们能够将一个类向上转型成多个基类.

 转载: http://www.cnblogs.com/JohnTsai/p/4659400.html

时间: 2024-10-06 01:17:43

Java编程思想学习(七) 抽象类和接口的相关文章

Java编程思想学习第一天

今天开始正式学习Java编程思想,把遇到的一些比较经典的语句记录下来,作为自己学习的一份成果! 一. 面向对象的基本特性: 第一:万物皆为对象        第二:程序是对象的集合,他们通过发送消息来告知彼此所要做的   第三:每个对象都有自己的由其他对象所构成的存储   第四:每个对象都拥有其类型   第五:某一特定类型的所有对象都可以接收同样的消息   对象具有状态.行为和标识 二. 每个对象都提供服务      1. 将对象想象为一个服务提供者,程序本身将向用户提供服务 2. 将对象想象为

【Java编程思想--学习笔记(一)】访问控制-包

Java编程思想–学习笔记(一) 访问控制(或隐藏具体实现)与"最初的实现并不恰当"有关. 1.包:库单元 我们之所以要导入包,就是要提供一个管理名字的空间机制. 每个java文件只能有一个public类.其他私有类为主public·类提供支持. 1.1 代码组织 与编译型语言不同,java可运行程序是一组可以打包并压缩成java文档文件(JAR,使用Java的jar文档生成器)的.class文件. 使用package和import关键字,使得不会出现名称冲突问题. 注意:java包的

java编程思想学习(1)

Smalltalk 这是第一种成功的面向对象程序设计语言,也是Java 的基础语言.Smalltalk (java的基础语言)的五大基本特征: (1) 所有东西都是对象.可将对象想象成一种新型变量:它保存着数据,但可要求它对自身进行操作.理论上讲,可从要解决的问题身上提出所有概念性的组件,然后在程序中将其表达为一个对象. (2) 程序是一大堆对象的组合:通过消息传递,各对象知道自己该做些什么.为了向对象发出请求,需向那个对象"发送一条消息".更具体地讲,可将消息想象为一个调用请求,它调

JAVA编程思想学习笔记——第一章 对象导论

搞了一年多java,野路子出身,发现java基础这块还是相当的薄弱!故决定学习<Java编程思想>这本书.在此把学习的知识点记录下! 面向对象的五大特性 1.万物皆为对象 2.程序是对象的集合,它们通过发送消息来告诉彼此所要做的 3.每个对象都由自己的由其它对象所构成的存储 4.每个对象都拥有其类型 5.某一特定类型的所有对象都可以接收同样的信息  单根继承结构 所有的类都继承自单一的基类,Object.在单根集成结构中的所有对象都具有一个公用接口,所以他们归根到底都是相同的基本类型.单根集成

【java编程思想--学习笔记(四)】对象导论

写这篇博客的前言: 长话短说,我希望通过阅读<java编程思想>来使我的代码 简洁可用 . 目的的层次不同,首先具体的目标是,了解Java的特性和巩固Java的基础. 更抽象的目的如下: 1.期待以巩固基础的方式,使代码优美,简洁,高效. 2.使自己写的模块能够开放适度,好用. 3.形成一种对代码是否优美的审美观. 于是<Java编程思想>第一章 对象导论 由此开始. 1.1 抽象过程 java 相对于命令式语言的优势在于只针对于待解问题建模.后者所做的主要抽象要求所做问题基于计算

[Java编程思想-学习笔记]第3章 操作符

3.1  更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("Hello, world"); 我们都会感觉太冗长了,能不能简单一些呢?静态导入可以省略掉System,就像这样 import static java.lang.System.*; public class Hello { public static void main(String[] args) {

Java编程思想学习(十二) 数组和容器

一.数组 1).数组的多种初始化方式 下面总结了初始化数组的多种方式,以及如何对指向数组的引用赋值,使其指向另一个数组对象.值得注意的是:对象数组和普通数组的各种操作基本上都是一样的:要说有什么不同的话就是对象数组默认值为null,而基本数组视本身情况而定. 1 package lkl; 2 3 import java.util.Arrays; 4 5 ///下面演示了数组的初始化 6 //包括对象数组和普通数组 7 class Base{ 8 private static long count

【java编程思想--学习笔记(三)】访问控制-接口实现与类的访问权限

接口实现 什么是数据类型? java中将数据和方法包装在类中,隐藏具体的实现,其结果就是一种数据类型.(封装产生数据类型) 联想到八大基本数据类型,都具有上述的特点. 由于数据类型的上述特点,创造者将权限的边界划在数据类型的内部,将希望被访问的数据和方法与不希望被访问到的方法和数据分开,隐藏不希望被访问到的方法和数据,实际上就实现了接口和具体实现的分离. 也就是说,了解一个类如何去用,懂得其内部公开的变量和方法就可以. 类的访问权限 上面讲的都是将访问权限设置在类的内部,也可以将访问权限修饰词放

Java编程思想 学习笔记1

一.对象导论 1.抽象过程 Alan Kay曾经总结了第一个成功的面向对象语言.同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了纯粹的面向对象程序设计方式 1)万物皆对象. 2)程序是对象的集合,它们通过发送消息来告知彼此所要做的.要想请求一个对象,就必须对该对象发送一条消息.更具体的说,可以把消息想象为对某个特定对象的方法的调用请求. 3)每个对象都有自己的由其他对象所构成的存储.换句话说,可以通过创建包含现有对象的包的方式来创建新类型的对象. 4)每个对象都