第六章
抽象
Shape 公共父类(是Square Circle 一个公共的概念),不管什么形状都会有公共的draw。
一个类中有抽象函数,说明这个类一定是抽象的(这个类是不能产生对象的,不能实例化)
public abstract class Shape {
public abstract void draw(Graphics g);
}
抽象函数——表达概念而无法实现具体代码的函数
抽象类——表达概念而无法构造出实体的类
- 带有abstract修饰符的函数
- 有抽象函数的类一定是抽象类
- 抽象类不能制造对象
- 但可以定义变量
- 任何继承了抽象类的非抽象类的对象可以付给这个变量
实现抽象函数
继承自抽象类的子类必须覆盖父类中的抽象函数
否则该类自己会成为一个抽象类
抽象类:Shape
public abstract class Shape {
public abstract void draw(Graphics g);
public abstract void move(Graphics g);
}
子类:Circle
public class Circle extends Shape {
private int x;
private int y;
private int radius;
public Circle(int x, int y, int radius) {
this.x = x;
this.y = y;
this.radius = radius;
}
@Override
public void draw(Graphics g) {
g.grawOval(x-radius, y-radius, radius*2, radius*2);
}
public void move(Graphics g) {
// TODO Auto-generated method stub
}
}
两种抽象
- 与具体相对(表示一种概念而非实体)
- 与细节相对(表示在一定程度上忽略细节而着眼大局)
数据与表现分离
程序的业务逻辑与表现无关
- 表现可以是图像的也可以是文本的
- 表现可以是当地的也可以是远程的
责任驱动的设计
将程序要实现的功能分配到合适的类/对象中去时设计中非常重要的一环
接口
Java不支持多继承(只有C++允许多继承)
接口是纯抽象类
- 所有的成员函数都是抽象函数
- 所有的成员变量都是public static final
接口规定了长什么样,但是不管里面有什么
public interface Cell {
void draw(Graphics g, int x, int y, int size);
}
实现接口
类用extends,接口用implements
类可以实现很多接口
接口可以继承接口,但不能继承类
接口不能实现接口
面向接口的编程方式
设计程序时先定义接口,再实现类
任何需要再函数间传入传出的一定是接口而不是具体的类
是java成功的关键之一,因为极适合多人同时写一个大程序
但因此,导致代码量膨胀起来很快