一、abstract
用法:用于修饰类、修饰方法
注意:不能用来修饰属性、构造器、私有方法、静态方法、final的方法、final的类
抽象类
1.此类不能被实例化;
2. 抽象类中一定有构造器,便于子类实例化调用;
3.开发中,都会提供抽象类的子类,让子类实例化,完成相关操作
抽象方法
1.抽象方法只有方法的声明,没有方法体;
2.包含抽象方法的类,一定是一个抽象类,反之,抽象类中可以没有抽象方法的。
abstract class Person{
abstract public void eat();
}
abstract class Man extends Person{
String name;
int age;
public void work(){
System.out.println("男人努力工作");
}
abstract public void walk();
}
class GoodMan extends Man{
public void eat(){
System.out.println("好男人吃的多");
}
public void walk(){
System.out.println("好男人走的快");
}
}
抽象类的匿名子类
public class Test{
public void static void main(String[] args){
//1.创建Person的匿名子类对象
Person p=new Person(){
public void eat(){
System.out.println("男人大口吃肉");
}
public void walk(){
System.out.println("男人霸气的走路");
}
}
method(p);
//2.创建Person的匿名子类的匿名对象
method(
new Person(){
public void eat(){
System.out.println("女人减肥少吃饭");
}
public void walk(){
System.out.println("女人优雅走路");
}
}
);
}
public void static method(Person p){
p.eat();
p.walk();
}
}
abstract class Person{
public abstract void eat();
public abstract void walk();
}
二、模板方法设计模式
定义:抽象类体现的是一种模板方法的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式
解决问题:
>当功能内部的一部分实现是确定的,一部分实现是不确定的。这时可以把不确定的部分暴露出去,让子类去实现
>换句话说,在软件开发中实现了一个算法时,整体步骤是很固定的、通用,这些步骤已经在父类中写好了。但是某些部分易变,异变部分可以抽象出来,供不同子类实现。这就是一种模板模式。
package com.sgg.test;
public class TemplateTest {
public static void main(String[] args) {
Template temp=new subTemplate();
temp.spendTime();
}
}
abstract class Template{
/**
* 某段代码花费的时间
*/
public void spendTime() {
long start=System.currentTimeMillis();
code();
long end=System.currentTimeMillis();
System.out.println("花费的时间为:"+(end-start));
}
public abstract void code();
}
class subTemplate extends Template{
public void code() {
for(int i=1;i<100;i++) {
System.out.print(i+",");
if(i==99) {
System.out.println(i);
}
}
}
}
|