【知晓的丧day拯救计划】java基础学习笔记17 抽象类及模板方法设计模式

笔记来自2019求知讲堂零基础Java入门编程视频教程 https://www.bilibili.com/video/av76235341

抽象类

随着继承层次的加深,子类变得越来越具体,父类就会越来越通用。
类的设计应该保证父类和子类能过共享特征,所以有时候将一个父类设计的非常抽象,以至于它没有办法具体的实例化,这样的类就叫做抽象类。

举一个形象的例子,狗的移动方式是跑,鱼类的移动方式是游,鸟类的移动方式是飞,那他们如果有一个父类动物,动物类中也有一个移动方法,而这个方法没办法像子类一样具体描述出来。

用abstract关键字修饰的类就叫做抽象类。
用abstract也可以修饰方法,即为抽象方法。

  • 抽象类不能被实例化,是用来被继承的。
  • 抽象类可以有构造方法,但不能用来new实例,只能用来被子类调用
  • 抽象方法只有声明,没有方法的实现(没有大括号,直接以分号结束)
  • 含有抽象方法的类必须声明为抽象类
  • 抽象类的子类必须重写父类中的抽象方法,如果没有重写全部抽象方法,仍为抽象类,需要用abstract修饰
  • 不能用abstract修饰属性、私有方法、构造器、静态方法、final方法。
//抽象父类,有两个抽象方法
public abstract class Animal {
	public abstract void test(); 
	public abstract void move(); 
}

//子类只重写了一个抽象方法,还有一个没有重写,所以这个类也必须是抽象类
abstract class Dog extends Animal{

	@Override
	public void move() {
		System.out.println("狗的移动方式是跑");
		
	}	
}

//父类层级上所有抽象方法全部重写,才可以写成非抽象类,当然根据需要也可以依然作为抽象类
class TestDog extends Dog{

	@Override
	public void test() {
		System.out.println();
		
	}
	
}

模板方法设计模式(TemplateMethod)

抽象类作为多个子类的通用模板
子类在抽象类的基础上进行扩展、改造

当功能内部一部分实现是确定的,但另一部分实现是不确定的,就可以把不确定的部分作为一个抽象方法,让子类去实现。
编写一个抽象父类,父类提供了多个子类的通用方法,并把一个或多个方法留个子类实现,这就是一种模板模式。

例如,父类中getTime()方法想要实现获取一段代码的运行时间,但不确定这段代码是什么,就可以作为抽象方法让子类去实现。

//父类
abstract public class Template {
	//定义一个抽象方法,存放要计算的代码
	public abstract void code();
	//定义一个不能被子类重写的方法,用来计算时间
	public final void getTime() {
		long start = System.currentTimeMillis();
		code();
		long end = System.currentTimeMillis();
		
		System.out.println("code方法执行的时间:" + (end -start));
	}

}


class TestTmp extends Template{
	//重写方法,提供代码
	@Override
	public void code() {
		int k = 0;
		for (int i = 0; i <5000000; i++) {
			k+=i;
		}
		System.out.println(k);
	}	
}

public class Test2 {
	public static void main(String[] args) {		
		TestTmp t = new TestTmp();
		t.getTime();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值