Java的Abstraction抽象类/方法-笔记
来源:互联网 发布:电脑管家数据恢复收费? 编辑:程序博客网 时间:2024/06/16 19:38
Java - Abstraction
本文参考这里
- 抽象类
- 抽象方法
抽象类(Abstract Class)
包含 abstract方法
的类就是抽象类,此时抽象类必须使用 abstract
修饰,来表示它是抽象类。
抽象类,使用
abstract
修饰。抽象类可以包含自己的变量、抽象方法、具体方法等(也就是说,类是抽象的,但对成员是否抽象则没有要求)。实际上,抽象类是类和接口的混合。抽象类不能创建实例。
继承抽象类与继承普通类相同,也使用
extends
关键字。但不同的是,子类必须实现抽象类里的abstract
方法,若不能实现则子类也须申明成abstract
类。
语法格式:
/* abstract关键字,申明抽象类 */public abstract class AbstractClassName { // 成员是否抽象,无要求}/* 扩展/继承抽象类(Extending Abstract Class) */public class SubClass extends AbstractClassName { // 这里必须要对父类中的抽象方法进行实现。否则,SubClass也须申明成abstract的}
继承抽象方法的例子:
abstract class MyAbstractClass { public abstract void sayhi();}/* 第一种:对所继承父类中的抽象方法必须实现,否则编译时报错 */class MyClass1 extends MyAbstractClass { // The type MyClass1 must implement the inherited abstract method MyAbstractClass.sayhi() @Override public void sayhi() { // do something }}/* 第二种:把子类也申明成抽象的,否则编译时报错 */abstract class MyClass2 extends MyAbstractClass {}
抽象方法(Abstract Methods)
当我们在类中想要包含一个特定的方法(method),而又暂时不能进行具体实现(implementation)时(例如类Shape里有计算图形面积的方法,但不同的图形其计算公式也不同,就只能将来在具体的类中才去实现),就可以把这个方法申明为 abstract
。
抽象方法没有定义,其函数签名后面直接跟分号,而不是花括号(Abstract method would have no definition, and its signature is followed by a semicolon, not curly braces),即没有函数体。
public abstract class Shape{ public abstract double computeArea(); // 抽象方法无函数体。该抽象方法,导致所在的类也成为了抽象 // Remainder of class}
申明抽象方法有两个结果:
1. 导致所在的类也必须为 abstract
:申明一个抽象方法,导致该抽象方法所在的类成为抽象类。
2. 在子类中,要么必须重写(override)(或说实现)这些抽象方法,要么子类也为abstract
(因为继承得来一个抽象方法,该抽象方法导致所在的类也为抽象,见前面第1条)。最终,在某个子孙类中实现对该抽象方法的重写。否则,类就无法进行实例化,只能为抽象。
public class Triangle extends Shape // 三角形{ double width,height; public double computeArea() // 对抽象方法进行实现 { return width * height / 2.0; } // Remainder of class}public class Rectangle extends Shape // 矩形{ double width,height; public double computeArea() // 对抽象方法进行实现 { return width * height; } // Remainder of class}
- Java的Abstraction抽象类/方法-笔记
- Java的抽象类与抽象方法
- java的抽象类和抽象方法
- Java的抽象类和抽象方法
- JAVA的抽象类和抽象方法
- java的抽象类和抽象方法
- java学习笔记7--抽象类与抽象方法
- 【Java学习笔记】接口 抽象类 抽象方法
- 《黑马程序员》java笔记->【03】没有抽象方法的抽象类
- java 抽象类,抽象方法
- java 抽象类,抽象方法
- Java抽象类抽象方法
- java--抽象类、抽象方法
- java抽象类、抽象方法
- java抽象类抽象方法
- java--抽象类/抽象方法
- java中抽象类与抽象方法的使用问题
- java中抽象类与抽象方法的使用问题
- PowerDesigner(八)-面向对象模型(用例图,序列图,类图,生成Java源代码及Java源代码生成类图)
- NAT的四种类型及检测[转]
- 我的阿里巴巴offer之路
- opengl之vsh、fsh简易介绍+cocos2dx 3.0 shader 变灰
- PowerDesigner(九)-模型文档编辑器(生成项目文档)
- Java的Abstraction抽象类/方法-笔记
- Android UI树的Layout原理
- hdu3746 Cyclic Nacklace(KMP)
- 创建并使用静态库(ar 命令)
- for(int i = 0; i < 10; i++)和ctrl z在VC++6.0和VS2005中的不同表现
- string 构造函数 java
- CString/string 区别及其转化
- 最大子序列问题
- 基于连通图的分裂聚类算法