java抽象类的写法(java-抽象类笔记)
抽象方法和抽象类
抽象方法 使用 abstract 修饰的方法 ,没有方法体 ,只有声明 。 定义的是一种“规范 ” ,就是告诉子类必须要给抽象方法提供具体的实现 。 抽象类 包含抽象方法的类就是抽象类 。 通过抽象类 ,我们就可以做到严格限制子类的设计 ,使子类之间更加通用 。 //抽象类的定义 public abstract class 类名 {} //抽象方法的定义 public abstract void eat();抽象类中不一定有抽象方法 ,有抽象方法的类一定是抽象类
抽象类不能实例化
抽象类可以有构造方法
抽象类的子类
要么重写抽象类中的所有抽象方法
要么是抽象类抽象类和抽象方法的基本用法
//抽象类 abstract class Animal { abstract public void shout(); // 抽象方法 } class Dog extends Animal { // 子类必须实现父类的抽象方法 ,否则编译错误 public void shout() { System.out.println("汪汪汪!"); } public void seeDoor() { System.out.println("看门中...."); } } // 测试抽象类 public class TestAbstractClass { public static void main(String[] args) { Dog a = new Dog(); a.shout(); a.seeDoor(); } }抽象类的使用要点:
1. 有抽象方法的类只能定义成抽象类
2. 抽象类不能实例化 ,即不能用 new 来实例化抽象类 。
3. 抽象类可以包含属性 、方法 、构造方法 。但是构造方法不能用来 new 实例 ,只能用来被子类调用 。
4. 抽象类只能用来被继承 。
5. 抽象方法必须被子类实现 。
抽象类的案例
案例需求
定义猫类(Cat)和狗类(Dog)
猫类成员方法:eat(猫吃鱼)drink(喝水…)
狗类成员方法:eat(狗吃肉)drink(喝水…)
实现步骤
猫类和狗类中存在共性内容 ,应向上抽取出一个动物类(Animal)
父类Animal中 ,无法将 eat 方法具体实现描述清楚 ,所以定义为抽象方法
抽象方法需要存活在抽象类中,将Animal定义为抽象类
让 Cat 和 Dog 分别继承 Animal ,重写eat方法
测试类中创建 Cat 和 Dog 对象 ,调用方法测试
代码实现
// 动物类 abstract class Animal { public void drink() { System.out.println("喝水"); } public Animal() { } public abstract void eat(); } // 猫类 继承抽象类 并重写其中方法 class Cat extends Animal { @Override public void eat() { System.out.println("猫吃鱼"); } } // 狗类 继承抽象类 并重写其中方法 class Dog extends Animal { @Override public void eat() { System.out.println("狗吃骨头..."); } } public class test { public static void main(String[] args) { Dog d = new Dog(); d.eat(); d.drink(); Cat c = new Cat(); c.drink(); c.eat(); // Animal a = new Animal(); 抽象类不能实例化 // a.eat(); } }模板设计模式
设计模式
设计模式(Design pattern) 是一套被反复使用 、多数人知晓的 、经过分类编目的 、代码设计经验的总结 。 使用设计模式是为了可重用代码 、让代码更容易被他人理解 、保证代码可靠性 、程序的重用性 。
模板设计模式
把抽象类整体就可以看做成一个模板,模板中不能决定的东西定义成抽象方法 让使用模板的类(继承抽象类的类)去重写抽象方法实现需求
模板设计模式的优势
模板已经定义了通用结构 ,使用者只需要关心自己需要实现的功能即可
示例代码
/* 作文模板类 */ abstract class CompositionTemplate { public final void write() { System.out.println("<<我的爸爸>>"); body(); System.out.println("啊~ 这就是我的爸爸"); } public abstract void body(); } // 实现类A class Tom extends CompositionTemplate { @Override public void body() { System.out.println("那是一个秋天, 风儿那么缠绵,记忆中, " + "那天爸爸骑车接我放学回家,我的脚卡在了自行车链当中, 爸爸蹬不动,他就站起来蹬..."); } } // 实现类B class Tony extends CompositionTemplate { @Override public void body() { } /* * public void write(){ * * } */ } // 测试类 public class test { public static void main(String[] args) { Tom t = new Tom(); t.write(); } }创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!