1.抽象类
package com.itstudy.bean; //抽象类 /** * 抽象类:描述的内容不是具体的内容 * 1.有abstract修改,并且有抽象方法 * 2.一共类中有抽象方法,那么这个类一定是抽象类 * 3.抽象类中不一定有抽象方法,也可以有:成员变量,构造方法,一般成员方法就是带方法体,构造代码块,静态代码块 * 4.继承抽象类的类如果不是抽象类,那么必须重写抽象类中的抽象方法,不然会报错 * 5.抽象类不是顶层父类,顶层父类是OBJECT类,但一定要有子类继承它,并重写抽象方法,否则毫无意义 * 6.抽象类中有构造方法,但不能创建对象,那么构造方法存在的意义是啥,是共子类调用的 */ public abstract class People { //成员变量 int a = 10; //构造方法 public People(){ System.out.println("a = " + a); } //抽象方法 public abstract void sleep(); //成员方法 public void run(){ System.out.println("人都要运动...."); } }
继承抽象类
public class Student extends People {
//必须重写父类抽象方法
@Override
public void sleep() {
System.out.println("学生在宿舍睡觉...");
}
//特有方法
public void leaning(){
System.out.println("学生在教室学习...");
}
}
继承抽象类
public class Teacher extends People {
//必须重写父类共有方法
@Override
public void sleep() {
System.out.println("老师在家里睡觉...");
}
//特有方法
public void speak(){
System.out.println("老师在教室讲课...");
}
}
测试类
package com.itstudy.test; import com.itstudy.bean.Student; import com.itstudy.bean.Teacher; public class test01 { public static void main(String[] args) { Student student = new Student(); Teacher teacher = new Teacher(); //共有方法 student.sleep(); teacher.sleep(); //特有方法 student.leaning(); teacher.speak(); } }
测试结果:
2.抽象类的存在的意义
抽象类本身存在意义需要子类重写抽象方法,并且抽象类起到模板思。
java中的设计模式有23种。
常见的设计模式:代理设计模式、装饰者设计模式、工厂设计模式、单列设计模式、模板设计模式。
根据抽象类产生的模板设计模式:
相同的内容即共性内容在父类中实现,如果也是共性的,但是方法体实现的内容不一样,此时抽象类中定义抽象方法,共子类去实现,实现抽象方法完成自己特有的内容。
模板设计模式的案例
父类(模板)
package com.itstudy.bean;
public abstract class Animal {
//共性内容统一
public void dining(){
System.out.println("感到有饥饿感..");
cook();
System.out.println("开始吃饭..");
}
//方法体内容不同,则有子类实现抽象方法,完成不同的内容
public abstract void cook();
}
不同的类继承抽象类实现特有的方法体内容
package com.itstudy.bean;
public class Wolf extends Animal {
//做饭情况
@Override
public void cook() {
System.out.println("狼出门猎杀小白兔...");
}
}
public class Dog extends Animal {
//做饭情况
@Override
public void cook() {
System.out.println(" 狗等着主人给喂食...");
}
}
测试类:
package com.itstudy.test; import com.itstudy.bean.Dog; import com.itstudy.bean.Wolf; public class test02 { public static void main(String[] args) { Wolf w = new Wolf(); w.dining(); Dog dog = new Dog(); dog.dining(); } }
结果: