问题:
1.抽象类中可以有成员变量吗?--可以!!!
2.抽象类中可以有成员常量了吗?----可以!!!! 创建抽象父类中的成员常量,注意要初始化
3.抽象类中可以有普通方法吗?---可以!!
抽象类中可以都是普通方法吗? ---可以!!!如果一个类中都是普通方法,为啥还要被声明抽象类呢?
原因:抽象类不可以创建对象
所以如果不想让外界创建不类的对象,就可以把普通类声明抽象类
向上抽取形成父类,那么子类继承父类以后必须重写或实现父类方法
抽象方法:
1.没有方法体的方法叫做抽象方法,被abstract关键字修饰
2.用关键字abstract修饰的类称为抽象类,
如果一个类中包含抽象方法,那么这个类必须声明抽象类
当子类继承了抽象父类以后,要不变成一个抽象子类,要不实现父类的所有抽象方法?
方案一:
选择不实现父类的抽象方法,子类也变成抽象类
abstract class pig extends Animal{
方案二:
作为一个普通子类实现父类的所有抽象方法
class pig extends Animal{ //实现父类的抽象方法 @Override//注解,相当于标记,标记这是个重写的方法 public void fly() { System.out.println("我终于把我爸钱还完了,~"); }
继承:
当一个类继承了父类,并且父类是抽象父类时,子类需要重写(实现)父类的所有抽象方法或者把自己变成抽象子类
注意:
抽象类不可以创建对象(实例化~~)
你可以反过来想:
当你创建一个类,不想被别人用时,可以加abstract, 反过来想.
创建多态对象:
不能在创建父类抽象方法自己的对象,不能实例化,
----可以创建多态对象 父类 a = new 子类
总结:abstract注意事项题:
抽象方法要求子类继承后必须重写。
那么,abstract关键字不可以和哪些关键字一起使用呢?以下关键字,在抽象类中。用是可以用的,只是没有意义了。
1.private:被私有化后,子类无法重写,与abstract相违背。
2.static:静态优先于对象存在,存在加载顺序问题。
3.final:被final修饰后,无法重写,与abstract相违背
面试题:总结
在抽象类中可以有构造方法
父类构造方法优先于子类执行
抽象类不可以实例化(创建对象)
抽象类中存在构造方法不是为了创建本类对象时调用的是为了创建子类对象时调用
final关键字:
概念:
- 是java提供的一个关键字
- final是最终的意思
- final可以修饰类,方法,成员变量
- 初衷:java出现继承后,子类可以更改父类的功能,当父类功能不许子类改变时,可以利用final关键字修饰父类。
特点:
- 被final修饰的类,不能被继承
- 被final修饰的方法,不能被重写
- 被final修饰的变量是个常量,值不能被改变
- 常量的定义形式:final 数据类型 常量名 = 值
面试题:
final是JAVA中的一个关键字,表示最终的意思,final可以修饰类,可以修饰变量,,可以修饰方法,那么被final的类是最终类不可被继承,被final的变量是常量值不可被修改,被final修饰的方法是这个方法的最终实现不可被重写
抽象类中可以有成员常量了吗?----可以!!!!
创建抽象父类中的成员常量,注意要初始化