南京网站建设服务,怎样通过网络销售自己的产品,网站积分解决方案,乐陵seo优化信德文章目录1、抽象方法和抽象类2、抽象类的作用当编写一个类时#xff0c;常常会为该类定义一些方法#xff0c;用于描述该类的行为方式#xff0c;这些方法都有具体的方法体。但在某些情况下#xff0c;某个基类只是知道其子类应该包含那些方法#xff0c;但不知道子类是如…
文章目录1、抽象方法和抽象类2、抽象类的作用当编写一个类时常常会为该类定义一些方法用于描述该类的行为方式这些方法都有具体的方法体。但在某些情况下某个基类只是知道其子类应该包含那些方法但不知道子类是如何实现这些方法的。
如何让一个基类只包含方法签名又无需提供方法的具体实现
使用抽象方法即可满足该要求抽象方法是只有方法签名没有方法实现的方法。
利用抽象类和抽象方法可以更好的发挥多态的优势使程序更加灵活。
1、抽象方法和抽象类
抽象方法使用修饰符 abstract 来修饰的方法抽象方法不能有方法体。
public abstract void abstractMethod(); // 注意此时没有方法体 {}直接;结尾
public abstract void abstractMethod(){ } // 直接报错因为有方法体 {}抽象类使用修饰符 abstract 来修饰的类抽象类里可以没有抽象方法。
public abstract class AbstractClass { } // 该抽象类里什么都没有注
1、含有抽象方法的类只能被定义成抽象类。
2、含有抽象方法的类的三种情况
直接定义了一个抽象方法。继承了一个抽象基类但没有完全实现基类里的抽象方法。实现了一个接口但没有完全实现接口里的方法。
3、抽象类不能被实例化无法使用 new 关键字来调用抽象类的构造器实例化抽象类即使抽象类里不含抽象方法这个抽象类也不能实例化。
4、抽象类只能被继承抽象方法必须由子类提供实现重写。
5、final 和 abstract 永远不能同时使用final 修饰的类不能被继承final 修饰的方法不能被重写。
6、abstract 不能修饰变量、构造器即没有抽象变量、抽象构造器。
7、static 和 abstract 不能同时修饰方法但可以同时修饰内部类。
8、private 和 abstract 不能同时修饰方法但可以同时修饰内部类abstract 关键字修饰的方法必须被其子类重写才有意义否则这个方法永远不会有方法体因此 abstract 方法不能定义为 private 访问权限。
9、抽象类里可以包含的
成员变量实例变量、类变量方法抽象方法、实例方法、类方法构造器不能用于创建自己的实例主要用于被其子类调用初始化父类成员使用的代码块类代码块、实例代码块内部类接口、枚举
// 抽象类
public abstract class AbstractClass {// 实例变量private int age;// 类变量private static String name;// 实例代码块{}// 类代码块static {}// 抽象方法public abstract void abstractMethod();// 实例方法public void defaultMethod() {}// 类方法public static void a() {}// 构造器public AbstractClass() {}// 接口Comparable anInterface;// 枚举Enum anEnum;// 内部类class A{ }// 静态内部类static class B{}
}抽象类的得与失 得可以包含抽象方法
失无法创建实例
2、抽象类的作用
抽象类不能创建实例只能当成父类来被继承。
从语义的角度来看抽象类是从多个具体类中抽象出来的父类它是更高层次的抽象。
从多个具有相同特征的类中抽象出一个抽象类以这个抽象类作为其子类的模板从而避免了子类设计的随意性。
抽象类体现的就是一种模板模式的设计抽象类作为多个子类的通用模板子类在抽象类的基础上进行扩展、改造但子类总体上会大致保留抽象类的行为方式。
抽象类里提供多个子类的通用方法并把方法推迟留到子类中来实现这就是一种模板模式。