抽象类

5.1抽象类产生(上标为A)

编写一个类时,会给该类定义一些方法,这些方法是用来描述功能和具体实现的方式,这些方法都有方法体

例如:一个图形类应该有周长的方法,但是不同的图形求周长方法不一样。分析事物,发现共性,就出现了向上抽取。

方法的声名相同,但是方法功能主体不同,这样就可以向上抽取,但只是抽取方法声名,但不抽取方法主体,称这个方法就是抽象方法

抽象函数类必须被abstract关键字修饰,被abstract关键字修饰的类就是抽象类

5.2抽象类&抽象方法的定义

抽象方法定义格式:

public abstract 返回值类型 方法名(参数);

抽象类定义的格式:

abstract class 类名{

}

package com.oracle.demo08;

public  abstract class Developer {

//抽象方法

public abstract void work();

}

package com.oracle.demo08;

public class JavaEE  extends Developer{

public void work() {

System.out.println("JavaEE工程师写JavaEE代码");

}

}

package com.oracle.demo08;

public class Android  extends Developer{

public void work() {

System.out.println("Android工程师写Android代码");

}

}

package com.oracle.demo08;

public class Text {

public static void main(String[] args) {

JavaEE java=new JavaEE();

java.work();

Android android=new Android();

android.work();

}

}

运行结果:

5.3抽象类的特点:

  1. 抽象类和抽象方法都要被abstract修饰,抽象方法一定要定义在抽象类中
  2. 抽象类不可以直接创建对象
  3. 只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类

5.4抽象类的细节问题:

抽象类是一个父类?

是的,不断抽取而来

抽象类中是否可以不定义抽象方法

是的,不让该类创建对象,方法可以直接让子类去使用

Private :私有的方法子类是无法继承的,也不存在覆盖

Abstract和private也是不可以一起使用的

接口

6.1接口概念(上标为I)

接口是功能的集合,接口只描述所应该具备的方法,并没有具体实现,功能的定义和现实分离,优化程序设计

6.2接口的定义

接口定义式需要使用interface关键字,编译之后还是。Class文件

格式:

package com.oracle.demo01;

public interface MyInterface {

//接口中所有成员变量修饰符 public static final

//static 静态:只要被static 修饰的成员 在外界可以直接通过

//类名.成员调用

//final:最终的  被final修饰的变量叫常量 一次赋值终身不变

//接口中所有的方法的修饰符 public abstract

public abstract void a();

}

使用interface代替了原来的class,其他步骤与定义类相同:

接口中的方法均为公共访问的抽象方法

接口中无法定义普通的成员变量

6.3类实现接口(implements)

类与接口的关系为实现关系,即类实现接口。实现使用implements

格式:

package com.oracle.demo01;

public class MyinterfaceImp implements MyInterface {

public void a() {

}

}

在类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要重写该抽象方法,完成具体的逻辑。

接口中定义功能,当需要具有该功能时,可以让类实现该接口,只声明了应该具备

该方法,是功能的声明

在具体实现类中重写方法,实现功能,是方法的具体实现。

6.4接口中成员的特点

1、接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量,其值不能改变。后面我们会讲解static与final关键字

2、接口中可以定义方法,方法也有固定的修饰符,public abstract

3、接口不可以创建对象。

4、子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类。

public: 权限修饰符 公共的 无论在哪里都是可以访问被该修饰符的成员

static: 静态  都可以直接被类名调用, 即类名.变量名(方法名)

final :最终的被 final修饰的变量称为常量,一旦赋值终身不变

package com.oracle.demo01;

public interface MyInterface {

//接口中所有成员变量修饰符 public static final

//static 静态:只要被static 修饰的成员 在外界可以直接通过

//类名.成员调用

//final:最终的  被final修饰的变量叫常量 一次赋值终身不变

//接口中所有的方法的修饰符 public abstract

public static final int num=3;

public abstract void show1();

public abstract void show2();

}

