java抽象类和接口

Transkai      2022-04-27     396

关键词:

一.抽象类

(1)定义

抽象,就是不够具体
在人脑中,很多的概念其实也是抽象的,例如动物,水果
使用了关键词abstract声明的类叫作“抽象类”。

 

(2)语法体现

abstract - 抽象的
可以修饰类也可以修饰方法

1 抽象类不能创建实例,一般用来做为父类,封装子类共有一些属性和方法
2 抽象的父类中经常定义一些抽象方法,用来给子类写重写覆盖,这样子类可以体现不同的实现细节,子类必须重写父类中抽象的方法

除非该子类也是抽象类

abstract class Animal{
private String name;
private int age;

public abstract void sleep();

public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}

public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}

 

 

(3)更多的语法限制

1 abstract不能与final连用:abstract目的是让人家继承的,final:目的是不让人家继承的
2 abstract不能与static连用:abstract修饰的方法是不用实现的抽象方法。static修饰的方法要实现的类方法
3 如果一个类有一个抽象方法,该类就必须定义成抽象类
4 子类继承抽象的父类,必须重写父类中的所有抽象方法,除非这个子类也是抽象类
5 抽象的子类继承抽象父类,那么可以重写父类中的部分抽象方法,或者不重写
6 抽象类可以继承一个非抽象类
7 抽象类里可以没有抽象方法

(4)使用例子

abstract class Printer{
  public abstract void print(Ticket t);
}

Printer p = new ?();
p.print(t);

模板设计模式
  一个模板方法,里面包含多个细节步骤,这些步骤是不知道如何具体实现,给子类实现
public abstract class Template{
  public final void template(){
     m1();
     m2();
     m3();
     m4();
  }
  public abstract void m1();
  public abstract void m2();
  public abstract void m3();
  public abstract void m4();

  
}
  }
 

 

(5)抽象类意义

1 抽象的,高层的类能够代表更宽的范围,不容易出错
2 抽象类可以在后期的需求变化用不同的子类来代替,这样使我们的程序更加灵活

class 派叫号系统{
HPPrinter p = new HPPrinter()
p.print(t);
}

class 派叫号系统2{
BrotherPrinter p = new BrotherPrinter()
p.print(t);
}

class 派叫号系统3{
XxxxPrinter p = new XxxxPrinter()
p.print(t);
}


class 派叫号系统{
Printer p = new ???();
p.print(t);
}

 

二.接口

(1)定义与语法

为什么使用接口?
例子:要求实现防盗门的功能
分析:门有“开”和“关”的功能,锁有“上锁”和“开锁”的功能。
将门和锁分别定义为抽象类
防盗门可以继承门的同时又继承锁吗?如何实现多继承??
如何解决这个问题呢?
1.将门定义为抽象类,锁定义为接口
2.防盗门继承门,实现锁的接口

 

因为java不支持多继承,只能继承一个,所以继承名额是宝贵的,有了接口,就能实现接口,就不用占用宝贵的继承名额了

语法:
public interface MyInterface {
// 所有方法都是:public abstract
public void foo(); //其他方法
}
必须知道的接口特性:
接口不可以被实例化
实现类必须实现接口的所有方法,除非实现类是抽象类。
实现类可以实现多个接口
接口中的变量都是静态常量

(2)语法限制

1 实现一个接口就必须实现这个接口所有方法,除非它是一个抽象类
2 一个类是不能继承多个类(单继承),可以避免很多问题,接口可以继承多个接口
3 类不能继承接口,接口也不能继承类(类继承父类。)
4 一个类可实现多个接口
5 实现接口的方法,访问控制符不能更窄。

(3)使用例子

1.接口是一种约定:大小,针数量。
生活中,我们使用的两相电源插座,规定了:两个接头间的额定电压两个接头间的距离接头的形状
程序设计时面向接口的约定而不考虑具体实现
2.接口表示一种能力



