抽象方法主要指不能具体实现的方法并且使用abstract关键字修饰,也就 是没有方法体。
具体格式如下:
访问权限 abstract 返回值类型 方法名(形参列表);
public abstract void cry();
1.抽象类中可以有成员变量、构造方法、成员方法;
2. 抽象类中可以没有抽象方法,也可以有抽象方法;
3.拥有抽象方法的类必须是抽象类,因此真正意义上的抽象类应该是具有 抽象方法并且使用abstract关键字修饰的类
抽象类的实际意义• 抽象类的实际意义不在于创建对象而在于被继承。
• 当一个类继承抽象类后必须重写抽象方法,否则该类也变成抽象类,也 就是抽象类对子类具有强制性和规范性,因此叫做模板设计模式。
code demo:
public abstract class AbstractTest { private int cnt; public AbstractTest() { } public AbstractTest(int cnt) { setCnt(cnt); } public int getCnt() { return cnt; } public void setCnt(int cnt) { this.cnt = cnt; } // 自定义抽象方法 public abstract void show(); }
public class SubAbstractTest2 extends AbstractTest { @Override public void show() { System.out.println("使用多态方式可以提高代码的可维护性哦!"); } public void test() { System.out.println("第二个子类中独有的方法!"); } }
public class SubAbstractTest extends AbstractTest/*, Account*/ { @Override public void show() { System.out.println("其实我是被迫重写的,否则我也得变成抽象的呀!"); } public static void main(String[] args) { // 1.声明本类类型的引用指向本类类型的对象,没有多态 SubAbstractTest sat = new SubAbstractTest(); sat.show();//调用SubAbstractTes中的show System.out.println("-------------------------------"); // 2.声明AbstractTest类型的引用指向子类的对象,形成了多态 // 多态的使用场合之二: 直接在方法体中使用抽象类的引用指向子类类型的对象 AbstractTest at = new SubAbstractTest2(); // 编译阶段调用父类版本,运行阶段调用子类版本 at.show(); ((SubAbstractTest2) at).test(); System.out.println("-------------------------------"); SubAbstractTest2 sat2 = new SubAbstractTest2(); sat2.test(); } }