package com.oracle.demo01;

public class MyinterfaceImp implements MyInterface {

public void show1() {

}

public void show2() {

}

}

6.5接口的多实现

接口最重要的体现:解决多继承的弊端。将多继承这种机制在java中通过多实现完成了。

interface Fu1

{

void show1();

}

interface Fu2

{

void show2();

}

class Zi implements Fu1,Fu2// 多实现。同时实现多个接口。

{

public void show1(){}

public void show2(){}

}

怎么解决多继承的弊端

多继承时,当多个父类中有相同功能时,子类调用会产生不确定性。

其实核心原因就是在于多继承父类中功能有主体,而导致调用运行时,不确定运行哪个主体内容。

为什么多实现能解决了呢?

因为接口中的功能都没有方法体,由子类来明确。

6.6类继承类同时实现接口

接口和类之间可以通过实现产生关系,子类通过继承父类扩展功能,通过继承扩展的功能都是子类应该具备的基础功能。

class Fu {

public void show(){}

}

interface Inter {

pulbic abstract void show1();

}

class Zi extends Fu implements Inter {

public void show1() {

}

}

接口的出现避免了单继承的局限性。父类中定义的事物的基本功能。接口中定义的事物的扩展功能。

6.7接口的多继承

多个接口之间可以使用extends进行继承。

interface Fu1{

void show();

}

interface Fu2{

void show1();

}

interface Fu3{

void show2();

}

interface Zi extends Fu1,Fu2,Fu3{

void show3();

}

在开发中如果多个接口中存在相同方法,这时若有个类实现了这些接口,那么就要实现接口中的方法,由于接口中的方法是抽象方法,子类实现后也不会发生调用的不确定性。

6.8接口的思想

举例:我们都知道电脑上留有很多个插口,而这些插口可以插入相应的设备,这些设备为什么能插在上面呢?主要原因是这些设备在生产的时候符合了这个插口的使用规则,否则将无法插入接口中,更无法使用。发现这个插口的出现让我们使用更多的设备。

笔记本案例:

package com.oracle.demo04;

public  interface USB {

public abstract void open();

public abstract void  close();

}

package com.oracle.demo04;

public class Mouse implements USB{

public void open() {

System.out.println("鼠标正在开启");

}

public void close() {

System.out.println("鼠标正在关闭");

}

}

package com.oracle.demo04;

public class Keyboard implements USB {

public void open() {

System.out.println("键盘正在开启");

}

public void close() {

System.out.println("键盘正在关闭");

}

}

package com.oracle.demo04;

public class Computer {

//运行

public void run(){

System.out.println("电脑正在开启");

}

//USB设备功能

public void function(USB usb){

//开启

usb.open();

//关闭

usb.close();

}

//关闭

public void  close(){

System.out.println("电脑正在关闭");

}

}

package com.oracle.demo04;

public class Test {

public static void main(String[] args) {

Computer c=new Computer();

Mouse m=new Mouse();

Keyboard key=new Keyboard();

c.run();

c.function(new Mouse());//c.function(m);

c.function(new Keyboard());//c.function(key);

c.close();

}

}

总结:接口在开发中的它好处

1、接口的出现扩展了功能。

2、接口其实就是暴漏出来的规则。

3、接口的出现降低了耦合性,即设备与设备之间实现了解耦。

6.9接口和抽象的区别

相同点:

位于继承的顶端,用于被其他类实现或继承;

都不能直接实例化对象;

都可以包含抽象方法,其子类都必须覆写这些抽象方法;

区别:

抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;

一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥Java的单继承)

抽象类是这个事物中应该具备的内容, 继承体系是一种 is..a关系

接口是这个事物中的额外内容,继承体系是一种 like..a关系

二者的选用:

优先选用接口,尽量少用抽象类;

需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;