接口表示一种能力。

 

 


需求说明:原始的手机,可以发短信,通电话。随着发展,手机增加了功能:音频、视频播放、拍照、上网。

 

 


接口是一种约定:

 

墨盒和纸张的规格是一种约定 打印机需要遵守这些约定
用面向接口编程的方式开发制定墨盒、纸张的约定或标准
打印机厂商使用墨盒、纸张的标准开发打印机
其他厂商按照墨盒、纸张的标准生产墨盒、纸张
实现步骤:
定义墨盒接口InkBox
定义纸张接口Paper
定义打印机类
实现墨盒接口
实现纸张接口

(4)接口回调

回头调用
一个类依赖接口,这个类可以提前写好,过了很久之后 ,有人需要让这个类去运行,他做为后来者,只需提供一个实现了该接口的类,就可以让这个类去运行。这就是接口回调。

 

 

(5)抽象类和接口的区别(面试)

很多时候我们都将抽象类和接口混淆,如果分不出定义抽象类和接口的时候,最好直接定义为接口,为了保留有限而且宝贵的java单继承天性。

1 语法区别
1)抽象类可以包含具体方法,但接口中所有的方法都必须抽象的
2)一个类只继承一个抽象类 ,但是可以实现多个接口
3)抽象类实现接口,反之,接口不能继承抽象类,接口可以继承多个接口。
4)抽象类定义的成员变量就是普通的实例变量,接口中定义的成员变量会变成静态常量
5) 抽象类可以有具体的方法,这些具体的方法里面就可以写一些共性代码,这样子类就可以继承下来,避免重复代码,有的时候会用抽象类来代替接口

2 语义区别
is a 继承关系
has a 实现关系

interface Alert
报警
abstract Door
打开
关闭
AlertDoor extends Door implements Alert
报警
打开
关闭

接口 Fighter{
fight()
}
学生 implements Fighter{}
study()
fight()
黑社会分子 implements Fighter{}
fight()

接口 Flyable{
fly()
}
飞机 implements Flyable{
fly()
}
鸟 implements Flyable{
fly()
}

超人 implements Flyable{
fly()
}

连接数据库
接口 Driver{
connection()
}

Mysql 驱动 implements Driver{
connection()
}

Oracle 驱动 implements Driver{
connection()
}

Sql Server 驱动 implements Driver{
connection()
}


(6)广义接口定义

1 代表一个类,一个方法,或者java中的interface
2 通信协议
3 数据接口(比如json格式的数据接口)
4 用户界面(用户接口UI = User Interface) UI

 

 

java抽象类和接口

**********************第九章抽象类和接口************************** **************************抽象类**************************一.why什么时候想到使用抽象类需求:矩形、三角形、圆形方法:1.求周长2.求面积3.说出我有几条边4.简单的介绍我自己打印... 查看详情

java抽象类和接口

