&6 - 抽象

阅读 25

2022-05-02

第六章

抽象

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成功的关键之一,因为极适合多人同时写一个大程序
但因此,导致代码量膨胀起来很快

精彩评论(0)

0 0 举报