目录
抽象类(abstract class)
- abstract关键字:抽象的,可以用来修饰类、方法
- abstract:修饰类,抽象类
①不可被实例化
②抽象类中有构造器(所有的类都有构造器)
③抽象方法所在的类一定是抽象类
④抽象类中可以没有抽象方法(抽象类内仅有abstract class修饰,仅不可实例化,其余与一般类一致)
[当设计一个类,不需要创建此类的实例时,就可以考虑将其设置为抽象地,由其子类实现抽象方法 ]
-
abstract修饰方法:抽象方法——只声明,无定义
①格式:[权限修饰符] abstract [返回值类型] [方法名] ();
②抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此抽象方法
③若子类继承抽象类,并重写了所有的抽象方法,则此类是一个“实体类”,即可以实例化
④若子类继承抽象类,没有重写所有的抽象方法,此类中仍有抽象方法,则此类必须声明为抽象类
//抽象类中有抽象方法
abstract class Person{
int id;
String name;
public Person() {
super();
// TODO Auto-generated constructor stub
}
public abstract void eat();
public abstract void walk();
}
//抽象类中无抽象方法
abstract class Person{
int id;
String name;
public Person() {
super();
// TODO Auto-generated constructor stub
}
public void eat() {
System.out.println("吃饭");
}
public void walk() {
System.out.println("散步");
}
}
//子类继承自抽象类
class Student extends Person{
public Student() {
super();
// TODO Auto-generated constructor stub
}
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("学生吃饭");
}
@Override
public void walk() {
// TODO Auto-generated method stub
System.out.println("学生走路");
}
}
- 不可用来修饰属性、私有方法、构造器、静态方法、final的方法
①构造器不能被重写
②子类不能覆盖(重写)声明为private的方法
模板方法(TemplateMethod)设计模式