第08章.抽象类、接口

合集下载

接口和抽象类的区别和作用(功能、用途、好处)

接口和抽象类的区别和作用(功能、用途、好处)

接⼝和抽象类的区别和作⽤(功能、⽤途、好处)接⼝:抽象类和接⼝亲兄弟,但是有嫡出庶出的区别总结了4点接⼝存在的意义:1、重要性:在Java语⾔中, abstract class 和interface 是⽀持抽象类定义的两种机制。

正是由于这两种机制的存在,才赋予了Java强⼤的⾯向对象能⼒。

2、简单、规范性:如果⼀个项⽬⽐较庞⼤,那么就需要⼀个能理清所有业务的架构师来定义⼀些主要的接⼝,这些接⼝不仅告诉开发⼈员你需要实现那些业务,⽽且也将命名规范限制住了(防⽌⼀些开发⼈员随便命名导致别的程序员⽆法看明⽩ 3、维护、拓展性:⽐如你要做⼀个画板程序,其中⾥⾯有⼀个⾯板类,主要负责绘画功能,然后你就这样定义了这个类。

可是在不久将来,你突然发现这个类满⾜不了你了,然后你⼜要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地⽅可能有引⽤他,这样修改起来很⿇烦。

如果你⼀开始定义⼀个接⼝,把绘制功能放在接⼝⾥,然后定义类时实现这个接⼝,然后你只要⽤这个接⼝去引⽤实现它的类就⾏了,以后要换的话只不过是引⽤另⼀个类⽽已,这样就达到维护、拓展的⽅便性。

4、安全、严密性:接⼝是实现软件松耦合的重要⼿段,它描叙了系统对外的所有服务,⽽不涉及任何具体的实现细节。

这样就⽐较安全、严密⼀些(⼀般软件服务商考虑的⽐较多)。

那么什么是接⼝呢?接⼝是⼀种能⼒1:接⼝的命名规则与类型不同。

如果修饰符是public。

则该接⼝在整个项⽬中可见,如果省略修饰符则该接⼝只能在该包可见2:接⼝中可以定义常量,不能定义变量,接⼝中的属性都会⾃动⽤public static final修饰,即接⼝中的属性都是全局静态常量,接⼝中的常量必须在定义时指定初始值3:接⼝中所有的⽅法抽象⽅法。

接⼝中的⽅法都会⾃动⽤public abstract修饰。

即接⼝中只有全局抽象⽅法,4:和抽象类⼀样,接⼝不能被实例化,接⼝中不能有狗构造⽅法5:接⼝之间可以通过extends 实现继承关系,⼀个接⼝可以继承多个接⼝。

什么是抽象类什么是接口两者有什么区别?如何使用它

什么是抽象类什么是接口两者有什么区别?如何使用它

什么是抽象类什么是接⼝两者有什么区别?如何使⽤它⼀、抽象类:抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象⽅法,这是普通类所不能的。

抽象⽅法只能声明于抽象类中,且不包含任何实现,派⽣类必须覆盖它们。

另外,抽象类可以派⽣⾃⼀个抽象类,可以覆盖基类的抽象⽅法也可以不覆盖,如果不覆盖,则其派⽣类必须覆盖它们。

⼆、接⼝:接⼝是引⽤类型的,类似于类,和抽象类的相似之处有三点:1、不能实例化;2、包含未实现的⽅法声明;3、派⽣类必须实现未实现的⽅法,抽象类是抽象⽅法,接⼝则是所有成员(不仅是⽅法包括其他成员);另外,接⼝有如下特性:接⼝除了可以包含⽅法之外,还可以包含属性、索引器、事件,⽽且这些成员都被定义为公有的。

除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。

⼀个类可以直接继承多个接⼝,但只能直接继承⼀个类(包括抽象类)。

三、抽象类和接⼝的区别:1.类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.⽽接⼝只是⼀个⾏为的规范或规定,微软的⾃定义接⼝总是后带able字段,证明其是表述⼀类类“我能做。

”.抽象类更多的是定义在⼀系列紧密相关的类间,⽽接⼝⼤多数是关系疏松但都实现某⼀功能的类中.2.接⼝基本上不具备继承的任何具体特点,它仅仅承诺了能够调⽤的⽅法;3.⼀个类⼀次可以实现若⼲个接⼝,但是只能扩展⼀个⽗类4.接⼝可以⽤于⽀持回调,⽽继承并不具备这个特点.5.抽象类不能被密封。

6.抽象类实现的具体⽅法默认为虚的,但实现接⼝的类中的接⼝⽅法却默认为⾮虚的,当然您也可以声明为虚的.7.(接⼝)与⾮抽象类类似,抽象类也必须为在该类的基类列表中列出的接⼝的所有成员提供它⾃⼰的实现。

但是,允许抽象类将接⼝⽅法映射到抽象⽅法上。

8.抽象类实现了oop中的⼀个原则,把可变的与不可变的分离。

抽象类和接⼝就是定义为不可变的,⽽把可变的座位⼦类去实现。

类、抽象类、接口、继承、实现

类、抽象类、接口、继承、实现

类、抽象类、接⼝、继承、实现Java|菜鸟教程类、抽象类、接⼝、继承、实现类的修饰符可以有——访问修饰符:public对所有类可见、 protected对同⼀包内的类和所有⼦类可见、 default(即默认,什么也不写): 在同⼀包内可见,不使⽤任何修饰符。

——⾮访问修饰符:static、 final、 abstract抽象类的定义是: abstract classpublic abstract class 抽象类名称{ ... }抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员⽅法和构造⽅法的访问⽅式和普通类⼀样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使⽤。

如果你想实现⼀个⽅法,这个⽅法能够在不同⼦类中实现不同的⽅法内容。

可以在⽗类定义抽象⽅法,⽤abstract关键字修饰⽅法,⽅法后⾯不添加⼤括号直接⽤分号结束(例如 public abstract double Compute();)。

如果⽗类有抽象⽅法,⼦类必须对这个抽象⽅法进⾏重写,除⾮这个⼦类依然是⼀个抽象类。

注意,构造⽅法和static修饰的⽅法不能定义为抽象⽅法。

抽象类中可以没有抽象⽅法,当时有抽象⽅法的只能是抽象类。

接⼝的修饰符:public和abstract接⼝中的成员变量只能是 public static final 类型的。

接⼝中的⽅法会指定为 public abstractpublic interface 接⼝名称 [extends 其他的接⼝名] { // 声明变量 // 抽象⽅法}顺便⼀提:1、synchronized 和 volatile也是修饰符,⽤于线程。

2、标记接⼝在⽂末提了⼀下抽象类和接⼝的区别1. 抽象类中的⽅法可以有⽅法体,就是能实现⽅法的具体功能,但是接⼝中的⽅法不⾏。

2. 抽象类中的成员变量可以是各种类型的,⽽接⼝中的成员变量只能是 public static final 类型的。

抽象类和接口区别用法

抽象类和接口区别用法

引言一个软件设计的好坏在很大程度上取决于它的设计模式,而任何一个设计模式都是和抽象分不开的。

从面向对象设计思想来看,复用的重点应该是抽象层的复用,而不是具体某个代码块的复用。

Java抽象类和接IEI代表的就是抽象类型,是我们需要提出的抽象层的具体表现。

二者作为实现抽象层定义的两种重要机制具有很大的相似性,但在实际应用中又有本质的区别。

1抽象类与接口的概念l,1什么是抽象类在面向对象的概念中,所有的对象都是通过类来描绘的,但并不是所有的类都是用来描绘对象的。

如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类用来表示我对问题领域进行分析后得出的抽象概念,是对一系列看上去不同、但本质上相同的具体概念的抽象。

比如我们要开发一个管理乐器的软件,会发现问题领域存在着笛子、古筝等一些具体概念,它们是不同的,但都属于乐器,这里的乐器就是一个抽象概念。

下面将乐器定义为抽象类:abstract class Instrument{pub1ic abstract void play();public abstract void adjust()}public String what(){return ‘‘Instrument”I}}我们知道,类可以被实例化生成多个对象来使用,但抽象类不能被实例化,因为它包含了没有方法体只有方法声明的抽象方法。

如上例中的play()和adjust(),没有提供任何实现,因为每一种乐器的演奏和调节方式都是不同的,所以这些方法的实现细节只能在具体乐器中体现。

因此抽象类必须被继承,其中的抽象方法是强制子类必须实现的。

1.2什么是接口(J av a编程思想》中认为接口是纯的抽象类,即接口也是抽象的、不能被实例化的,更重要的是接口中的方法都是抽象的,这些方法要到实现这个接口的类中去实现。

接口的本质是在classes之间建立起一个协议,它只负责规定执行这个协议的类要实现哪几个方法,具体如何实现是由各个实现类自己决定的。

抽象类与接口及多态

抽象类与接口及多态

2. 1.接口与实现接口的类 1.接口与实现接口的类
声明接口
[public] interface 接口 [extends 父接口] 父接口] { [public] [static] [final] 数据类型 成员变量=常量值; 成员变量=常量值; [public] [abstract] 返回值类型 成员方法[(参数列表)]; 成员方法[(参数列表)]; } 例如, public interface Plane1 //平面图形接口 //平面图形接口 { public abstract double area(); //计算面积 //计算面积 }
PlaneGraphics2 g1 = new Rectangle2(10,20);
3. 用接口实现多重继承
一个类可以(而且只能)继承一个父类并实现多个接口 一个类可以(而且只能)继承一个父类并实现多个接口
父类 继承 子类1 继承 子类2
父类 继承
接口1 实现 子类 实现
接口2
接口1 实现 类
接口2 实现
接口补充说明
接口中可以有数据成员,这些成员默认都 是public static final。 final。
Math.java interface Math { double PI=3.1415926; } class Arithmetic implements Math { double roundArea(double radius) { return PI*radius*radius; } } class Student { public static void main(String[] args) { Arithmetic a=new Arithmetic(); System.out.println(a.roundArea(3)); System.out.println(Math.PI); System.out.println(Arithmetic.PI); System.out.println(a.PI); } }

抽象类和接口等理解

抽象类和接口等理解

抽象类和接⼝等理解简单介绍⼀下抽象类和接⼝?1.抽象类中的抽象⽅法前⾯有默认的abstract修饰,不能⽤其他修饰符去修饰,原因是:抽象⽅法中没有⽅法体,是⽤来被继承的,所以private修饰符没有作⽤,static修饰符可以直接使⽤类名来调⽤访问该⽅法,抽象⽅法⽤static修饰就没有意义,因为可以直接⽤类名来调⽤了;synchronized是为该⽅法添加⼀个锁,如果该关键字修饰的是⼀个static⽅法,则使⽤的锁就是class变量的锁,如果修饰的是类⽅法,则使⽤this变量锁,但是抽象类不能实例化对象,因为该⽅法不是在该抽象类中实现的,锁应该归其⼦类所有,所以抽象类⽅法不能⽤synchronized修饰符修饰。

(为啥不能⽤native修饰抽象⽅法):因为native修饰符和abstract修饰符本⾝就存在⼀种冲突,他们都是⽅法的声明,只不过native是把⽅法实现交给了本地系统,abstract是把⽅法的实现交给了⼦类,如果同时存在,那么就不确定到底是交给了本地还是⼦类,到底是谁来实现这个⽅法。

2.接⼝是⼀个特殊的抽象类,接⼝中的⽅法全部是抽象⽅法abstract,但其前⾯的abstract可以省略,所以抽象类中的抽象⽅法不可以⽤的修饰符这⾥也不可以⽤,(还存在⼀个protected修饰符???)因为定义接⼝就是为了让所有需要的类去实现,不只是其⼦类,但是要⽤public去修饰,接⼝可以去继承⼀个已有的接⼝。

抽象类中抽象⽅法和接⼝的使⽤:1.相同点:都不能被实例化,都包含抽象⽅法2.不同点:(1):接⼝只能包含抽象⽅法,抽象类可以包含普通⽅法(2):接⼝中不能定义静态⽅法,抽象类可以(3):接⼝中不能定义普通属性,只能定义静态常量属性,抽象类可以(4):接⼝中不包含构造器,抽象类可以(不是⽤于创建对象⽽是让⼦类完成初始化)(5):接⼝可以多继承,抽象类只能单继承(只能有⼀个直接⽗类)总结:接⼝中的所有⽅法全是抽象⽅法只能是public abstract修饰,属性默认public static final修饰,抽象类除了包含抽象⽅法外和普通⽅法⽆区别。

JAVA_实验8 抽象类和接口

JAVA_实验8 抽象类和接口

实验八:抽象类和接口
【实验目的】
1.熟练掌握类的继承的概念。

2.掌握抽象类abstract的概念。

3.掌握接口interface的概念。

【实验地点】科技楼206
【课时安排】2课时
【实验内容】
1.定义一个抽象类--Shape,该类有求面积getArea和周长getPerimeter两个抽象方法。

该抽象类派生三角形Triangle、矩形Rectangle、圆Circle三个子类,为各个子类实
现抽象类的方法,并为这些子类编写合适的属性和构造方法。

编写程序分别创建三
角形、矩形、圆对象,并输出各个对象的面积和周长。

2.定义一个接口Drawable,该接口如下:
public interface Drawable{
public void draw();
public boolean isVisible();
}
对第一题中的三个派生子类,分别实现Drawable接口,并对创建的对象调用其实
现的接口方法。

(对于方法的实现可以尽量简单,如draw方法可以简单的打印出:“某某类的draw方法”)
【作业】
将第1题实验内容写实验报告。

接口-抽象类

接口-抽象类
private abstract void Байду номын сангаасun() 这样定义可以吗?
答案:private 是私有的方法,不能被子类所继承(不 能被子类重写)abstract 是抽象方法,必须被继承(被
子类重写)
abstract 修饰符
抽象类可以被final修饰吗? 答案:不可以。
– 因为抽象类只能声明,不能实例化,只允许创建子类,它的 抽象方法才能被实现。
3、具体实现:
public interface Printer { public void print(String content);
}
面向接口编程的示例 4-3
采用面向接口编程的方式实现,以下是三个步骤中的第二步:
实现Java接口
1、分析: 已经抽象出Java接口PrinterFace,并在其中定义了print方法 黑白、彩色打印机对print方法有各自不同的实现
抽象类与接口
易可导航
abstract 修饰符
由abstract修饰的方法叫抽象方法; 抽象方法语法:
public abstract void fun();//无方法体 抽象方法必须声明在抽象类中(含有抽象方法的类, 必须定
义为抽象类)
由abstract修饰的类叫抽象类 声明抽象类语法:
abstract class{…… } 使用:父类中的某些方法不包含任何逻辑,并需要 在子类中重写,子类提供这种抽象方法的实现细节
默认都是public abstract 类型的。
JAVA接口
一个JAVA接口是一些方法特征的集合,但是没有方法
的实现。 public interface PCI {
public void start();
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Swimmer swimmer=new Human("贾斯汀"); Shark shark=(Shark)swimmer; 编译能通过,但执行时有错误:ng.ClassCastException
Page 18
接口
理解“接口能实现多态”
需求:在主类中,写个static的doswim()方法,调用各类对象的
Page 12
接口
public class Human implements Swimmer { private String name; public Human(String name){ =name; } public String getName(){ return name; } @Override public void swim(){ System.out.println("人类游泳"); } } 接口的好处在于:能实现所有 东西都会游泳这种行为。改进 了程序的框架,使代码更富有 弹性。
Page 22
接口
类可以同时继承某个类,并操作某些接口
public class FlyingFish extends Fish implements Flyer { private String name; public FlyingFish(String name) { 注意:先后顺序 super(name); } @Override public void fly(){ System.out.println("飞鱼会飞"); } @Override public void swim(){ System.out.println("飞鱼游泳"); } }
[public] interface 接口名称{ [权限设定] abstract 方法类型 方法名(参数列表) } public interface Swimmer { public abstract void swim(); } 在声明接口时方法上的权限设定可以省略,如果省略的话, 预设是“public,不省略只能是public或者abstract。
Page 13
接口
public static void main(String[] args) { Shark shark=new Shark("兰尼"); Human human=new Human("贾斯汀"); Submarine submarine = Submarine("黄色1号"); shark.swim(); human.swim(); submarine(); }
public class Anemonefish extends Fish { public Anemonefish(String name){ super(name); } @Override public void swim(){ System.out.println("小丑鱼游泳"); } }
Page 7
抽象类总结
在定义Java方法时可以只给出方法头,而不必给出方法体、即方法实现的细 节,这样的方法被称为抽象方法。 抽象方法必须使用关键字abstract修饰,包含抽象方法的类必须声明为抽象 类。 Java语言规定,子类必须实现其父类中的所有抽象方法,否则该子类也只能 声明为抽象类。 抽象类不能被实例化 抽象类主要是通过继承、再由其子类发挥作用的,其作用包括两方面: 代码重用 规划 其他特性: 抽象类中可以不包含抽象方法; 子类中可以不全部实现抽象父类中的抽象方法,但此时子类也只能声 明为抽象类; 父类不是抽象类,但在子类中可以添加抽象方法,但子类需声明为抽 象类; 抽象类中可以声明static属性和方法;
第八章 抽象类、接口
Page 1
课程内容
抽象类
接口
枚举类型
Page 2

抽象
抽象的作用是从一类相似实体中抽取共性的东西,比如 任何电器都有一个播放功能,只是具体播放的内容不同 而已。 电器 (play)
电视机 (play video)
Page 3
影碟机 (play sound)
抽象类
swim()方法,目的是让所有会游的东西都游起来
Page 19
接口
public class Test {
public static void main(String[] args) { doSwim(new Anemonefish("尼莫")); doSwim(new Shark("兰尼")); doSwim(new Human("贾斯汀")); doSwim(new Submarine("黄色1号")); } }
Page 24
接口
public class Service implements Some1,Other{ @Override public void execute(){ System.out.println("execute()"); } @Override public void doSome(){ System.out.println("doSome()"); } @Override public void doOther(){ System.out.println("doOther()"); } }
合并,优化
Page 20
public static void doSwim(Swimmer swimmer){ swimmer.swim(); } 只要操作Swimmer接口,都可以使用 doSwim方法,可维护性提高很多
接口
Java中,一个类可以操作两个以上的接口,语法是:
public class 类别名称 implements 接口1,接口2,接口3 { } public interface Flyer { public abstract void fly(); }
接口
分析上述类
存在问题:
代码弹性不足。只是表达出了,所有鱼会游泳。不能表达所有 东西(比如,人、潜水艇等)都会游泳。 问题的根源: 这是由java的继承机制决定的。 改进的方法: 不是某种东西专属的行为,而是所有东西都可以拥有的行为, 将该行为定义为接口。
Page 10
接口
接口用来定义行为,java中可以使用“interface” 关键词定义; 语法为:
Page 21
接口
public class Seaplane implements Swimmer,Flyer { private String name; public Seaplane(String name) { =name; } @Override public void fly(){ System.out.println("海上飞机在飞",name); } @Override public void swim(){ System.out.println("海上飞机航行海面",name); } }
Page 14
接口
使用接口来实现多态
public static void main(String[] args) { Swimmer swimmer1=new Shark("兰尼"); Swimmer swimmer2=new Human("贾斯汀"); Swimmer swimmer3=new Submarine("黄色1号"); swimmer1.swim(); swimmer2.swim(); swimmer3.swim(); }
Page 15
接口
Page 16
接口
Swimmer swimmer=new Shark("兰尼"); Shark shark=swimmer; CAST语法 Swimmer swimmer=new Shark("兰尼"); Shark shark=(Shark)swimmer;
Page 17
接口
在Java中可以创建专门的类来做为父类,这种类被称为
“抽象类”(abstract class)。抽象类有点类似“模板”
的作用,其目的是根据它的格式来创建和修改新的类。
Page 4
抽象类
抽象(abstract)类的概念:用abstract修饰的类称为抽象类,
用abstract 修饰的成员方法称为抽象方法。
public static void doSwim(Fish fish){ fish.swim(); } public static void doSwim(Human human){ human.swim(); } public static void doSwim(Submarine submarine){ submarine.swim(); }
Page 11
接口
接口由类来操作。类操作接口的关键字 是:implements。
操作某接口时,对接口中定义的方法有两种处理方式, 一是操作接口中定义的方法,二是再度将该方法标示 为abstract.
public abstract class Fish implements Swimmer { protected String name; public Fish(String name){ =name; } public String getName(){ return name; } public abstract void swim(); }
Page 5
抽象类
定义
[<修饰符>] abstract class 类名 {
成员变量定义; abstract 返回类型 方法名([参数列表]); 返回类型 方法名([参数列表]){}//非抽象方法 }
相关文档
最新文档