***********************体会接口的好处*******************************一.可维护、可扩展面向接口编程接口:父类型面向父类编程 二.解耦高内聚、低耦合耦合:类和类之间的关系...只要类和类之间有四种关系就是耦合(关联、继承、实现、... 查看详情

[转]java抽象类和接口

很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题。本文我们将仔细讨论这些话题。在讨论它们之间的不同点之前,我们先看看抽象类、接口各自的特性。抽象... 查看详情

java抽象类和接口

1Java抽象类在了解抽象类之前,先来了解一下抽象方法。抽象方法:一个被声明为abstract而没有具体实现的方法称为抽象方法。abstractvoidtest();//nobodyandabstract  抽象类:如果一个类含有抽象方法,则称这个类为抽象类,抽象类必... 查看详情

java基础5:抽象类和接口

Java基础5:抽象类和接口 1抽象类一般会实现一部分操作,并且留一些抽象方法让子类自己实现,比如Stringbuffer和Stringbuilder的父类abstractStringbuilder。2接口一般指一种规定,比如一个map接口中,可能需要实现增删改查等功能,... 查看详情

java基础-抽象类和接口

抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力。他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别。抽象定义:  抽象就是从多个... 查看详情

java抽象类和接口的区别

 成员区别抽象类:成员变量:可以变量,也可以常量构造方法:有成员方法:可以抽象,也可以非抽象 接口:成员变量:只可以是常量成员方法:只可以抽象 关系区别类与类:继承,单继承 类与接口:实现,单... 查看详情

抽象类和接口

接口是一种特殊的抽象类接口和抽象类的不同点:  1.抽象类中可以有实例属性;而接口中没有实例属性,Java虚拟机会自动给接口的加上publicstaticfianl修饰符,都是公开的静态常量  2.抽象类中可以有实例方法;而接口中没... 查看详情

[java]抽象类和接口

目录抽象类接口1抽象类定义如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来实例化的类,我们称它为抽象类。抽象类的特点抽象类不能被实例化,但可以引用子类对象。子类必须实现抽象类的抽象方... 查看详情

java-抽象类和接口的区别

1、成员区别: -  抽象类    *  成员变量:可以变量,也可以常量    *  构造方法:有    *  成员方法:可以抽象,也可以非抽象 -  接口    *  成员变量:只可以常... 查看详情

java抽象类和接口

***************************接口*********************************一.why需求一直不变的时候可以不使用接口,需求经常发生改变推荐使用接口...软件产品中需求会经常改变,所以一般都要使用接口...体现了可维护、可扩展的优点二.什么是接口一... 查看详情

java—爆肝1w字❤只为弄懂抽象类和接口(代码片段)

抽象类与接口抽象类定义和语法理解抽象类作用抽象类总结:接口概念接口特性注意事项:实现多个接口接口使用实例Clonable接口和深拷贝抽象类和接口的区别?抽象类定义和语法包含抽象方法的类,叫做抽象类... 查看详情

java复习笔记1--抽象类和接口

...一系列是今年7月份至8月份为实习面试所复习的Java功课~抽象类和接口是Java对抽象概念进行定义的2种机制。抽象类一个类没有足够的信息来描述一个具体的对象,需要其他具体的类才支撑它。抽象类体现了数据抽象的四小,是实... 查看详情

java抽象类和接口

一.抽象类(1)定义抽象,就是不够具体在人脑中,很多的概念其实也是抽象的,例如动物,水果使用了关键词abstract声明的类叫作“抽象类”。 (2)语法体现abstract-抽象的可以修饰类也可以修饰方法1抽象类不能创建实例,... 查看详情

java抽象类和接口

 对于抽象类以及接口的概念,大家都容易把这两者搞混,其实我也一样,在听李建忠老师的设计模式时,他也老把抽象类说成接口,弄的我就更糊涂了,所以找了些网上的资料。抽象类是从一系列相关对象中抽象出来的概念... 查看详情

我是如何理解java抽象类和接口的

在面试中我们经常被问到:Java中抽象类和接口的区别是什么?然后,我们就大说一通抽象类可以有方法,接口不能有实际的方法啦;一个类只能继承一个抽象类,却可以继承多个接口啦,balabala一大堆,就好像把标准答案熟练的... 查看详情

java基础5:抽象类和接口(代码片段)

本节主要介绍了抽象类和接口的特性和使用方法。1.抽象类一般会实现一部分操作,并且留一些抽象方法让子类自己实现,比如Stringbuffer和Stringbuilder的父类abstractStringbuilder.2.接口一般指一种规定,比如一个map接口中,可能需要实... 查看详情

java基础5:抽象类和接口

本文主要介绍了抽象类和接口的特性和使用方法。具体代码在我的GitHub中可以找到https://github.com/h2pl/MyTech文章首发于我的个人博客:https://h2pl.github.io/2018/04/24/javase51抽象类一般会实现一部分操作,并且留一些抽象方法让子类自己... 查看详情