Java中类、抽象类、接口的联系与区别
2017-08-22 19:30
225 查看
类、抽象类、接口是Java中相似而又很不同的知识点。在此记录一下初学者的我对于三者的认识。
抽象类(abstract class)可以理解为类的更加抽象化。比如我们想要从人与猫之间去找共同属性,可以借鉴动物这一抽象类!抽象方法必须存在于抽象类中,但抽象类不一定存在抽象方法(没有抽象方法的抽象类比较少见!);也就是说如果你要写一个抽象方法,那它所在的类也必须定义成抽象的类。为什么要定义抽象方法呢?因为当你做一件事不确定怎么做的时候(实现方式未知)就可以使用抽象方法,比如我们定义动物这一抽象类时无法将吃饭这一方法完全实现,因为动物中的人和猫吃饭方式与要吃的东西不同。
接口(interface)可以理解为将抽象又向前迈进了一步!在我们的印象中,USB、OTG等接口是用于设备间连接的,可插拔的桥梁。Java中的接口与之类似,它只是给我们的类添加附属功能,并且是”可插拔的”;另外,我们也知道某一确定的接口规格都是相同的,且连接的设备的具体功能不同。因此,Java接口中必须全是抽象方法(未实现的方法)和final常量!
类中可以(但不必须)有属性和方法,比如说人这一个类:有两个眼睛,会学习!
类只能继承一个父类,但可以有多个接口实现。
一般格式
[修饰符] class <类名> [extends 父类名] [implements 接口列表]{ }
修饰符:public、abstract、final
代码实现
抽象类:
抽象类中可以(但不必须)有普通的方法,抽象方法,内部变量。抽象类不能实例化对象,只能被继承!继承它的子类如果要成为普通类(能实例化对象)的话,必须全部实现其父类抽象类的全部抽象方法,否则子类也是抽象类!
接口:
接口中只允许存在public的静态常量、抽象方法!其修饰限定符可以省略,编译器会为我们自动补全!
简单介绍
类(class)可以理解为将某一类事物的共同属性或行为进行归纳抽象。比如学生、医生都是特定的类,他们是可以实例化成对象的。抽象类(abstract class)可以理解为类的更加抽象化。比如我们想要从人与猫之间去找共同属性,可以借鉴动物这一抽象类!抽象方法必须存在于抽象类中,但抽象类不一定存在抽象方法(没有抽象方法的抽象类比较少见!);也就是说如果你要写一个抽象方法,那它所在的类也必须定义成抽象的类。为什么要定义抽象方法呢?因为当你做一件事不确定怎么做的时候(实现方式未知)就可以使用抽象方法,比如我们定义动物这一抽象类时无法将吃饭这一方法完全实现,因为动物中的人和猫吃饭方式与要吃的东西不同。
接口(interface)可以理解为将抽象又向前迈进了一步!在我们的印象中,USB、OTG等接口是用于设备间连接的,可插拔的桥梁。Java中的接口与之类似,它只是给我们的类添加附属功能,并且是”可插拔的”;另外,我们也知道某一确定的接口规格都是相同的,且连接的设备的具体功能不同。因此,Java接口中必须全是抽象方法(未实现的方法)和final常量!
语法说明
类:类中可以(但不必须)有属性和方法,比如说人这一个类:有两个眼睛,会学习!
类只能继承一个父类,但可以有多个接口实现。
一般格式
[修饰符] class <类名> [extends 父类名] [implements 接口列表]{ }
修饰符:public、abstract、final
代码实现
class People{ int eyesCount = 2; void study(){ Syste.out.println("我会学习!"); } }
抽象类:
抽象类中可以(但不必须)有普通的方法,抽象方法,内部变量。抽象类不能实例化对象,只能被继承!继承它的子类如果要成为普通类(能实例化对象)的话,必须全部实现其父类抽象类的全部抽象方法,否则子类也是抽象类!
abstract class People{ int eyesCount = 2; abstract void study(); void eat(){ } }
接口:
接口中只允许存在public的静态常量、抽象方法!其修饰限定符可以省略,编译器会为我们自动补全!
interface Test{ int a = 1; //等价于public static final int a = 1; void eat(); //等价于public abstract void eat(); }
举例介绍
小明(对象)是一个小学生(类),他的小学数学很好(属性)。他的邻居大明(又一个对象)是一个大学生(又一个类),就读电子学专业,高数已挂,他们两个总是在一起玩王者荣耀。大明利用课余时间把驾照(额外技能)考了下来。他的一个同学大华很喜欢计算机编程,自学了Java(又一个额外技能!),喜欢一个人玩守望先锋娱乐。三个人都睡觉很晚(共同属性)!代码实现
package io.github.xiaozheng243.Test; //当存在不知如何实现的的方法时使用抽象对象,但也有些方法知道如何实现 //不同阶段的学生学的东西不同,所以使用抽象方法,但都需要睡觉 abstract class Student { abstract void study(); void sleep() { System.out.println("我需要睡觉!"); } Student() { study(); sleep(); } } // 接口中必须全是抽象方法和final static常量,且是public的,但public和abstract可以省略,编译器会自动添加 // 开车这个技能并不是每个大学生都会,因此,额外的技能在面对一个群体中的某一个对象时是"可插拔的" // 我们不需要知道他们是如何开的车,只需要知道他会开车就行了,因此开车不需要在接口中实现 interface drivingLicense { // 驾照数量,一般只有一个,是常量! public static final int num = 1; public abstract void drive(); } interface Program { public abstract void javaProgram(); } // 不确定他玩的游戏类型 interface Game { public abstract void playGame(); } // 类可以继承父类的同时实现接口 class Pupil extends Student implements Game { void study() { System.out.println("我会小学数学!"); } public void playGame() { System.out.println("我还会玩王者荣耀!"); } Pupil() { super(); playGame(); } } class CollegeStudent1 extends Pupil implements drivingLicense { void study() { System.out.println("高数已挂!"); } public void drive() { System.out.println("我还会开小汽车!"); } CollegeStudent1() { super(); drive(); } } class CollegeStudent2 extends Student implements Program, Game { void study() { System.out.println("高数很简单嘛!"); } public void playGame() { System.out.println("我还会玩守望先锋!"); } public void javaProgram() { System.out.println("我还会java编程!"); } CollegeStudent2() { super(); javaProgram(); playGame(); } } public class Test { public static void main(String[] args) { // Pupil xiaoMing = new Pupil(); new Pupil(); System.out.println(); // CollegeStudent1 daMing = new CollegeStudent1(); new CollegeStudent1(); System.out.println(); // CollegeStudent2 daHua = new CollegeStudent2(); new CollegeStudent2(); } }
相关文章推荐
- Java学习笔记 --- 抽象类和接口的区别与联系
- 接口与抽象类的区别和联系
- 接口,接口与抽象类的区别与联系
- 接口和抽象类的联系和区别
- Java中类、抽象类、接口之间的区别和联系。
- C++中的抽象类以及接口的区别联系
- 抽象类和接口的区别与联系
- 抽象类与接口的区别与联系
- 抽象类和接口联系与区别--转
- 接口和抽象类的区别和联系
- 虚函数,抽象方法,抽象类,接口的区别和联系
- 抽象类和接口联系与区别
- C++中的抽象类以及接口的区别联系
- C++中的抽象类以及接口的区别联系
- 抽象类和接口联系与区别
- 抽象类和接口联系与区别
- 抽象类和接口联系与区别
- 接口和抽象类的区别与联系
- 抽象类与接口的区别与联系
- 面向对象机制之抽象类和接口联系与区别