1.抽象类
1、把所有的三角形抽象为三角形类, 把所有的圆形抽象为圆形类,把所有的矩形抽象为矩形类, 把所有的三角形/圆形/矩形等所有平面图形抽象为平面图形类。
2、在平面图形类, 可以进行对平面图形求面积/求周长等操作, 但是不同的图形有不同的求法, 在平面图形类中, 求面积/求周长的操作没法具体实现.
就像所有的动物都会动, 不同的动物动的方式不同,动物类有这个操作,也没法具体实现。
3、当一个类的某个操作没法具体实现时,这个操作可以定义为抽象方法。
4、抽象方法使用abstract修饰的方法,只有方法的声明部分,没有方法体。
测试抽象类的特点:
- 只要使用abtract修饰的类就是抽象类。
- 含有抽象方法的类必须定义 为抽象类,但是,抽象类中不一定含有抽象方法。
- 有时,对现有的类进一步抽象形成更高层级的类(更抽象的类),如食物类,动物类, 它们是没法实例化,这种情况下,可以定义为抽象类。
- 抽象类是一种引用数据类型, 可以定义变量, 但是抽象类不能实例化对象。
- 抽象类定义引用可以赋值子类对象。
- 抽象类肯定含有构造方法, 子类创建对象时调用子类构造方法,子类构造方法体执行前会先执行父类的构造方法。
- abstract与final不能同时使用。
1、抽象类,用来表示一个抽象概念.
2、是一种只能定义类型,而不能产生对象的类,所以定义了抽象类则必须有子类的出现。
3、抽象类的好处在于能够明确地定义子类需要覆写的方法。
4、抽象类需要使用abstract声明.
5、抽象类里可以实现抽象方法,该方法特征在于:只有声明,并没有方法体(所以子类必须全部覆写,并且子类不能为抽象类)
抽象类缺点: 由于Java的单继承,每个类只能从一个抽象类继承.没有接口灵活
当父类的方法不确定时,可以将该方法设计为抽象方法。
抽象方法就是没有实现的方法,即没有方法体。
当一个类中有抽象方法时,必须将该类定义为抽象类。
一般来说,抽象类会被继承,由其子类来实现抽象方法。
package com.hsf.extends_.abstract_;
public abstract class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public abstract void eat();
}
2、使用场景:
抽象类价值更多的在于设计,是设计中设计好之后,让子类继承并实现抽象类。
3、细节:
1、抽象类不可以被实例化(new)。
2、抽象类不一定要包含抽象方法。
3、有抽象方法一定是抽象类。
4、abstract只能修饰类和方法,不能修饰属性和其它。
5、抽象类可以有任意成员(本质还是类)。
6、抽象方法不能有主体。
7、如果一个类继承了抽象类,则它必须实现抽象类中的抽象方法或者它自己也声明为抽象类。
8、抽象方法不能使用private、final、static来修饰,因为他们都是和重写无关的(有了他们就无法重写了)。