abstract
抽象的
- 可以修饰
类
、方法
- 不能用于修饰
私有方法
(因为我们需要重写方法的) - 不能用于修饰
静态方法
(子类与父类同名同参的static方法不叫重写) - 不能用于修饰
final方法
(不能被重写)
抽象类.
权限修饰符 abstract class A{}
权限修饰符:默认 、
public
- 不能被实例化(不能造对象)
- 有构造器,便于子类实例化时调用
抽象方法.
权限修饰符 abstract 返回值 方法名(形参列表);
权限修饰符除了
private
- 只有方法声明,没有方法体
- 包含抽象方法的类一定是抽象类
- 若子类,重写了抽象类所有的抽象方法,才可以实例化
- 若子类,没有完全重写抽象类所有的抽象方法,则这个子类仍然是抽象类
拓展.
抽象类的匿名子类.
//抽象类
public abstract class Person {
public abstract void work();
public void rest() {
System.out.println("休息一会儿");
}
public static void main(String[] args) {
/*
* 匿名对象:没有对象引用指向的对象
* 抽象类的匿名子类:用抽象类名代替子类名,无需构建子类(像men)
*
*/
System.out.println(new Men());//非匿名类的匿名对象 (Person类(抽象类的非匿名子类的匿名对象))
Men m = new Men();//非匿名类的非匿名对象 (Person类(抽象类的非匿名子类的非匿名对象))
System.out.println(m);
//抽象类的匿名子类的非匿名对象
// 我们不能说 new Person是一个父类的对象(因为父类(抽象类)无法被实例化)
// 只能认为Person p = new Person 是Person的匿名子类的非匿名对象
Person p = new Person() {
@Override
public void work() {
}
};
//抽象类的匿名子类的匿名对象
new Person() {
@Override
public void work() {
}
};
}
}
class Men extends Person{
@Override
public void work() {
System.out.println("拧一百个螺丝");
}
@Override
public String toString() {
return "Men [" + hashCode() + "]";
}
}