Java抽象类、接口整理的更多相关文章

  1. Java抽象类接口、内部类题库

    一.    选择题 1. Person类和Test类的代码如下所示,则代码中的错误语句是(  C  ).(选择一项)   public class Person { public String nam ...

  2. java 抽象类&接口

    1,抽象类中有构造函数吗? 有,用于给子类对象进行初始化.   2,抽象关键字不可以和那些关键字共存? private 不行 static 不行 final 不行   final关键字: 1,fina ...

  3. java抽象类,接口(接口定义,实现接口,instanceof运算符,对象转换)

    抽象类 在面向对象的概念中,所有的对象都是通过类来表述的,但并不是所有的类都能够完整的描绘对象,如果一个类中没有包含足够的信息来描绘一类具体的对象,这样的类就是抽象类.抽象类往往用来表征对问题领域进行 ...

  4. java 抽象类 接口 区别

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 接口 里面 都是抽象方法. 接口里面的 字段 都是 public static fina ...

  5. java 抽象类与接口的区别 整理

    抽象类与接口的区别 抽象类 包含抽象方法的类就是抽象类,声明的语句:abstract class 必须是public protected 接口 对行为的抽象,声明语句:interface 抽象方法的修 ...

  6. 深入理解Java的接口和抽象类(转)

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  7. 深入理解Java的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  8. java抽象类和接口区别

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  9. Java接口、Java抽象类、C++抽象类的区别

    由于这三种数据类型都是为了创建类层次结构的顶层构架,且用法有些许相似之处,这里简单区分一下: 接口: 接口用interface关键字定义, 名字一般使用-able形式的形容词. 接口通常定义抽象方法和 ...

  10. java抽象类与接口的区别及用法

    java抽象类与接口的区别及用法 一.抽象类里面的方法可以有实现,但是接口里面的方法确是只能声明. 二.接口是设计的结果 :抽象类是重构的结果 . 三.java不支持多重继承,所以继承抽象类只能继承一 ...

随机推荐

  1. JSON in SQL Server 2016

    JSON functions in SQL Server enable you to analyze and query JSON data, transform JSON to relational ...

  2. codeforces525B

    Pasha and String CodeForces - 525B Pasha got a very beautiful string s for his birthday, the string ...

  3. hdu-4825(01字典树)

    题意:中文题意 解题思路:01字典树板子题 代码: #include<iostream> #include<algorithm> #include<cstdio> ...

  4. HDU3507-Print Article-斜率dp入门题

    为了学CDQ分治,从斜率dp和凸包开始做吧.. 代码就是维护一个凸包.利用递增的性质丢掉不合适的点. http://www.cnblogs.com/Rlemon/p/3184899.html 代码学的 ...

  5. 让$this->error()返回json配置

    // 表单请求类型伪装变量'var_method' => '_method',// 表单ajax伪装变量'var_ajax' => '自定义',// 表单pjax伪装变量'var_pjax ...

  6. MT【283】图像有唯一公共点.

    函数$f(x)=\sqrt[n]x(n-\ln x),$其中$n\in N^*,x\in(0,+\infty)$.(1)若$n$为定值,求$f(x)$的最大值.(2)求证:对任意$m\in N^+$, ...

  7. 【博弈论】浅谈泛Nim游戏

    Nim游戏在ACM中碰到了,就拎出来写写. 一般Nim游戏:有n堆石子,每堆石子有$a_i$个,每次可以取每堆石子中$[0,a_i-1]$,问先手是否有必胜策略. 泛Nim游戏:每堆石子有$a_i$个 ...

  8. emwin之小键盘制作

    @2019-01-29 [小记] 小键盘的BUTTON控件由WINDOW控件组织,只需将所用BUTTON控件禁止聚焦即可. 小键盘的BUTTON控件由FRAMEWIN控件组织,将所用BUTTON控件禁 ...

  9. Python里的赋值 拷贝 深拷贝

    import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷贝 d = copy. ...

  10. Think Python 2E中译本 _site

    http://codingpy.com/books/thinkpython2/index.html