成都模板网站建设服务,做网站与网店运营,购物网站建设方案书,深圳航空公司明确设计思想 子类越来越具体#xff0c;父类需要越来越通用 父类和子类保证能够共享特征 父类的设计有时非常抽象#xff0c;以至于它没有具体的实例
抽象类和抽象方法 abstract关键字修饰一个类#xff0c;这个类叫做抽象类 abstract关键字修饰一个方法#xff0c;… 明确设计思想 子类越来越具体父类需要越来越通用 父类和子类保证能够共享特征 父类的设计有时非常抽象以至于它没有具体的实例
抽象类和抽象方法 abstract关键字修饰一个类这个类叫做抽象类 abstract关键字修饰一个方法该方法叫做抽象方法 含有抽象方法的类必须被声明为抽象类 抽象类不能被实例化(不能被new),抽象类是用来被继承的。 抽象类的子类必须重写父类的抽象方法并提供方法体如果未重写全部的抽象方法还有其他抽象方法在子类中则该子类也为抽象类(抽象类的子类可以是抽象类) abstract不能修饰变量、代码块、构造器 abstract不能修饰私有方法、静态方法、final修饰的方法、final修饰的类
解析
抽象类是用来模型化父类无法确定的方法实现而是由子类提供具体实现的对象的类。
例如
所有的车都有加速和减速但是父类无法确定每种车的具体加速度因此各个子类就需要继承车的加速和减速方法根据具体的加速度描述各自加速和减速的情况
抽象类的模板方法设计模式
抽象类体现的就是一种模板模式的设计抽象类作为多个子类的通用模板
子类在抽象类的基础上进行扩展、改造但是子类总体上会保留抽象类的行为方式。
abstract class Template {public final void getTime() {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 0; i 10000; i) {System.out.println(i);}}
}抽象类的总体设计代码
//首先定义一个Person抽象类
package com.carl.javacore.abstarctTest;import java.text.SimpleDateFormat;
import java.util.Date;public abstract class Person {public String name;//抽象类可以定义成员变量public static Date datenew Date();//可以定义静态变量public static final int LEG4;//可以定义全局常量public Person(){//可以写无参构造器}public Person(String name) {//可以写有参构造器this.name name;}public void eat(){//可以写具体方法//HH是24小时制hh是12小时制SimpleDateFormat sdfnew SimpleDateFormat(HH:mm:ss);System.out.println(sdf.format(date));String time sdf.format(date).toString().substring(0, 2);System.out.println(time);if(time.equals(09)){breakfast();}else if(time.equals(12)){lunch();}else if(time.equals(18)){dinner();}else if(time.equals(23) || time.equals(00)){supper();}else {System.out.println(吃点零食);}}public abstract void breakfast();//可以写抽象方法public abstract void lunch();public abstract void dinner();public abstract void supper();//也可以有代码块(静态代码块、局部代码块、普通代码块同步代码块)//也可以有静态方法、final方法以及static final修饰的方法/*以下都支持public static void show(){}public final void play(){}public static final void work(){}*/
}//两个Person的子类用于实现具体的抽象方法继承父类的行为
//Man子类
package com.carl.javacore.abstarctTest;public class Man extends Person{public Man(){super();}Overridepublic void eat() {super.eat();}public void breakfast() {System.out.println(鸡蛋、牛排、牛奶);}Overridepublic void lunch() {System.out.println(青椒肉丝、蒜苔炒肉米饭);}Overridepublic void dinner(){System.out.println(卤猪蹄、番茄鸡蛋汤米饭);}Overridepublic void supper() {System.out.println(烧烤);}
}
//Women子类
package com.carl.javacore.abstarctTest;public class Women extends Person{public Women(){super();}Overridepublic void eat() {super.eat();}public void breakfast() {System.out.println(鸡蛋、牛奶);}Overridepublic void lunch() {System.out.println(胡萝卜、黄瓜);}Overridepublic void dinner(){System.out.println(鸡胸肉、烤玉米);}Overridepublic void supper() {System.out.println(减肥不能吃夜宵);}
}//测试类
package com.carl.javacore.abstarctTest;/*** 抽象类是一个描述性的类具体的实现依靠子类去实现* 抽象类不能实例化必须使用多态的方式进行调用*/
public class Test {public static void main(String[] args) {Person mpnew Man();mp.eat();Person wpnew Women();wp.eat();//匿名类可以通过匿名类的方式来实现抽象类的抽象方法但是不推荐不好维护Person p2new Person(){Overridepublic void breakfast() {}Overridepublic void lunch() {}Overridepublic void dinner() {}Overridepublic void supper() {}};}
}