抽象类

一.抽象类的产生原因

由于多态的出现,父类中的方法被子类重写覆盖,不可能被调用到。“用进废退”,由于父类方法不再被使用,所以去掉了方法体,退化为抽象方法。而抽象类就是用来存放没有方法体的抽象方法的。

二.抽象类和抽象方法的定义

抽象类定义:在修饰符后面返回值前面加上abstract。

抽象方法定义:在修饰符后面返回值前面加上abstract,并且删除方法体{}。

public abstract class Demo01 {//抽象类public abstract void method();//抽象方法}

三.抽象方法具备特性

1.抽象方法没有方法体
2.含有抽象方法的类必须是抽象类
3.抽象类中可以暂时没有抽象方法
4.抽象类中的抽象方法跟子类有什么联系?
(1)如果子类完全实现了父类的抽象方法,那么子类可以不用声明为抽象类。
(2) 如果子类没有完全实现父类的抽象方法,那么子类必须声明为抽象类。

四.抽象类的语法规则

1.被abstract修饰的类是抽象类
2.抽象类中可以有抽象方法,也就是被abstract修饰的方法,也可以没有。
3.抽象方法没有方法体,只有方法声明。
4.子类继承抽象类需要重写父类所有的抽象方法,否则,子类也必须声明为抽象类
5.抽象类有构造方法,但是不能被显示调用,也就是不能实例化,或者说抽象类没有对象。
6.抽象类的构造方法只在子类实例化时隐式调用。
7.抽象类的使用一般是作为引用类型,指向非抽象的引用实例,体现出多态。
8.构造方法和静态方法都不能(abstract)抽象修饰
9. 静态方法不能被子类覆盖(重写),一旦声明为抽象方法 将永远没有具体的实现

接口

一.接口的介绍

接口就是提供一种统一的“协议”,而接口中的属性也属于“协议”中的成员,它们是公共的(public)、静态的(static)、最终的常量(final)。接口是比抽象类更加抽象的对外提供服务的功能模块,是没有构造方法不能实例化的。

二.接口的定义语法规则

1.定义一个接口:和定义类的区别在于,将class关键字换成了interface
2.接口中也有成员属性和方法 :
所有的成员属性都是 public static final (公共的静态常量)类型,
所有的方法都是:public abstract (公共的抽象方法)
3.abstract(抽象)只修饰类和方法,不修饰属性和变量。
4.Static(静态)只修饰属性和方法,不修饰局部变量,也就是定义在方法体中的变量。
5.由抽象到具体:接口 > 抽象类 > 类 > 对象

三.接口方法的实现

接口中的方法:抽象方法、静态方法、实例方法(jdk8中加的)


public  interface  Demo01 {//接口public static final int A=0;//属性public abstract void method();//抽象方法public static void method1(){}//静态方法default void method2(){}//实例方法
}

接口与实体类关系:接口是附属于实体类的,实体类可以通过implements来实现接口中的方法,也可以通过定义接口类型的属性来实现接口中的方法。

//实现方法一
public class Demo02 implements Demo01 {@Overridepublic void method() {System.out.println("实现接口中的抽象方法");}
}
//实现方法二
import org.junit.Test;public class Demo02 {private Demo01 demo01;public Demo01 getDemo01() {return demo01;}public void setDemo01(Demo01 demo01) {this.demo01 = demo01;}@Testpublic void Test(){Demo02 d=new Demo02();d.setDemo01(new Demo01() {@Overridepublic void method() {System.out.println("接口中抽象方法的实现");//匿名内部类实现}});}
}

案例:

防盗门案例(一个类多个接口实现)

1.抽象类门有两个抽象方法,关和开;接口锁也有两个抽象方,锁门(lockUp)和开锁(openLock);防盗门类TheftproofDoor,继承门,实现锁接口的抽象方法(共4个)。编写测试类,调用防盗门重写的四个抽象方法。
@Override
public void lockUp() {
System.out.println(“插进钥匙,向左旋转钥匙三圈,锁上了,拔出钥匙。”);
}
@Override
publicvoid openLock() {
System.out.println(“插进钥匙,向右旋转钥匙三圈,锁打开了,拔出钥匙。”);
}
@Override
public void open() {
System.out.println(“用力推,门打开了。”);
}
@Override
public void close() {
System.out.println(“轻轻拉门,门关上了。”);

}


Door.java代码:

package task03;public abstract class Door  implements Lock  {public abstract void open();//开门public abstract void close();//关门
}

Lock.java代码:

package task03;public interface Lock {public abstract void lockUp();//锁门public abstract void openLock();//开锁
}

TheftproofDoor.java代码:

package task03;import org.junit.Test;public class TheftproofDoor extends Door {@Overridepublic void open() {System.out.println("用力推门,门打开了");}@Overridepublic void close() {System.out.println("轻轻拉门,门关上了");}@Overridepublic void lockUp() {System.out.println("使用钥匙开门,锁打开了");}@Overridepublic void openLock() {System.out.println("使用钥匙锁门,门锁上了");}@Testpublic void Test(){open();close();lockUp();openLock();}
}

测试类Demo01.java代码:

package task03;public class Demo01 {public static void main(String[] args) {TheftproofDoor t=new TheftproofDoor();t.open();t.close();t.lockUp();t.openLock();}
}

打印机案例(一个接口多个类实现)

2定义纸张接口paper和墨盒inkbox接口,分别有A4纸和B5纸实现纸张接口,黑白墨盒和彩色墨盒实现墨盒接口。定义打印机类,成员属性是两个接口,和对应的set方法,以及打印方法print.创建测试类,实现:
1、使用黑白墨盒在A4纸上打印
2、使用彩色墨盒在B5纸上打印
/** * 使用墨盒在纸张上打印 */
public void print(){
System.out.println(“使用”+inkBox.getColor()+“墨盒在”+paper.getSize()+“纸张上打印。”);
}

接口Inkbox.java代码:

package task05.jieko;public interface Inkbox {public abstract String method2();
}

接口Peper.java代码:

package task05.jieko;public interface Paper {public abstract String method1();
}

实现类A4.java代码:

package task05.jiekosx;import task05.jieko.Paper;public class A4 implements Paper {@Overridepublic String method1() {return "A4";}
}

实现类A5.java代码:

package task05.jiekosx;import task05.jieko.Paper;public class A5 implements Paper {@Overridepublic String method1() {return "A5";}
}

实现类BlackWhite.java代码:

package task05.jiekosx;import task05.jieko.Inkbox;public class BlackWhite implements Inkbox {@Overridepublic String method2() {return "黑白";}
}

实现类Colour.java代码:

package task05.jiekosx;import task05.jieko.Inkbox;public class Colour implements Inkbox {@Overridepublic String method2() {return "彩色";}
}

实现类Printr.java代码:

package task05;import task05.jieko.Inkbox;
import task05.jieko.Paper;
import task05.jiekosx.A4;
import task05.jiekosx.Colour;public class Printer {private Inkbox method2;private Paper method1;public Inkbox getMethod2() {return method2;}public void setMethod2(Inkbox method2) {this.method2 = method2;}public Paper getMethod1() {return method1;}public void setMethod1(Paper method1) {this.method1 = method1;}public void print(){System.out.println("打印机开始工作");System.out.println("使用"+method2.method2()+"墨盒在"+method1.method1()+"纸张上打印。");}}

测试类Text01.java代码:

package task05;import task05.jiekosx.A4;
import task05.jiekosx.A5;
import task05.jiekosx.BlackWhite;
import task05.jiekosx.Colour;public class Text01 {public static void main(String[] args) {A4 a4=new A4();A5 a5=new A5();BlackWhite b=new BlackWhite();Colour c=new Colour();Printer p1=new Printer();p1.setMethod1(a4);p1.setMethod2(c);p1.print();}
}

java中抽象类与接口介绍相关推荐

  1. Java中抽象类和接口在概念、语法和应用上的区别和关系

    2019独角兽企业重金招聘Python工程师标准>>> 春招开始了,盆友们都忙着准备笔试.准备面试,复习学过的知识点,当然我也不例外,在这里祝每一个"有心人"心想 ...

  2. 关于Java中抽象类和接口的一点思索

    Java中抽象类和接口的一点思索 成员方法上的区别: 1. java中的抽象类可以提供成员方法的实现细节,抽象方法只能是被public和protected来修饰 配合abstract关键字,子类需要实 ...

  3. Java中抽象类和接口之间的区别

    一些受欢迎的访谈问题是"抽象类和接口之间有什么区别","什么时候使用抽象类以及什么时候使用接口". 因此,在本文中,我们将讨论这个主题. 在探讨它们之间的差异之 ...

  4. java中抽象类和接口的作用与区别

    抽象类与接口的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract ...

  5. 详细解析Java中抽象类和接口的区别

    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...

  6. Java中抽象类、接口、父类直接的区别与联系

    抽象类与接口的区别: 1)抽象类是一个只有变量或方法申明的类,这些变量(属性)和方法都是抽象类型的.抽象类没有对方法的实现. 2)接口则是一个只有方法申明.没有方法的实现,接口的方法也同样是抽象方法, ...

  7. 【转】详细解析Java中抽象类和接口的区别

    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...

  8. Java 中抽象类与接口

    Java 抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这个类就是抽象类. 抽象类不能创 ...

  9. 详细解析Java中抽象类和接口的区别(很容易理解错)

    2007-09-28 12:17作者:doublel出处:论坛整理责任编辑:方舟 在Java语言中, abstract class 和interface是支持抽象类定义的两种机制.正是由于这两种机制的 ...

最新文章

  1. python开发环境配置config_manjaro与python开发环境配置
  2. 史上最强轻量级人脸检测,全面超越retinaface
  3. Redis相比memcached
  4. 回溯法(深度优先搜索)
  5. Hello XTCPC
  6. mysql基础_月隐学python第22课
  7. 成为自信的node.js开发者(一)
  8. 悖论对计算机科学影响,数学和计算机科学的核心逻辑悖论
  9. php中将SimpleXMLElement Object数组转化为普通数组
  10. springamqp_SpringAMQP
  11. SQLSERVER 2008 R2下载安装教程
  12. PyTorch笔记 - Dropout: A Simple Way to Prevent Neural Networks from Overfitting
  13. 抽象类可用于创建对象吗_蜈蚣兰,见过吗?可用于口腔炎,鼻窦炎,气管炎,肾盂肾炎...
  14. 联想y7000p麦克风插上耳机声音太小的问题
  15. 数据分析实战项目2:优衣库销售数据分析
  16. android 背景描边,Android告别使用shape标签,自定义实现圆角、背景色、描边Button...
  17. 苹果cms播放器不能全屏播放解决方法
  18. STM32利用SPI读写SD卡的程序详解
  19. [转贴]八岁女童墓志铭:我来过,我很乖~~~~~ (是个人就流泪)
  20. HihoCoder 1245:王胖浩与三角形 三角形边长与面积

热门文章

  1. Lua学习——Coroutine协程
  2. python数据分许基础
  3. 安卓逆向环境检测--模拟器
  4. 纪录片《软件专利的荒谬性》
  5. 一个经典的营销小故事
  6. BPI-R3开发板 - uboot编译
  7. AI辅助瞄准系统开发与实战(三)-竣工
  8. Spring学习总结(四)——表达式语言 Spring Expression Language
  9. MindSpore体验--在Windows10中源码安装
  10. 90后程序员的5年创业总结:什么样的程序员适合创业