抽象类 :
作用:解决父类方法的不确定性 :让子类实现抽象方法
//抽象类 abstract 修饰
abstract class Animal{
String name;
int age;
//抽象方法
abstract public void cry();
}
class Cats extends Animal{
public void cry(){
//当一个类继承的是父类是抽象类的话
//需要将父类中的所有抽象方法都实现
System.out.println("miaomiao");
}
}
注意:
- 抽象类是不完整的类,不能够被实例化;
- 抽象类可以没有abstrac方法,
- 一旦类中包含有abstract方法,则必须声明为abstract类;
- 抽象方法不能有主体;
模板设计模式:让类中的方法空出来实现多态,比如统计程序的运行时间:
模版设计模式概述
•模版方法模式就是定义一个算法的骨架,而将具体的算法延迟到子类中来实现l优点
•使用模版方法模式,在定义算法骨架的同时,可以很灵活的实现具体的算法,满足用户灵活多变的需求
缺点
•如果算法骨架有修改的话,则需要修改抽象类
父类中定义抽象方法:
import java.sql.Time;
public abstract class gettime {
public long get_time() {
long start = System.currentTimeMillis();
foo();
long end = System.currentTimeMillis();
return end - start;
}
abstract void foo();
}
子类中定义程序:
public class fortime extends gettime {
@Override
void foo() {
// TODO Auto-generated method stub
for (int i=0;i<10000;i++) {
System.out.println(i);
}
}
}
使用:
public class TEST3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
gettime a = new fortime();
System.out.println(a.get_time());
}
}
装饰设计模式:
装饰设计模式概述
•装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类。是继承的替代方案
优点
•使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意的组合这些功能
缺点
•正因为可以随意组合,所以就可能出现一些不合理的逻辑
public interface phone {
public abstract void call();
}
public class iphone implements phone {
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println("可以打电话了");
}
}
定义装饰:
public abstract class phonedecorate implements phone {
private phone p;
public phonedecorate(phone p) {
this.p = p;
}
@Override
public void call() {
// TODO Auto-generated method stub
this.p.call();
}
}
子类:(根据需求创建可定义多个)
public class ringphonedecorate extends phonedecorate {
public ringphonedecorate(phone p) {
super(p);
// TODO Auto-generated constructor stub
}
@Override
public void call() {
// TODO Auto-generated method stub
System.out.println("听手机铃声");
super.call();
}
}
public class musicphonedecorate extends phonedecorate {
public musicphonedecorate(phone p) {
super(p);
// TODO Auto-generated constructor stub
}
@Override
public void call() {
// TODO Auto-generated method stub
super.call();
System.out.println("listen music");
}
}
调用:
public class test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
iphone p = new iphone();
phonedecorate pd = new ringphonedecorate(p);
pd.call();
phonedecorate pd2 = new musicphonedecorate(p);
pd2.call();
System.out.println("~~~~~~~~");
// 装饰器
//装饰模式可对装饰进行整合
pd = new ringphonedecorate( new musicphonedecorate(p));
pd.call();
}
}
//输出:
听手机铃声
可以打电话了
可以打电话了
listen music ~~~~~~~~
听手机铃声
可以打电话了
listen music