/*
什么情况用抽象类呢?
当我们描述一类事物的时候,发现该类事物确实存在着某种行为,但是这种
行为有时不具体的,这时我们就可以抽取这种行为的声明,但是不去现实
这一种行为,我们称之为抽象行为,我们要用到抽象类
抽象类要注意的事项
1.如果一个函数不存在方法体,那么必须要用abstract修饰符来修饰成抽象方法!
2.如果一个类里面存在抽象方法的话,那么该类也必须使用abstract!
3.如果一个非抽象类继承了一个抽象类,那么该类必须实现该类
所继承的抽象类的所有方法!
4.抽象类里面可以存在抽象的方法和非抽象的方法!
5.抽象类里面可以没有抽象方法
6.抽象方法是不能实例化的,因为抽象方法是很有可能存在抽象方法,如果你
让抽象方法创建实例,用实例去调用抽象方法是没有任何意义的
7.抽象类是有构造函数的,此构造方法是给子类创建对象时初始化父类的属性的
抽象类不能与那些关键字组合修饰呢?
不能与priavte
--因为抽象方法需要子类重写的,但是却被private修饰这样会自相矛盾
不能与static
--因为如果可以用static修饰,则可以利用类名.抽象函数,但是这样
是毫无意义的
不能与final
--因为抽象方法需要子类重写的,但是却被fianal修饰这样会自相矛盾
*/
class ChouXiang {
public static void main(String[] args) {
Animal animal=new Animal();//错误: Animal是抽象的; 无法实例化(注意6)
System.out.println("Hello World!");
}
}
// Animal不是抽象的(注意2)
abstract class Animal {
// 错误: 缺少方法主体, 或声明抽象(注意1)
//public abstract void eat();(注意5)注释这个抽象方法,程序并没报错
//(注意6)
public Animal(){
}
//抽象类里的非抽象方法(注意4)
public void pao(){
System.out.println("动物在跑");
}
}
//错误: dog不是抽象的, 并且未覆盖Animal中的抽象方法eat()(注意3)
class dog extends Animal {
public void eat(){
System.out.println("狗在吃");
}
} |
|