耦合问题
OOP要求类内高内聚,类间弱耦合–客户需求变动
public class 农场{
private 冒泡排序 sorter;//农场类和抽象类耦合的,但是不耦合具体的实现类,所以可以在多个实现类之间进行切换
}
1、设计一个能够细分为矩形、三角形、圆形和椭圆形的图形类。定义一些方法,例如初始化、绘制方法等
public abstract class TuXing {
private String name;
public TuXing(String name) {
this.name = name;
}
public abstract void HuiZhi();
}
//以三角形为例
class SanJiao extends TuXing {
double a, b, c;// 三角形三条边
public SanJiao(double... params) {
super("三角形");
if (params != null && params.length > 2) {
this.a = params[0];
this.b = params[1];
this.c = params[2];
} else if (params != null && params.length > 1) {
this.a = params[0];
this.b = this.a;
this.c = params[1];
} else if (params != null && params.length > 0) {
this.a = params[0];
this.b = this.a;
this.c = this.b;
}
}
@Override
public void HuiZhi() {// 具体类中必须提供抽象类中的所有抽象方法的实现,否则当前类必须是抽象类
System.out.println("绘制三角形");
}
}
第二种写法:
public abstract class TuXing {
public abstract String getName();
public void HuiZhi() {
System.out.println("绘制" + getName());
}
}
// 以三角形为例
class SanJiao extends TuXing {
double a, b, c;// 三角形三条边
public SanJiao(double... params) {
super();// 调用父类的带参构造器,否则报错。因为父类中并没有提供无参构造器
if (params != null && params.length > 2) {
this.a = params[0];
this.b = params[1];
this.c = params[2];
} else if (params != null && params.length > 1) {
this.a = params[0];
this.b = this.a;
this.c = params[1];
} else if (params != null && params.length > 0) {
this.a = params[0];
this.b = this.a;
this.c = this.b;
}
}
@Override
public String getName() {
return "三角形";
}
}
2、创建一个交通工具类,声明一个方法获取轮子数量,创建摩托车继承交通工具类,并提供方法的具体实现。定义小轿车继承交通工具类。并在主测试类中进行调用执行
public abstract class Vehicle {
private double velocity;
public final void stop() {
velocity = 0;
}
public abstract int noOfWheel();
}
final class MobileBike extends Vehicle {
@Override
public int noOfWheel() {
return 2;
}
}
class Car extends Vehicle {
@Override
public int noOfWheel() {
return 4;
}
}
class Text {
public static void main(String[] args) {
Vehicle f1 = new MobileBike();
f1.noOfWheel();
Vehicle f2 = new Car();
f2.noOfWheel();
}
}