抽象类
1.普通类是一个完善的功能类,可以直接实例化对象,而抽象类不能,但是类的其他功能能依然存在成员变量、成员方法和构造方法(主要供子类调用)的访问方式和普通类一样。
2.由于抽象类不能被实例化,所以抽象类必须被继承才能使用,所以要在设计阶段决定要不要设计抽象类。(采用向上转型的方式 父类对象指向子类引用)
3.抽象类不一定有抽象方法,但是包含抽象方法一定要是抽象类
4.通过abstract修饰的类
5.抽象类不能使用final修饰符,因为抽象类就是需要继承的,final修饰符会使类无法被继承
public abstract class Shape {
public int width;
public int height;
public Shape(int width, int height) {
this.width = width;
this.height = height;
}
public abstract double area();
}
抽象方法:
1.抽象方法必须存在于抽象类中
2.抽象方法没有方法体
3.子类重写父类时,必须重写父类所有的抽象方法
4.抽象方法不要使用private,因为抽象方法需要被子类继承
5.abstract关键字不能用于static方法和构造方法中,static修饰的方法,能被继承但不能被重写,即使子类中和父类中有一样的静态方法,该静态方法只属于子类
6.不能使用fianl修饰抽象方法,因为fina修饰抽象方法,会使该方法能被继承但不能被重写
public abstract double area();
接口:
1.一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)
2.接口:包括全局变量和公共的抽象方法,接口中声明的方法默认都是抽象的(但是没有abstract修饰),没有方法体,它是解决Java无法使用多继承的一种手段。
3. public interface <接口名>
4.因为接口中抽象方法需要被具体类实现才有意义,所以不能使private和proteced 只能是public
5.所有的实现类都会自动继承接口中的默认方法,默认方法也可以被重写
接口和抽象类区别
1.相同点
1.1都不能被实例化
1.2接口的实现类和抽象类的子类都只有实现了接口和抽象类的方法才能被实例化
2.不同点
2.1接口只能定义方法没有实现,默认使抽象方法,而抽象类可以定义与实现非抽象方法
2.2实现接口implements 继承抽象类extends,一个类可以实现多个接口,只能继承一个类
2.3接口强调特定功能的实现,抽象类强调所属关系
2.4接口成员变量默认是public static final,其所有成员方法都是public、abstract,抽象类的成员变量默认是defaulte,可以在子类中被重新定义,也可以重新赋值,抽象方法不能被static、private、不能带花括号。
2.5接口不能包含构造器。抽象类可以包含构造器,构造器并不用于创建对象,而是让其子类调用这些构造方法完成属于抽象类的初始化操作
2.6接口不能包含初始化块,但是抽象类可以包含初始化块