抽象类和接口的简单使用
为了实际开发中的可拓展行,本次内容会简单说明抽象类和接口 抽象方法:不能具体实现的方法同时使用abstract修饰,就是没有方法体 抽象类:不能具体实例化的类,使用abstract修饰
定义抽象类,定义接口,如果后期需要新增别的方法,也方便后期拓展
抽象类中的抽象方法不是必须的,可有可有 但是存在抽象方法的就必须是抽象类
下面分析一个问题,为什么抽象类无法新建对象?
那是因为抽象类中可能存在抽象方法,抽象方法是没有方法体的,也就是调用抽象方法是没有意义的
抽象类的意义不是创建对象而在于被继承
接口:比抽象类还抽象的存在
单继承却是可以多实现
抽象类和接口的区别 抽象类使用abstract class修饰 接口使用interface修饰 继承抽象类使用extends,实现接口使用implements 抽象类中可以有构造方法,但是接口不能有构造方法(因为接口中的都是抽象方法) 抽象类中有成员变量,接口中只能有常量
在jdk1.8中,接口新特性,接口可以增加非抽象方法
在jdk1.8中,接口新特性,接口也可以增加静态方法
一般静态方法多适用于工具类中
抽象类中可以写普通方法,方便普通类去继承
对于java的模板设计模式,是将不同对象相同的共性抽到父类中
/** * */ package com.java.abstracttest; /** * @author yourheart * @update 2022年3月29日 下午9:26:04 * @description: */ public abstract class HouseTemplate { protected HouseTemplate(String name) { this.name = name; } protected String name; protected abstract void buildDoor(); protected abstract void buildWindow(); protected abstract void buildWall(); protected abstract void buildBase(); // 公共逻辑 public final void buildHouse() { buildBase(); buildWall(); buildDoor(); buildWindow(); } } /** * */ package com.java.abstracttest; /** * @author yourheart * @update 2022年3月29日 下午9:26:46 * @description: */ public class HouseOne extends HouseTemplate { HouseOne(String name) { super(name); } @Override protected void buildDoor() { System.out.println(name + "的门要采用防盗门"); } @Override protected void buildWindow() { System.out.println(name + "的窗户要面向北方"); } @Override protected void buildWall() { System.out.println(name + "的墙使用大理石建造"); } @Override protected void buildBase() { System.out.println(name + "的地基使用钢铁地基"); } } /** * */ package com.java.abstracttest; /** * @author yourheart * @update 2022年3月29日 下午9:28:12 * @description: */ public class HouseTwo extends HouseTemplate { HouseTwo(String name) { super(name); } @Override protected void buildDoor() { System.out.println(name + "的门采用木门"); } @Override protected void buildWindow() { System.out.println(name + "的窗户要向南"); } @Override protected void buildWall() { System.out.println(name + "的墙使用玻璃制造"); } @Override protected void buildBase() { System.out.println(name + "的地基使用花岗岩"); } }
public class Clienter { public static void main(String[] args) { HouseTemplate houseOne = new HouseOne("房子1"); HouseTemplate houseTwo = new HouseTwo("房子2"); houseOne.buildHouse(); houseTwo.buildHouse(); } }